Apache HTTP Server部署全攻略(最新整理)
httpd 簡(jiǎn)介
httpd(Apache HTTP Server)是一款歷史悠久的開源 Web 服務(wù)器軟件,由 Apache 軟件基金會(huì)開發(fā)和維護(hù)。自 1995 年首次發(fā)布以來(lái),Apache 一直是 Web 服務(wù)器領(lǐng)域的領(lǐng)導(dǎo)者,以其穩(wěn)定性、安全性和靈活性著稱。根據(jù) W3Techs 的最新統(tǒng)計(jì),httpd 支持著全球超過(guò) 40%的網(wǎng)站運(yùn)行,特別是在企業(yè)級(jí)應(yīng)用中占據(jù)重要地位。
httpd 的主要特點(diǎn)包括:
- 模塊化架構(gòu):通過(guò)動(dòng)態(tài)加載模塊擴(kuò)展功能
- 支持多種編程語(yǔ)言:如 PHP、Python、Perl 等
- 豐富的認(rèn)證機(jī)制:包括基本認(rèn)證、摘要認(rèn)證等
- 強(qiáng)大的 URL 重寫功能:通過(guò) 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)行說(shuō)明,建議系統(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)境,確保干凈無(wú)沖突。在安裝前先更新系統(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)歡迎頁(yè) ├── 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ǔ)配置詳解
通過(guò)編輯主配置文件進(jìn)行基本設(shè)置:
sudo vim /etc/httpd/conf/httpd.conf
常見配置項(xiàng)說(shuō)明:
# 全局配置 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 # 訪問(wèn)控制 </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)閉頁(yè)腳簽名 TraceEnable Off # 禁用TRACE方法
2.限制敏感目錄訪問(wèn):
<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è)試頁(yè)面:
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.檢查配置文件語(yǔ)法:
sudo httpd -t
3.重新加載配置:
sudo systemctl reload httpd # 或完全重啟 sudo systemctl restart httpd
4.訪問(wèn)測(cè)試:
- 本地測(cè)試:
curl http://localhost
- 遠(yuǎn)程訪問(wèn):瀏覽器輸入服務(wù)器IP或域名
十一、故障排除指南
1.常見問(wèn)題排查命令:
# 查看錯(cuò)誤日志 sudo tail -50 /var/log/httpd/error_log # 查看訪問(wèn)日志 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問(wèn)題
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 # 限制訪問(wèn)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
通過(guò)以上完整配置,您已經(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問(wèn)題
- 教你使用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)管理員和程序員用的最頻繁的命令之一。管理員用它通過(guò)命令行來(lái)編譯和安裝很多開源的工具,程序員用它來(lái)管理他們大型復(fù)雜的項(xiàng)目編譯問(wèn)題。這篇文章主要給大家介紹了關(guān)于linux下make命令實(shí)現(xiàn)輸出高亮的方法,需要的朋友可以參考下。2017-07-07linux環(huán)境下卸載oracle 11g的過(guò)程
這篇文章主要介紹了linux環(huán)境下卸載oracle 11g的過(guò)程,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-07-07阿里云linux服務(wù)器安全設(shè)置(防火墻策略等)
這篇文章主要介紹了阿里云linux服務(wù)器安全設(shè)置,主要是針對(duì)防火墻策略等一些補(bǔ)充2016-10-10Linux多臺(tái)服務(wù)器之間免密登錄的實(shí)現(xiàn)步驟
在日常的后端開發(fā)和運(yùn)維工作中,我們經(jīng)常需要頻繁登錄不同的服務(wù)器進(jìn)行部署、排查問(wèn)題或上傳文件,傳統(tǒng)的基于用戶名和密碼的登錄方式既不安全又不高效,為此,我們可以利用 SSH 公鑰認(rèn)證的方式,實(shí)現(xiàn)無(wú)密碼(免密)登錄遠(yuǎn)程服務(wù)器,下面小編給大家詳細(xì)說(shuō)說(shuō)2025-04-04在Linux系統(tǒng)下上傳項(xiàng)目到碼云的方法
今天小編就為大家分享一篇關(guān)于在Linux系統(tǒng)下上傳項(xiàng)目到碼云的方法,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2018-10-10Apache實(shí)現(xiàn)禁止中文瀏覽器訪問(wèn)與301重定向的方法
這篇文章主要介紹了Apache實(shí)現(xiàn)禁止中文瀏覽器訪問(wèn)與301重定向的方法,通過(guò)修改.htaccess的配置來(lái)實(shí)現(xiàn)非常簡(jiǎn)便,需要的朋友可以參考下2016-01-01apache使用日志分割模塊rotatelogs分割日志詳解
本文介紹了apache使用自帶的日志分割模塊rotatelogs分割日志,rotatelogs 是 Apache 2.2 中自帶的管道日志程序,具體使用方法請(qǐng)參考下文2014-01-01tomcat服務(wù)器如何配置字符集為utf-8徹底解決中文亂碼的問(wèn)題詳解
這篇文章主要給大家介紹了關(guān)于tomcat服務(wù)器如何配置字符集為utf-8徹底解決中文亂碼問(wèn)題的相關(guān)資料,文中先對(duì)字符集進(jìn)行了簡(jiǎn)單的介紹,然后給大家詳細(xì)介紹了解決的方法,需要的朋友可以參考借鑒,下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2018-01-01