Apache HTTP Server部署全攻略(最新整理)
httpd 簡介
httpd(Apache HTTP Server)是一款歷史悠久的開源 Web 服務器軟件,由 Apache 軟件基金會開發(fā)和維護。自 1995 年首次發(fā)布以來,Apache 一直是 Web 服務器領域的領導者,以其穩(wěn)定性、安全性和靈活性著稱。根據 W3Techs 的最新統(tǒng)計,httpd 支持著全球超過 40%的網站運行,特別是在企業(yè)級應用中占據重要地位。
httpd 的主要特點包括:
- 模塊化架構:通過動態(tài)加載模塊擴展功能
- 支持多種編程語言:如 PHP、Python、Perl 等
- 豐富的認證機制:包括基本認證、摘要認證等
- 強大的 URL 重寫功能:通過 mod_rewrite 模塊實現(xiàn)
- 虛擬主機支持:可在一臺服務器上托管多個網站
一、環(huán)境準備
1. 系統(tǒng)要求
以 CentOS 7/RHEL 7 為例進行說明,建議系統(tǒng)滿足以下最低配置:
- CPU:1 核以上
- 內存:1GB 以上
- 磁盤空間:10GB 以上
- 網絡:穩(wěn)定的互聯(lián)網連接
2. 系統(tǒng)檢查
在開始安裝前,建議先檢查系統(tǒng)狀態(tài):
# 檢查系統(tǒng)版本 cat /etc/redhat-release # 檢查內核版本 uname -r # 檢查磁盤空間 df -h # 檢查內存 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,需要進行適當配置:
# 檢查 SELinux 狀態(tài) 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 # 檢查服務狀態(tài)(應顯示active/running) sudo systemctl status httpd # 查看監(jiān)聽端口(默認80) sudo netstat -tulnp | grep httpd
三、配置防火墻
現(xiàn)代 Linux 系統(tǒng)通常使用 firewalld 作為防火墻管理工具。
# 查看防火墻狀態(tài) 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/ # 狀態(tài)文件 /var/www/html/ # 默認網站根目錄 /var/log/httpd/ # 日志目錄(access_log, error_log)
五、基礎配置詳解
通過編輯主配置文件進行基本設置:
sudo vim /etc/httpd/conf/httpd.conf
常見配置項說明:
# 全局配置
ServerRoot "/etc/httpd" # 服務器根目錄
Listen 80 # 監(jiān)聽端口
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.創(chuàng)建網站目錄結構:
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)建虛擬主機配置文件:
sudo vim /etc/httpd/conf.d/vhosts.conf
示例配置:
# 第一個虛擬主機
<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>
# 第二個虛擬主機
<VirtualHost *:80>
ServerName test.com
DocumentRoot /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.生成證書(生產環(huán)境建議使用 Let's Encrypt):
# 創(chuàng)建證書目錄
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.com
DocumentRoot "/var/www/example.com/public_html"
SSLEngine on
SSLCertificateFile /etc/httpd/ssl/server.crt
SSLCertificateKeyFile /etc/httpd/ssl/server.key
# 強制HTTP跳轉到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.調整 MPM 模塊(多處理模塊):
sudo vim /etc/httpd/conf.modules.d/00-mpm.conf
選擇事件驅動模式(適合高并發(fā)):
LoadModule mpm_event_module modules/mod_mpm_event.so
相關參數(shù)調整:
<IfModule mpm_event_module>
StartServers 3
MinSpareThreads 75
MaxSpareThreads 250
ThreadsPerChild 25
MaxRequestWorkers 400
MaxConnectionsPerChild 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/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>十、測試與驗證
1.創(chuàng)建測試頁面:
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 配置(生產環(huán)境建議保持開啟):
# 臨時設置 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:重定向舊URL
RewriteRule ^oldpage\.html$ newpage.html [R=301,L]
# 示例2:隱藏.php擴展名
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報告 goaccess /var/log/httpd/access_log -a -o /var/www/html/report.html
十三、維護與管理
1.日常維護命令:
# 檢查配置更改 sudo apachectl configtest # 優(yōu)雅重啟(不中斷連接) sudo apachectl graceful # 查看已加載模塊 sudo apachectl -M # 查看完整配置 sudo apachectl -S
2.日志輪轉配置:
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)控設置:
# 安裝mod_status用于服務器狀態(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>十四、備份與恢復
1.重要文件備份:
# 備份配置文件 sudo tar czvf httpd_conf_backup.tar.gz /etc/httpd/ # 備份網站數(shù)據 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。根據實際業(yè)務需求,可以進一步調整和優(yōu)化各項參數(shù)。
到此這篇關于Apache HTTP Server部署全攻略的文章就介紹到這了,更多相關Apache HTTP Server部署內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Apache實現(xiàn)禁止中文瀏覽器訪問與301重定向的方法
這篇文章主要介紹了Apache實現(xiàn)禁止中文瀏覽器訪問與301重定向的方法,通過修改.htaccess的配置來實現(xiàn)非常簡便,需要的朋友可以參考下2016-01-01
apache使用日志分割模塊rotatelogs分割日志詳解
本文介紹了apache使用自帶的日志分割模塊rotatelogs分割日志,rotatelogs 是 Apache 2.2 中自帶的管道日志程序,具體使用方法請參考下文2014-01-01
tomcat服務器如何配置字符集為utf-8徹底解決中文亂碼的問題詳解
這篇文章主要給大家介紹了關于tomcat服務器如何配置字符集為utf-8徹底解決中文亂碼問題的相關資料,文中先對字符集進行了簡單的介紹,然后給大家詳細介紹了解決的方法,需要的朋友可以參考借鑒,下面隨著小編來一起學習學習吧。2018-01-01

