httpd 簡介
httpd(Apache HTTP Server)是一款歷史悠久的開源 Web 服務器軟件,由 Apache 軟件基金會開發和維護。自 1995 年首次發布以來,Apache 一直是 Web 服務器領域的領導者,以其穩定性、安全性和靈活性著稱。根據 W3Techs 的最新統計,httpd 支持著全球超過 40%的網站運行,特別是在企業級應用中占據重要地位。
httpd 的主要特點包括:
- 模塊化架構:通過動態加載模塊擴展功能
- 支持多種編程語言:如 PHP、Python、Perl 等
- 豐富的認證機制:包括基本認證、摘要認證等
- 強大的 URL 重寫功能:通過 mod_rewrite 模塊實現
- 虛擬主機支持:可在一臺服務器上托管多個網站
一、環境準備
1. 系統要求
以 CentOS 7/RHEL 7 為例進行說明,建議系統滿足以下最低配置:
- CPU:1 核以上
- 內存:1GB 以上
- 磁盤空間:10GB 以上
- 網絡:穩定的互聯網連接
2. 系統檢查
在開始安裝前,建議先檢查系統狀態:
# 檢查系統版本
cat /etc/redhat-release# 檢查內核版本
uname -r# 檢查磁盤空間
df -h# 檢查內存
free -m
3. 更新系統
建議使用新安裝的系統環境,確保干凈無沖突。在安裝前先更新系統:
# 更新系統軟件包
sudo yum update -y# 安裝常用工具
sudo yum install -y wget vim net-tools
4. 防火墻配置
確保防火墻允許 HTTP(80) 和 HTTPS(443) 端口:
# 檢查防火墻狀態
sudo systemctl status firewalld# 開放端口
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload
5. SELinux 配置
如果系統啟用了 SELinux,需要進行適當配置:
# 檢查 SELinux 狀態
getenforce# 臨時關閉(如需)
sudo setenforce 0# 永久關閉(如需)
sudo sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
二、安裝 httpd
# 安裝httpd主程序
sudo yum install -y httpd# 驗證安裝版本
httpd -v# 啟動服務并設置開機自啟
sudo systemctl start httpd
sudo systemctl enable httpd# 檢查服務狀態(應顯示active/running)
sudo systemctl status httpd# 查看監聽端口(默認80)
sudo netstat -tulnp | grep httpd
三、配置防火墻
現代 Linux 系統通常使用 firewalld 作為防火墻管理工具。
# 查看防火墻狀態
sudo firewall-cmd --state# 永久開放HTTP(80)和HTTPS(443)服務
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# 查看當前開放的端口和服務
sudo firewall-cmd --list-all
四、配置文件結構
httpd 采用模塊化設計,主要文件和目錄結構如下:
/etc/httpd/
├── conf/ # 主配置目錄
│ ├── httpd.conf # 主配置文件
│ └── magic # 文件類型識別
├── conf.d/ # 附加配置文件目錄
│ ├── autoindex.conf # 目錄列表配置
│ ├── userdir.conf # 用戶目錄配置
│ └── welcome.conf # 默認歡迎頁
├── conf.modules.d/ # 模塊配置文件
├── logs -> ../../var/log/httpd # 日志目錄
├── modules/ # 模塊文件
├── run/ # PID文件
└── state/ # 狀態文件/var/www/html/ # 默認網站根目錄
/var/log/httpd/ # 日志目錄(access_log, error_log)
五、基礎配置詳解
通過編輯主配置文件進行基本設置:
sudo vim /etc/httpd/conf/httpd.conf
常見配置項說明:
# 全局配置
ServerRoot "/etc/httpd" # 服務器根目錄
Listen 80 # 監聽端口
User apache # 運行用戶
Group apache # 運行組
ServerAdmin webmaster@example.com # 管理員郵箱# 主服務器配置
ServerName www.example.com:80 # 服務器域名
DocumentRoot "/var/www/html" # 網站根目錄
ErrorLog "logs/error_log" # 錯誤日志路徑# 目錄權限設置
<Directory "/var/www/html">Options Indexes FollowSymLinks # 允許目錄列表和符號鏈接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
六、虛擬主機配置
虛擬主機允許在單臺服務器上運行多個網站。
1.創建網站目錄結構:
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.創建虛擬主機配置文件:
sudo vim /etc/httpd/conf.d/vhosts.conf
示例配置:
# 第一個虛擬主機
<VirtualHost *:80>ServerAdmin admin@example.comServerName example.comServerAlias www.example.comDocumentRoot /var/www/example.com/public_htmlErrorLog /var/log/httpd/example.com-error.logCustomLog /var/log/httpd/example.com-access.log combined<Directory "/var/www/example.com/public_html">Options -Indexes +FollowSymLinksAllowOverride AllRequire all granted</Directory># 重定向非www到wwwRewriteEngine OnRewriteCond %{HTTP_HOST} ^example\.com [NC]RewriteRule ^(.*)$ http://www.example.com$1 [L,R=301]
</VirtualHost># 第二個虛擬主機
<VirtualHost *:80>ServerName test.comDocumentRoot /var/www/test.com/public_html...
</VirtualHost>
七、安全加固配置
1.隱藏服務器信息:
# 在httpd.conf中添加
ServerTokens Prod # 僅顯示Apache
ServerSignature Off # 關閉頁腳簽名
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.生成證書(生產環境建議使用 Let's Encrypt):
# 創建證書目錄
sudo mkdir /etc/httpd/ssl
sudo chmod 700 /etc/httpd/ssl# 生成自簽名證書(測試用)
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 虛擬主機:
<VirtualHost *:443>ServerName example.comDocumentRoot "/var/www/example.com/public_html"SSLEngine onSSLCertificateFile /etc/httpd/ssl/server.crtSSLCertificateKeyFile /etc/httpd/ssl/server.key# 強制HTTP跳轉到HTTPSRewriteEngine OnRewriteCond %{HTTPS} offRewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]# 啟用HSTSHeader always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"
</VirtualHost>
九、性能優化配置
1.調整 MPM 模塊(多處理模塊):
sudo vim /etc/httpd/conf.modules.d/00-mpm.conf
選擇事件驅動模式(適合高并發):
LoadModule mpm_event_module modules/mod_mpm_event.so
相關參數調整:
<IfModule mpm_event_module>StartServers 3MinSpareThreads 75MaxSpareThreads 250ThreadsPerChild 25MaxRequestWorkers 400MaxConnectionsPerChild 0
</IfModule>
2.啟用內容壓縮:
LoadModule deflate_module modules/mod_deflate.so<IfModule mod_deflate.c>AddOutputFilterByType DEFLATE text/html text/plain text/css text/javascript application/javascriptDeflateCompressionLevel 6SetOutputFilter DEFLATE
</IfModule>
3.啟用緩存控制:
LoadModule expires_module modules/mod_expires.so<IfModule mod_expires.c>ExpiresActive OnExpiresByType image/jpg "access plus 1 month"ExpiresByType text/css "access plus 1 week"ExpiresDefault "access plus 2 days"
</IfModule>
十、測試與驗證
1.創建測試頁面:
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.訪問測試:
- 本地測試:
curl http://localhost
- 遠程訪問:瀏覽器輸入服務器IP或域名
十一、故障排除指南
1.常見問題排查命令:
# 查看錯誤日志
sudo tail -50 /var/log/httpd/error_log# 查看訪問日志
sudo tail -f /var/log/httpd/access_log# 測試端口連通性
telnet your-server-ip 80
nc -zv your-server-ip 80# SELinux相關檢查
sudo ausearch -m avc -ts recent # 查看安全事件
sudo sealert -a /var/log/audit/audit.log # 分析SELinux問題
2.SELinux 配置(生產環境建議保持開啟):
# 臨時設置
sudo setenforce 0 # 寬松模式
sudo setenforce 1 # 強制模式# 永久設置(編輯/etc/selinux/config)
SELINUX=enforcing # 強制模式
SELINUX=permissive # 僅記錄不阻止
SELINUX=disabled # 完全禁用# 調整文件上下文標簽
sudo semanage fcontext -a -t httpd_sys_content_t "/var/www/html(/.*)?"
sudo restorecon -Rv /var/www/html
十二、進階配置選項
1.URL 重寫(mod_rewrite):
LoadModule rewrite_module modules/mod_rewrite.so<Directory "/var/www/html">RewriteEngine On# 示例1:重定向舊URLRewriteRule ^oldpage\.html$ newpage.html [R=301,L]# 示例2:隱藏.php擴展名RewriteCond %{REQUEST_FILENAME} !-dRewriteCond %{REQUEST_FILENAME}\.php -fRewriteRule ^(.*)$ $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.soProtocols h2 http/1.1<VirtualHost *:443>...Protocols h2 http/1.1H2Direct on
</VirtualHost>
4.日志分析工具集成:
# 安裝GoAccess日志分析工具
sudo yum install -y goaccess# 生成HTML報告
goaccess /var/log/httpd/access_log -a -o /var/www/html/report.html
十三、維護與管理
1.日常維護命令:
# 檢查配置更改
sudo apachectl configtest# 優雅重啟(不中斷連接)
sudo apachectl graceful# 查看已加載模塊
sudo apachectl -M# 查看完整配置
sudo apachectl -S
2.日志輪轉配置:
sudo vim /etc/logrotate.d/httpd
示例配置:
/var/log/httpd/*log {dailymissingokrotate 30compressdelaycompressnotifemptysharedscriptspostrotate/bin/systemctl reload httpd > /dev/null 2>/dev/null || trueendscript
}
3.監控設置:
# 安裝mod_status用于服務器狀態監控
sudo yum install -y mod_status
配置示例:
<Location "/server-status">SetHandler server-statusRequire ip 192.168.1.0/24 # 限制訪問IP
</Location>
十四、備份與恢復
1.重要文件備份:
# 備份配置文件
sudo tar czvf httpd_conf_backup.tar.gz /etc/httpd/# 備份網站數據
sudo tar czvf web_content_backup.tar.gz /var/www/# 備份SSL證書
sudo tar czvf ssl_certs_backup.tar.gz /etc/httpd/ssl/
2.恢復步驟:
# 停止服務
sudo systemctl stop httpd# 恢復配置
sudo tar xzvf httpd_conf_backup.tar.gz -C /# 恢復網站內容
sudo tar xzvf web_content_backup.tar.gz -C /# 恢復證書
sudo tar xzvf ssl_certs_backup.tar.gz -C /# 重啟服務
sudo systemctl start httpd
通過以上完整配置,您已經成功部署了一個功能全面、安全可靠的 Apache HTTP Server。根據實際業務需求,可以進一步調整和優化各項參數。