---
## 源碼編譯安裝
### 編譯安裝的目的
* 針對硬件,發揮硬件最大性能
* 使在apache在服務器中添加補丁成為可能。
* 更好的整合程序,例如整合apache,php, mysql
> 補充:apache的性能主要依靠CPU和內存,使用gcc編譯參數對其優化,性能提升并不明顯。
### 編譯環境說明
* 空間需求 源碼70M,編譯后 20M
* 編譯要求 apache源碼是由ANSIC語言編寫,需要ANSIC編譯器,因此可以使用gcc編譯器
* apr和apr-util工具包需要時1.2以上版本
* apache本身并不需要perl,但有些支持腳本是由perl編寫的
* APACI 自動配置樣式接口(Apache AutoConf-style Interface),它本身并不對源碼進行編譯,而是檢查編譯環境,指定或禁止apache模塊,設置安裝路徑,并創建make程序的描述文件MakeFile,方便make程序進行編譯
### configure腳本和常見編譯參數
可以將configure理解為APACI,如果一切順利configure將會建立一系列MakeFile文件
#### 常見編譯參數
```
--prefix apache 安裝目錄
--enable-module=so 使apahce以DSO方式加載模塊
--enable-mods-shared=all 以共享方式編譯全部模塊(不包括核心模塊)
--enable-modules=all/most 以靜態方式編譯所有模塊
--with--mpm=worker 以worker方式運行
--enable-deflate 壓縮后傳輸
--enable-proxy-fcgi
--enable-proxy fastcgi支持選項
--enable-rewrite 支持url重寫
--enable-cgid
--enable-cgi
–-enable-headers 這個默認是開啟的,提供允許對HTTP請求頭的控制
-–enable-expires 激活彧通過配置文件控制HTTP的“Expires:”和“Cache-Control:”頭內容,即對網站圖片、js、css等內容,提供客戶端瀏覽器緩存的設置。這個是apache調優的一個重要選項之一。
```
## 開始安裝
apr[官網下載][1]或者使用國內的[鏡像][5]
### 安裝apr和apr-util 方式1
apr和apr-util作為httpd編譯安裝的一部分
```
tar -zxvf apr-1.4.6.tar.gz
tar -zxvf apr-util-1.5.2.tar.gz
cp -a apr-1.4.1 httpd-2.4.20/srclib/apr
cp -a apr-util-1.4.1 httpd-2.4.20/srclib/apr-util
```
`./configure`時,后面添加`--with-included-apr`選項
* 注意
經過測試,以上apr版本不支持event
使用apr-1.5.2和apr-util-1.5.2可支持event
---
### 安裝apr和apr-util 方式2
#### apr和apr-util下載
版本:apr-1.4.6.tar.bz2
```
tar xf apr-1.4.6.tar.bz2
./configure --prefix=/usr/local/apr
make
make install
```
版本:apr-util-1.4.1.tar.bz2
```
tar xf apr-util-1.4.1.tar.bz2
./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
make
make install
```
此處編譯的apr不用輸出頭文件/庫文件,只為httpd使用。
---
### 安裝httpd
[apache官方下載站點][4]
[apache存檔站點][3] **推薦**
2.4最新版[下載][2]
#### 編譯環境
```
yum install -y gcc gcc++ zlib zlib-devel openssl openssl-devel pcre pcre-devel
```
#### 下載源碼包
```
wget http://archive.apache.org/dist/httpd/httpd-2.4.23.tar.bz2
wget http://archive.apache.org/dist/httpd/httpd-2.4.23.tar.bz2.md5
```
#### 校驗md5
```
md5sum -c httpd-2.4.23.tar.bz2.md5
httpd-2.4.23.tar.bz2: OK
```
### MPM靜態和動態模塊說明
#### 構建MPM為靜態模塊 --with-mpm=NAME
在構建時選擇一種MPM,編譯到服務器中。如果要改變MPM,必須重新構建。編譯完成后,可以使用 ./httpd -l 來確定選擇的MPM。
#### 構建 MPM 為動態模塊 --enable-mpms-shared
在Unix或類似平臺中,MPM可以構建為動態模塊,與其它動態模塊一樣在運行時加載。在執行configure腳本時,使用--enable-mpms-shared選項即可啟用此特性。當給出的參數為all時,所有此平臺支持的MPM模塊都會被安裝。默認MPM,通過--with-mpm選項來指定。編輯LoadModule指令內容可以選擇不同的MPM。
#### 編譯
```
./configure \
--prefix=/usr/local/apache \
--with-mpm=prefork \
--enable-rewrite \
--enable-deflate \
--enable-so \
--enable-ssl \
--enable-cgid \
--enable-cgi \
--enable-modules=most \
--enable-mods-shared=most \
--enable-mpms-shared=all \
--with-included-apr \
--enable-headers
```
>[info] 如果啟用fcgi,需要這兩個選項
~~~
--enable-proxy
--enable-proxy-fcgi
~~~
如果,apr和apr-util是單獨安裝的,需指定以下選項,不使用`--with-included-apr`選項
```
--with-apr=/usr/local/apr \
--with-apr-util=/usr/local/apr-util
```
一切正常的話就可以執行make
```
make && make install
```
如果有多顆CPU,則可以使用多顆CPU來加快編譯速度
~~~
make -j2
~~~
## 編譯之后
### config.nice
這個文件是一個shell腳本,包含了最后一次成功運行configure命令的命令行腳本;如果再次編譯,需要在原有的基礎上增加模塊,可以這樣操作
~~~
./config.nice --enable-cache
~~~
### config.layout
為了更好控制編譯過程中的文件位置和后繼安裝中的文件位置,默認使用的是Apache布局;
在編譯時如果想使用,則使用`--enable-layout=Layout_ID`選項
### 清除調試符號
在GCC的默認情況下,大多數程序和庫都是帶有調試符號編譯的,這些調試符號在調試程序時使用,它不但能給出內存地址,還能給出海署名。但對于生產系統的服務器是不必要的,因為調試符號的存在,apache會占用更多的內存。
#### 清除調試符號
~~~
strip /usr/local/apache/bin/httpd
~~~
清除后,從1.8M降到500K
> 注意
清除調試符號之后,不能在使用調試工具得到調試信息了。
## 可能出現的問題
**報錯**
`util_pcre.c:128: error: 'PCRE_DUPNAMES' undeclared (first use in this function)`
網上說版本過低
下載pcre源碼編譯安裝(編譯選項默認)[官網][6]
[下載][7]
[pcre編譯方法文檔][8]
編譯時,添加如下選項`--with-pcre=/usr/local/bin/pcre-config`(pcre編譯安裝默認生成的文件路徑)
**注意**
多次編譯時,注意使用`make distclean`清除編譯緩存
[1]:http://apr.apache.org/
[2]:http://archive.apache.org/dist/httpd/httpd-2.4.23.tar.bz2
[3]:http://archive.apache.org/dist/httpd/
[4]:http://apache.org/dist/httpd/
[5]:http://mirrors.tuna.tsinghua.edu.cn/apache/apr/
[6]:http://www.pcre.org/
[7]:http://nchc.dl.sourceforge.net/project/pcre/pcre/8.35/pcre-8.35.tar.bz2
[8]:http://www.cnblogs.com/renhao/archive/2011/08/17/2143264.html
- 目錄
- 離散的內容
- IO模型
- 網卡綁定
- ssh
- 硬件測試
- 硬件
- limits
- 網絡流量
- 硬盤IO
- 硬盤
- tmux
- 主機名和域名
- http_proxy
- iptables
- 內核參數
- 塊設備和字符設備
- 內存
- 虛擬內存并非交換分區
- 網絡延時
- 概念
- 多核壓縮
- linux基礎
- SSH協議
- 軟件管理
- yum
- 制作本地源 yum系列
- 制作本地源 apt系列
- apt
- 在 Linux 中移除從源代碼安裝的程序的一種簡單的方法
- 其他
- 源碼編譯和二進制安裝后更改配置
- DNS
- bind
- 守護進程
- 特殊權限
- limit.conf配置
- 網絡
- shell-ok
- 變量ok
- 數組ok
- 系統變量和環境變量
- 運算符和計算-ok
- 條件測試-ok
- 選擇-ok
- shell循環-ok
- 輸出echo和printf-ok
- 技巧-ok
- pre-web
- http協議
- web服務器
- Apache
- apache安裝
- yum安裝
- 二進制安裝
- 編譯安裝
- httpd命令
- 運行 監控apache
- apache配置文件
- 常用配置
- MPM多處理模塊
- 編譯模塊
- apache模塊
- apache核心模塊
- apache標準模塊
- apache第三方模塊
- 虛擬主機
- 1
- CGI-FastCGI-SSI
- 別名和重定向
- apache應用
- 301重定向
- apache防盜鏈
- http轉化為https
- 訪問時間段控制
- 控制訪問目錄
- 限制指定USER_AGENT
- 不同客戶端訪問不同網頁
- apache黑名單
- httpd之禁止解析php
- 不記錄css/js/img的訪問日志
- 瀏覽器端靜態緩存
- apache訪問日志自動切割
- order-require
- 壓縮傳輸
- httpd-ssl
- apache代理
- 正向代理
- 反向代理
- apache調優
- httpd壓力測試工具ab
- CGI測試
- php
- php原理
- httpd和php的結合方式
- php yum安裝之DSO模式
- php 編譯安裝之DSO模式
- php-fpm詳解
- php yum安裝之php-fpm模式
- php 編譯安裝之FastCGI模式
- php擴展之mysql
- php擴展之gd
- php擴展之pcntl
- php擴展之xcache
- php擴展之ZendGuardLoader
- phpMyAdmin
- wordpress
- 數據庫-mysql
- 數據庫原理
- mysql數據庫原理
- mysql源碼編譯安裝
- mysql二進制包安裝
- mysql命令行工具
- 更改密碼
- 數據庫授權grant
- mysql日志
- 命令
- 常用
- 小命令大作為
- awk 報告生成器
- 網絡命令
- 命令查找
- 壓縮歸檔命令
- 文件管理
- 文件管理命令
- 文件查看命令
- 目錄管理命令
- 用戶管理命令
- 用戶權限管理
- curl
- cheat
- chrony
- command
- crontab任務計劃
- cut
- date
- dd
- df
- echo
- find
- grep
- hash
- iftop
- kill pkill killall
- ls
- lsmod和modprobe
- lsof
- man
- mkpasswd
- mount
- mtr
- netstat
- nmap
- nc
- NTP
- passwd
- rm
- rdate
- pv
- sar系統活動情況報告
- sed文本處理命令
- setup
- screen
- shutdown
- sort 命令
- sudo
- tcpdump
- top
- uniq
- wget
- who
- xargs
- 監控
- zabbix郵件報警
- Redis
- redis安裝
- redis數據類型和操作方法
- redis持久化和配置
- redis主從配置
- php連接redis
- redis實現session共享
- 安裝測試
- redis設置密碼
- ELK日志分析系統
- elasticsearch
- logstash
- logstash插件
- filebeat日志收集
- kibana
- jenkins
- jenkins安裝與配置
- 案例1
- 案例2
- 案例3
- 代碼倉庫之svn
- svn服務端配置
- 常用操作
- svn備份
- LB集群
- LVS負載均衡集群
- ipvsadm使用方法
- LVS調度方法
- NAT原理
- NAT實踐
- DR原理
- DR實踐
- TUN原理
- LVS持久連接
- HA集群
- HPC集群
- 共享存儲
- ftp協議
- vsftpd
- NFS
- 網站架構發展
- 文件同步
- rsync基本用法
- rsync安裝和使用_拉取模式
- lsyncd安裝和用法
- zabbix
- zabbix服務端安裝
- zabbix客戶端安裝
- zabbix編譯安裝
- zabbix監控tomcat
- zabbix監控mysql
- gitlab
- supervisor
- nsq
- ruby
- nodejs
- consul
- mesos
- zookeeper
- rwho
- 對象存儲
- 工具
- rclone
- minio
- linux 性能調優
- CPU
- 第一部分 CPU
- 安全