Apache HTTP Server部署全攻略(最新整理)
httpd 簡介
httpd(Apache HTTP Server)是一款歷史悠久的開源 Web 服務(wù)器軟件,由 Apache 軟件基金會(huì)開發(fā)和維護(hù)。自 1995 年首次發(fā)布以來,Apache 一直是 Web 服務(wù)器領(lǐng)域的領(lǐng)導(dǎo)者,以其穩(wěn)定性、安全性和靈活性著稱。根據(jù) W3Techs 的最新統(tǒng)計(jì),httpd 支持著全球超過 40%的網(wǎng)站運(yùn)行,特別是在企業(yè)級(jí)應(yīng)用中占據(jù)重要地位。
httpd 的主要特點(diǎn)包括:
- 模塊化架構(gòu):通過動(dòng)態(tài)加載模塊擴(kuò)展功能
- 支持多種編程語言:如 PHP、Python、Perl 等
- 豐富的認(rèn)證機(jī)制:包括基本認(rèn)證、摘要認(rèn)證等
- 強(qiáng)大的 URL 重寫功能:通過 mod_rewrite 模塊實(shí)現(xiàn)
- 虛擬主機(jī)支持:可在一臺(tái)服務(wù)器上托管多個(gè)網(wǎng)站
一、環(huán)境準(zhǔn)備
1. 系統(tǒng)要求
以 CentOS 7/RHEL 7 為例進(jìn)行說明,建議系統(tǒng)滿足以下最低配置:
- CPU:1 核以上
- 內(nèi)存:1GB 以上
- 磁盤空間:10GB 以上
- 網(wǎng)絡(luò):穩(wěn)定的互聯(lián)網(wǎng)連接
2. 系統(tǒng)檢查
在開始安裝前,建議先檢查系統(tǒng)狀態(tài):
# 檢查系統(tǒng)版本 cat /etc/redhat-release # 檢查內(nèi)核版本 uname -r # 檢查磁盤空間 df -h # 檢查內(nèi)存 free -m
3. 更新系統(tǒng)
建議使用新安裝的系統(tǒng)環(huán)境,確保干凈無沖突。在安裝前先更新系統(tǒng):
# 更新系統(tǒng)軟件包 sudo yum update -y # 安裝常用工具 sudo yum install -y wget vim net-tools
4. 防火墻配置
確保防火墻允許 HTTP(80) 和 HTTPS(443) 端口:
# 檢查防火墻狀態(tài) sudo systemctl status firewalld # 開放端口 sudo firewall-cmd --permanent --add-service=http sudo firewall-cmd --permanent --add-service=https sudo firewall-cmd --reload
5. SELinux 配置
如果系統(tǒng)啟用了 SELinux,需要進(jìn)行適當(dāng)配置:
# 檢查 SELinux 狀態(tài) getenforce # 臨時(shí)關(guān)閉(如需) sudo setenforce 0 # 永久關(guān)閉(如需) sudo sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
二、安裝 httpd
# 安裝httpd主程序 sudo yum install -y httpd # 驗(yàn)證安裝版本 httpd -v # 啟動(dòng)服務(wù)并設(shè)置開機(jī)自啟 sudo systemctl start httpd sudo systemctl enable httpd # 檢查服務(wù)狀態(tài)(應(yīng)顯示active/running) sudo systemctl status httpd # 查看監(jiān)聽端口(默認(rèn)80) sudo netstat -tulnp | grep httpd
三、配置防火墻
現(xiàn)代 Linux 系統(tǒng)通常使用 firewalld 作為防火墻管理工具。
# 查看防火墻狀態(tài) sudo firewall-cmd --state # 永久開放HTTP(80)和HTTPS(443)服務(wù) sudo firewall-cmd --permanent --add-service=http sudo firewall-cmd --permanent --add-service=https # 如果需要開放自定義端口(如8080) sudo firewall-cmd --permanent --add-port=8080/tcp # 重新加載防火墻配置 sudo firewall-cmd --reload # 查看當(dāng)前開放的端口和服務(wù) sudo firewall-cmd --list-all
四、配置文件結(jié)構(gòu)
httpd 采用模塊化設(shè)計(jì),主要文件和目錄結(jié)構(gòu)如下:
/etc/httpd/ ├── conf/ # 主配置目錄 │ ├── httpd.conf # 主配置文件 │ └── magic # 文件類型識(shí)別 ├── conf.d/ # 附加配置文件目錄 │ ├── autoindex.conf # 目錄列表配置 │ ├── userdir.conf # 用戶目錄配置 │ └── welcome.conf # 默認(rèn)歡迎頁 ├── conf.modules.d/ # 模塊配置文件 ├── logs -> ../../var/log/httpd # 日志目錄 ├── modules/ # 模塊文件 ├── run/ # PID文件 └── state/ # 狀態(tài)文件 /var/www/html/ # 默認(rèn)網(wǎng)站根目錄 /var/log/httpd/ # 日志目錄(access_log, error_log)
五、基礎(chǔ)配置詳解
通過編輯主配置文件進(jìn)行基本設(shè)置:
sudo vim /etc/httpd/conf/httpd.conf
常見配置項(xiàng)說明:
# 全局配置
ServerRoot "/etc/httpd" # 服務(wù)器根目錄
Listen 80 # 監(jiān)聽端口
User apache # 運(yùn)行用戶
Group apache # 運(yùn)行組
ServerAdmin webmaster@example.com # 管理員郵箱
# 主服務(wù)器配置
ServerName www.example.com:80 # 服務(wù)器域名
DocumentRoot "/var/www/html" # 網(wǎng)站根目錄
ErrorLog "logs/error_log" # 錯(cuò)誤日志路徑
# 目錄權(quán)限設(shè)置
<Directory "/var/www/html">
Options Indexes FollowSymLinks # 允許目錄列表和符號(hào)鏈接
AllowOverride None # 是否允許.htaccess覆蓋
Require all granted # 訪問控制
</Directory>
# 日志格式定義
LogFormat "%h %l %u %t \"%r\" %>s %b" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent六、虛擬主機(jī)配置
虛擬主機(jī)允許在單臺(tái)服務(wù)器上運(yùn)行多個(gè)網(wǎng)站。
1.創(chuàng)建網(wǎng)站目錄結(jié)構(gòu):
sudo mkdir -p /var/www/example.com/public_html sudo mkdir -p /var/www/test.com/public_html sudo chown -R apache:apache /var/www/example.com sudo chown -R apache:apache /var/www/test.com
2.創(chuàng)建虛擬主機(jī)配置文件:
sudo vim /etc/httpd/conf.d/vhosts.conf
示例配置:
# 第一個(gè)虛擬主機(jī)
<VirtualHost *:80>
ServerAdmin admin@example.com
ServerName example.com
ServerAlias www.example.com
DocumentRoot /var/www/example.com/public_html
ErrorLog /var/log/httpd/example.com-error.log
CustomLog /var/log/httpd/example.com-access.log combined
<Directory "/var/www/example.com/public_html">
Options -Indexes +FollowSymLinks
AllowOverride All
Require all granted
</Directory>
# 重定向非www到www
RewriteEngine On
RewriteCond %{HTTP_HOST} ^example\.com [NC]
RewriteRule ^(.*)$ http://www.example.com$1 [L,R=301]
</VirtualHost>
# 第二個(gè)虛擬主機(jī)
<VirtualHost *:80>
ServerName test.com
DocumentRoot /var/www/test.com/public_html
...
</VirtualHost>七、安全加固配置
1.隱藏服務(wù)器信息:
# 在httpd.conf中添加 ServerTokens Prod # 僅顯示Apache ServerSignature Off # 關(guān)閉頁腳簽名 TraceEnable Off # 禁用TRACE方法
2.限制敏感目錄訪問:
<DirectoryMatch "^/.*/\.(svn|git|ht)/">
Require all denied
</DirectoryMatch>
<Files ".ht*">
Require all denied
</Files>3.禁用不必要的HTTP方法:
<Location "/">
<LimitExcept GET POST HEAD>
Deny from all
</LimitExcept>
</Location>
八、SSL/TLS 配置(啟用 HTTPS)
1.安裝 SSL 模塊:
sudo yum install -y mod_ssl openssl
2.生成證書(生產(chǎn)環(huán)境建議使用 Let's Encrypt):
# 創(chuàng)建證書目錄
sudo mkdir /etc/httpd/ssl
sudo chmod 700 /etc/httpd/ssl
# 生成自簽名證書(測(cè)試用)
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-keyout /etc/httpd/ssl/server.key \
-out /etc/httpd/ssl/server.crt \
-subj "/C=CN/ST=Beijing/L=Beijing/O=Example Inc/CN=example.com"3.配置 HTTPS 虛擬主機(jī):
<VirtualHost *:443>
ServerName example.com
DocumentRoot "/var/www/example.com/public_html"
SSLEngine on
SSLCertificateFile /etc/httpd/ssl/server.crt
SSLCertificateKeyFile /etc/httpd/ssl/server.key
# 強(qiáng)制HTTP跳轉(zhuǎn)到HTTPS
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
# 啟用HSTS
Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"
</VirtualHost>九、性能優(yōu)化配置
1.調(diào)整 MPM 模塊(多處理模塊):
sudo vim /etc/httpd/conf.modules.d/00-mpm.conf
選擇事件驅(qū)動(dòng)模式(適合高并發(fā)):
LoadModule mpm_event_module modules/mod_mpm_event.so
相關(guān)參數(shù)調(diào)整:
<IfModule mpm_event_module>
StartServers 3
MinSpareThreads 75
MaxSpareThreads 250
ThreadsPerChild 25
MaxRequestWorkers 400
MaxConnectionsPerChild 0
</IfModule>2.啟用內(nèi)容壓縮:
LoadModule deflate_module modules/mod_deflate.so
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/plain text/css text/javascript application/javascript
DeflateCompressionLevel 6
SetOutputFilter DEFLATE
</IfModule>3.啟用緩存控制:
LoadModule expires_module modules/mod_expires.so
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/jpg "access plus 1 month"
ExpiresByType text/css "access plus 1 week"
ExpiresDefault "access plus 2 days"
</IfModule>十、測(cè)試與驗(yàn)證
1.創(chuàng)建測(cè)試頁面:
sudo bash -c 'cat > /var/www/html/index.html <<EOF
<!DOCTYPE html>
<html>
<head>
<title>Apache Test Page</title>
<meta charset="UTF-8">
</head>
<body>
<h1>Apache HTTP Server Works!</h1>
<p>Server time: <?php echo date("Y-m-d H:i:s"); ?></p>
</body>
</html>
EOF'2.檢查配置文件語法:
sudo httpd -t
3.重新加載配置:
sudo systemctl reload httpd # 或完全重啟 sudo systemctl restart httpd
4.訪問測(cè)試:
- 本地測(cè)試:
curl http://localhost - 遠(yuǎn)程訪問:瀏覽器輸入服務(wù)器IP或域名
十一、故障排除指南
1.常見問題排查命令:
# 查看錯(cuò)誤日志 sudo tail -50 /var/log/httpd/error_log # 查看訪問日志 sudo tail -f /var/log/httpd/access_log # 測(cè)試端口連通性 telnet your-server-ip 80 nc -zv your-server-ip 80 # SELinux相關(guān)檢查 sudo ausearch -m avc -ts recent # 查看安全事件 sudo sealert -a /var/log/audit/audit.log # 分析SELinux問題
2.SELinux 配置(生產(chǎn)環(huán)境建議保持開啟):
# 臨時(shí)設(shè)置 sudo setenforce 0 # 寬松模式 sudo setenforce 1 # 強(qiáng)制模式 # 永久設(shè)置(編輯/etc/selinux/config) SELINUX=enforcing # 強(qiáng)制模式 SELINUX=permissive # 僅記錄不阻止 SELINUX=disabled # 完全禁用 # 調(diào)整文件上下文標(biāo)簽 sudo semanage fcontext -a -t httpd_sys_content_t "/var/www/html(/.*)?" sudo restorecon -Rv /var/www/html
十二、進(jìn)階配置選項(xiàng)
1.URL 重寫(mod_rewrite):
LoadModule rewrite_module modules/mod_rewrite.so
<Directory "/var/www/html">
RewriteEngine On
# 示例1:重定向舊URL
RewriteRule ^oldpage\.html$ newpage.html [R=301,L]
# 示例2:隱藏.php擴(kuò)展名
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php [L]
</Directory>2.反向代理配置:
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
<Location "/app/">
ProxyPass http://localhost:8080/
ProxyPassReverse http://localhost:8080/
</Location>3.HTTP/2 支持(需要 httpd 2.4.17+):
sudo yum install -y mod_http2
配置示例:
LoadModule http2_module modules/mod_http2.so
Protocols h2 http/1.1
<VirtualHost *:443>
...
Protocols h2 http/1.1
H2Direct on
</VirtualHost>4.日志分析工具集成:
# 安裝GoAccess日志分析工具 sudo yum install -y goaccess # 生成HTML報(bào)告 goaccess /var/log/httpd/access_log -a -o /var/www/html/report.html
十三、維護(hù)與管理
1.日常維護(hù)命令:
# 檢查配置更改 sudo apachectl configtest # 優(yōu)雅重啟(不中斷連接) sudo apachectl graceful # 查看已加載模塊 sudo apachectl -M # 查看完整配置 sudo apachectl -S
2.日志輪轉(zhuǎn)配置:
sudo vim /etc/logrotate.d/httpd
示例配置:
/var/log/httpd/*log {
daily
missingok
rotate 30
compress
delaycompress
notifempty
sharedscripts
postrotate
/bin/systemctl reload httpd > /dev/null 2>/dev/null || true
endscript
}3.監(jiān)控設(shè)置:
# 安裝mod_status用于服務(wù)器狀態(tài)監(jiān)控 sudo yum install -y mod_status
配置示例:
<Location "/server-status">
SetHandler server-status
Require ip 192.168.1.0/24 # 限制訪問IP
</Location>十四、備份與恢復(fù)
1.重要文件備份:
# 備份配置文件 sudo tar czvf httpd_conf_backup.tar.gz /etc/httpd/ # 備份網(wǎng)站數(shù)據(jù) sudo tar czvf web_content_backup.tar.gz /var/www/ # 備份SSL證書 sudo tar czvf ssl_certs_backup.tar.gz /etc/httpd/ssl/
2.恢復(fù)步驟:
# 停止服務(wù) sudo systemctl stop httpd # 恢復(fù)配置 sudo tar xzvf httpd_conf_backup.tar.gz -C / # 恢復(fù)網(wǎng)站內(nèi)容 sudo tar xzvf web_content_backup.tar.gz -C / # 恢復(fù)證書 sudo tar xzvf ssl_certs_backup.tar.gz -C / # 重啟服務(wù) sudo systemctl start httpd
通過以上完整配置,您已經(jīng)成功部署了一個(gè)功能全面、安全可靠的 Apache HTTP Server。根據(jù)實(shí)際業(yè)務(wù)需求,可以進(jìn)一步調(diào)整和優(yōu)化各項(xiàng)參數(shù)。
到此這篇關(guān)于Apache HTTP Server部署全攻略的文章就介紹到這了,更多相關(guān)Apache HTTP Server部署內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 一文探索Apache HttpClient如何設(shè)定超時(shí)時(shí)間
- org.apache.tomcat.util.http.fileupload.IOUtils報(bào)錯(cuò)對(duì)應(yīng)jar問題
- 教你使用Apache搭建Http下載服務(wù)器
- 詳解apache編譯安裝httpd-2.4.54及三種風(fēng)格的init程序特點(diǎn)和區(qū)別
- SpringCloud?Feign使用ApacheHttpClient代替默認(rèn)client方式
- windows apache環(huán)境下部署SSL證書讓網(wǎng)站支持https的配置方法
- 使用Apache打造完美限制的HTTP下載服務(wù)器
- 詳解為新版Apache服務(wù)器開啟HTTP/2支持的方法
相關(guān)文章
linux下make命令實(shí)現(xiàn)輸出高亮的方法
Linux 下 make 命令是系統(tǒng)管理員和程序員用的最頻繁的命令之一。管理員用它通過命令行來編譯和安裝很多開源的工具,程序員用它來管理他們大型復(fù)雜的項(xiàng)目編譯問題。這篇文章主要給大家介紹了關(guān)于linux下make命令實(shí)現(xiàn)輸出高亮的方法,需要的朋友可以參考下。2017-07-07
阿里云linux服務(wù)器安全設(shè)置(防火墻策略等)
這篇文章主要介紹了阿里云linux服務(wù)器安全設(shè)置,主要是針對(duì)防火墻策略等一些補(bǔ)充2016-10-10
Linux多臺(tái)服務(wù)器之間免密登錄的實(shí)現(xiàn)步驟
在日常的后端開發(fā)和運(yùn)維工作中,我們經(jīng)常需要頻繁登錄不同的服務(wù)器進(jìn)行部署、排查問題或上傳文件,傳統(tǒng)的基于用戶名和密碼的登錄方式既不安全又不高效,為此,我們可以利用 SSH 公鑰認(rèn)證的方式,實(shí)現(xiàn)無密碼(免密)登錄遠(yuǎn)程服務(wù)器,下面小編給大家詳細(xì)說說2025-04-04
在Linux系統(tǒng)下上傳項(xiàng)目到碼云的方法
今天小編就為大家分享一篇關(guān)于在Linux系統(tǒng)下上傳項(xiàng)目到碼云的方法,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2018-10-10
Apache實(shí)現(xiàn)禁止中文瀏覽器訪問與301重定向的方法
這篇文章主要介紹了Apache實(shí)現(xiàn)禁止中文瀏覽器訪問與301重定向的方法,通過修改.htaccess的配置來實(shí)現(xiàn)非常簡便,需要的朋友可以參考下2016-01-01
apache使用日志分割模塊rotatelogs分割日志詳解
本文介紹了apache使用自帶的日志分割模塊rotatelogs分割日志,rotatelogs 是 Apache 2.2 中自帶的管道日志程序,具體使用方法請(qǐng)參考下文2014-01-01
tomcat服務(wù)器如何配置字符集為utf-8徹底解決中文亂碼的問題詳解
這篇文章主要給大家介紹了關(guān)于tomcat服務(wù)器如何配置字符集為utf-8徹底解決中文亂碼問題的相關(guān)資料,文中先對(duì)字符集進(jìn)行了簡單的介紹,然后給大家詳細(xì)介紹了解決的方法,需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2018-01-01

