原文:https://www.s4lm0x.com/archives/40.html
https://www.cnblogs.com/sunshine-H/p/8110608.html----超詳細 值得收藏 linux CentOS 7 配置Apache服務【轉發+新增】
https://blog.51cto.com/13525470/2070375----CentOS 7 Apache服務的安裝與配置
httpd
是使用排名第一的Web服務器軟件. 它可以運行在幾乎所有廣泛使用的計算機平台上, 由於其跨平台和安全性被廣泛使用, 是最流行的Web服務器端軟件之一, 當前httpd版本為2.4.38
. 在CentOS 7
上使用yum
方式安裝httpd是最簡便的方式. 但是由於CentOS 7
自帶的htpd版本固定, 有時我們可能需要安裝更新版本的httpd, 或者需要開啟httpd默認未開啟的功能模塊, 此時編譯httpd源碼的安裝方式將是我們必須掌握的技能. 本文主要描述基於CentOS7. 6
以源碼方式安裝httpd-2.4.38
編譯安裝的步驟與優點
-
源碼的編譯安裝一般由3個步驟組成
- 配置: configure, 通常依賴gcc編譯器,
binutils
,glibc
, 配置軟件特性, 檢查編譯環境, 生成 Makefile文件- configure是一個可執行腳本, 它有很多選項, 在待安裝的源碼路徑下使用命令
./configure –-help
輸出詳細的選項列表
- configure是一個可執行腳本, 它有很多選項, 在待安裝的源碼路徑下使用命令
- 編譯: make
- 安裝: make install
- 配置: configure, 通常依賴gcc編譯器,
-
編譯安裝的優點
- 自定義軟件功能
- 優化編譯參數,提高性能
- 解決不必要的軟件間依賴
- 方便清理與卸載
准備編譯環境
操作系統安裝時為
Minimal install
方式, 此時需要安裝編譯器以及編譯器所依賴的軟件包. 最直接的方式是將Development Tools
整個卡發包組安裝, 但開發包組中很多的包是不必要的, 故此只安裝必要的軟件包
-
使用阿里雲的源安裝相關編譯環境
cd /etc/yum.repos.d curl -sO https://mirrors.aliyun.com/repo/epel-7.repo https://mirrors.aliyun.com/repo/Centos-7.repo yum clean all yum makecache fast
-
安裝gcc以及相關依賴
yum install -y gcc glibc-devel zlib zlib-devel openssl-devel bzip2 bzip2-devel gcc-c++ expat-devel
安裝依賴包
編譯安裝pcre
PCRE
是Perl Compatible Regular Expression的縮寫, 是一個Perl的正則表達式模塊. HTTP核心模塊和rewrite模塊都會用到PCRE的正則表達式語法, 所以這個必須安裝
cd /usr/local/src
curl -sO https://ftp.pcre.org/pub/pcre/pcre-8.43.tar.bz2
tar xf pcre-8.43.tar.bz2
pcre-8.43
./configure --prefix=/usr/local/pcre
make -j 4
make install
編譯安裝apr, apr-util
httpd可在windows, linux, unix等多種平台部署, 而並不需要為每種平台都編寫不同的代碼實現, 因為有apr、apr-util
apr
: apache portable runtime, 類似於JVM, PVM等虛擬機, 為apache提供運行環境. 針對不同平台有不同的apr, httpd通過不同的apr,可運行於不同的平台之上
apr-util
依賴於apr, 需先編譯安裝apr, 再編譯安裝apr-util
- 獲取源碼包並解壓編譯
cd ..
curl -sO http://mirrors.tuna.tsinghua.edu.cn/apache/apr/apr-1.6.5.tar.bz2
tar xf apr-1.6.5.tar.bz2
cd apr-1.6.5
./configure --prefix=/usr/local/apr
make -j 4 && make install
cd ..
curl -sO http://mirrors.tuna.tsinghua.edu.cn/apache/apr/apr-util-1.6.1.tar.bz2
tar xf apr-util-1.6.1.tar.bz2
cd apr-util-1.6.1
./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
make && make install
編譯安裝httpd
在httpd 2.4 中,
prefork
,worker
,event
作為模塊, 可使用配置文件切換在執行配置過程時可使用disable, without, 顯式地指定禁用哪些功能, 不依賴哪些程序包等
httpd 2.4中運行httpd的user, group也變成了daemon而不是apache, 所以在編譯之前無需創建apache用戶與組
- 獲取源碼包並解壓
cd ..
curl -sO http://mirrors.tuna.tsinghua.edu.cn/apache//httpd/httpd-2.4.38.tar.bz2
tar xf httpd-2.4.38.tar.bz2
cd httpd-2.4.38
- 編譯前, 隱藏版本信息
- 大概是在
include/ap_release.h
文件中的第40-46行
- 大概是在
vim include/ap_release.h
#define AP_SERVER_BASEVENDOR "Apache Software Foundation" #服務的供應商名稱
#define AP_SERVER_BASEPROJECT "Apache HTTP Server" #服務的項目名稱
#define AP_SERVER_BASEPRODUCT "Apache" #服務的產品名
#define AP_SERVER_MAJORVERSION_NUMBER 2 #主要版本號
#define AP_SERVER_MINORVERSION_NUMBER 4 #小版本號
#define AP_SERVER_PATCHLEVEL_NUMBER 6 #補丁級別
- 編譯安裝
./configure --prefix=/usr/local/httpd24 --with-pcre=/usr/local/pcre --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --with-layout=Apache --enable-load-all-modules --enable-so --enable-rewrite --enable-ssl --enable-cgi --with-zlib --enable-proxy --enable-proxy-http --disable-version
make -j 4
make install
如果編譯安裝報錯:
make[2]: *** [ab] 錯誤 1
make[2]: Leaving directory `/software/httpd-2.4.9/support'
make[1]: *** [all-recursive] 錯誤 1
make[1]: Leaving directory `/software/httpd-2.4.9/support'
make: *** [all-recursive] 錯誤 1
1.檢查configure有沒有添加--with-ssl=/usr/local/openssl-1.0.1g(重新編譯安裝后openssl的路徑)的路徑,添加后可解決以上報錯的問題。
./configure --prefix=/home/apache-249 --enable-ssl --with-ssl=/usr/local/openssl-1.0.1g --with-pcre=/usr/local/pcre --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --enable-so --enable-rewrite --enable-modules=most --enable-mods-shared=most --enable-mpms-shared=all --with-mpm=event
如果不使用ssl,也可以在編譯時候去掉--enable-ssl --with-ssl=/usr/local/openssl-1.0.1g,加上--disable-ssl 。
- 編譯時的選項
- —enable-so: 支持動態加載模塊
- —enable-rewrite: 啟用URL重寫
- —enable-ssl: 支持ssl加密
- -–enable-mpms-shared=[prefork | worker | event | all]: 指定編譯哪些MPM模塊, 可使用all表示全編譯
- –with-mpm=[prefork | worker | event]: 如3種MPM模塊都編譯了,則通過此項指定默認使用哪種
- –enable-cgi: 啟用cgi
- –enable-modules=[all | most | ……]: 指定啟用哪些模塊。可指定具體的模塊名,也可使用all表示啟用所有模塊,most表示啟用大多數常用模塊。一般使用most即可
- –with-zlib: 依賴zlib庫用於頁面壓縮
- –with-pcre: 指定pcre的路徑,依賴pcre庫用於解決正則表達式問題
- -–with-apr: 指定依賴的apr的路徑
- –with-apr-util: 指定依賴的apr-util的路徑
- —enable-proxy: 啟用代理模塊
- —disable-version:
配置httpd
配置環境變量
- 將
/usr/local/httpd24/bin
加入到系統PATH搜索路徑中
cd /usr/local/httpd24/bin
echo 'PATH=$PATH:/usr/local/httpd24/bin' > /etc/profile.d/httpd.sh
. /etc/profile.d/httpd.sh
- 配置firewalld, 允許
http
服務被訪問
firewall-cmd --permanent --add-service=http
firewall-cmd --reload
- 啟動httpd服務
apachectl start
curl 127.0.0.1
為httpd添加Unit file
- 創建httpd的Unit file, 使用systemd管理http服務
vim /usr/lib/systemd/system/httpd.service
[Unit]
Description=The Apache HTTP Server
After=network.target remote-fs.target nss-lookup.target
Documentation=man:httpd(8)
Documentation=man:apachectl(8)
[Service]
Type=notify
EnvironmentFile=/usr/local/httpd24/conf/httpd.conf
ExecStart=/usr/local/httpd24/bin/apachectl $OPTIONS -DFOREGROUND
ExecReload=/usr/local/httpd24/bin/apachectl $OPTIONS -k graceful
ExecStop=/bin/kill -WINCH ${MAINPID}
KillSignal=SIGCONT
PrivateTmp=true
[Install]
WantedBy=multi-user.target
- 重新生成Unit之間的依賴關系
systemctl daemon-reload
apachectl stop
systemctl start httpd
curl 127.0.0.1