Apache HTTP Server部署全攻略

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。根據實際業務需求,可以進一步調整和優化各項參數。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/89399.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/89399.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/89399.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

信號處理學習——文獻精讀與code復現之TFN——嵌入時頻變換的可解釋神經網絡(下)

書接上文: 信號處理學習——文獻精讀與code復現之TFN——嵌入時頻變換的可解釋神經網絡&#xff08;上&#xff09;-CSDN博客 接下來是重要的代碼復現&#xff01;&#xff01;&#xff01;GitHub - ChenQian0618/TFN: this is the open code of paper entitled "TFN: A…

線上故障排查:簽單合同提交報錯分析-對接e簽寶

在企業管理系統中&#xff0c;合同生成與簽署環節至關重要&#xff0c;尤其是在使用第三方平臺進行電子簽署時。本文將通過實際的報錯信息&#xff0c;分析如何進行線上故障排查&#xff0c;解決合同生成過程中出現的問題。 #### 1. 錯誤描述 在嘗試生成合同并提交至電子簽署…

知攻善防靶機 Linux easy溯源

知攻善防 【護網訓練-Linux】應急響應靶場-Easy溯源 小張是個剛入門的程序猿&#xff0c;在公司開發產品的時候突然被叫去應急&#xff0c;小張心想"早知道簡歷上不寫會應急了"&#xff0c;于是call了運維小王的電話&#xff0c;小王說"你面試的時候不是說會應急…

原神八分屏角色展示頁面(純前端html,學習交流)

原神八分屏角色展示頁面 - 一個精美的前端交互項目 項目簡介 這是一個基于原神游戲角色制作的八分屏展示頁面&#xff0c;采用純前端技術實現&#xff0c;包含了豐富的動畫效果、音頻交互和視覺設計。項目展示了一些熱門原神角色&#xff0c;每個角色都有獨立的介紹頁面和專屬…

華為認證二選一:物聯網 VS 人工智能,你的賽道在哪里?

一篇不講情懷只講干貨的科普指南 一、華為物聯網 & 人工智能到底在搞什么&#xff1f; 華為物聯網&#xff08;IoT&#xff09; 的核心是 “萬物互聯”。 通過傳感器、通信技術&#xff08;如NB-IoT/5G&#xff09;、云計算平臺&#xff08;如OceanConnect&#xff09;&…

CloudLens for PolarDB:解鎖數據庫性能優化與智能運維的終極指南

隨著企業數據規模的爆炸式增長,數據庫性能管理已成為技術團隊的關鍵挑戰。本文深入探討如何利用CloudLens for PolarDB實現高級監控、智能診斷和自動化運維,幫助您構建一個自我修復、高效運行的數據庫環境。 引言:數據庫監控的演進 在云原生時代,傳統的數據庫監控方式已不…

MySQL中TINYINT/INT/BIGINT的典型應用場景及實例

以下是MySQL中TINYINT/INT/BIGINT的典型應用場景及實例說明&#xff1a; 一、TINYINT&#xff08;1字節&#xff09; 1.狀態標識 -- 用戶激活狀態&#xff08;0未激活/1已激活&#xff09; ALTER TABLE users ADD is_active TINYINT(1) DEFAULT 0; 適用于布爾值存儲和狀態碼…

YOLOv13:最新的YOLO目標檢測算法

[2506.17733] YOLOv13: Real-Time Object Detection with Hypergraph-Enhanced Adaptive Visual Perception Github: https://github.com/iMoonLab/yolov13 YOLOv13&#xff1a;利用超圖增強型自適應視覺感知進行實時物體檢測 主要的創新點提出了HyperACE機制、FullPAD范式、輕…

【深入淺出:計算流體力學(CFD)基礎與核心原理--從NS方程到工業仿真實踐】

關鍵詞&#xff1a;#CFD、#Navier-Stokes方程、#有限體積法、#湍流模型、#網格收斂性、#工業仿真驗證 一、CFD是什么&#xff1f;為何重要&#xff1f; 計算流體力學&#xff08;Computational Fluid Dynamics, CFD&#xff09; 是通過數值方法求解流體流動控制方程&#xff0…

qt常用控件--04

文章目錄 qt常用控件labelLCD NumberProgressBar結語 很高興和大家見面&#xff0c;給生活加點impetus&#xff01;&#xff01;開啟今天的編程之路&#xff01;&#xff01; 今天我們進一步c11中常見的新增表達 作者&#xff1a;?( ‘ω’ )?260 我的專欄&#xff1a;qt&am…

Redmine:一款基于Web的開源項目管理軟件

Redmine 是一款基于 Ruby on Rails 框架開發的開源、跨平臺、基于 Web 的項目管理、問題跟蹤和文檔協作軟件。 Redmine 官方網站自身就是基于它構建的一個 Web 應用。 功能特性 Redmine 的主要特點和功能包括&#xff1a; 多項目管理&#xff1a; Redmine 可以同時管理多個項…

FPGA FMC 接口

1 FMC 介紹 FMC 接口即 FPGA Mezzanine Card 接口,中文名為 FPGA 中間層板卡接口。以下是對它的詳細介紹: 標準起源:2008 年 7 月,美國國家標準協會(ANSI)批準和發布了 VITA 57 FMC 標準。該標準由從 FPGA 供應商到最終用戶的公司聯盟開發,旨在為位于基板(載卡)上的 …

C++中std::atomic_bool詳解和實戰示例

std::atomic_bool 是 C 標準庫中提供的一種 原子類型&#xff0c;用于在多線程環境下對布爾值進行 線程安全的讀寫操作&#xff0c;避免使用 std::mutex 帶來的性能開銷。 1. 基本作用 在多線程環境中&#xff0c;多個線程同時訪問一個 bool 類型變量可能會出現 競態條件&…

深度學習之分類手寫數字的網絡

面臨的問題 定義神經?絡后&#xff0c;我們回到?寫識別上來。我們可以把識別?寫數字問題分成兩個?問題&#xff1a; 把包含許多數字的圖像分成?系列單獨的圖像&#xff0c;每個包含單個數字&#xff1b; 也就是把圖像 &#xff0c;分成6個單獨的圖像 分類單獨的數字 我們將…

nginx基本使用 linux(mac下的)

目錄結構 編譯后會有&#xff1a;conf html logs sbin 四個文件 &#xff08;其他兩個是之前下載的安裝包&#xff09; conf&#xff1a;配置文件html&#xff1a;頁面資源logs&#xff1a;日志sbin&#xff1a;啟動文件&#xff0c;nginx主程序 運行后多了文件&#xff1a;&l…

基于大眾點評的重慶火鍋在線評論數據挖掘分析(情感分析、主題分析、EDA探索性數據分析)

文章目錄 有需要本項目的代碼或文檔以及全部資源&#xff0c;或者部署調試可以私信博主項目介紹數據采集數據預處理EDA探索性數據分析關鍵詞提取算法情感分析LDA主題分析總結每文一語 有需要本項目的代碼或文檔以及全部資源&#xff0c;或者部署調試可以私信博主 項目介紹 本…

鴻蒙系統(HarmonyOS)應用開發之經典藍色風格登錄頁布局、圖文驗證碼

一、項目概述 本項目是一款基于鴻蒙 ArkTS&#xff08;ETS&#xff09;開發的用戶登錄頁面&#xff0c;集成了圖文驗證碼功能&#xff0c;旨在為應用提供安全、便捷的用戶身份驗證入口。項目采用現代化 UI 設計&#xff0c;兼顧用戶體驗與安全性&#xff0c;適用于多種需要用戶…

0.96寸OLED顯示屏 江協科技學習筆記(36個知識點)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 32 33 34 35 36

Flutter SnackBar 控件詳細介紹

文章目錄 Flutter SnackBar 控件詳細介紹基本特性基本用法1. 顯示簡單 SnackBar2. 自定義持續時間 主要屬性高級用法1. 帶操作的 SnackBar2. 自定義樣式3. 浮動式 SnackBar SnackBarAction 屬性實際應用場景注意事項完整示例建議 Flutter SnackBar 控件詳細介紹 SnackBar 是 F…

【C++】頭文件的能力與禁忌

在C中&#xff0c;?頭文件&#xff08;.h/.hpp&#xff09;?? 的主要作用是聲明接口和共享代碼&#xff0c;但如果不規范使用&#xff0c;會導致編譯或鏈接錯誤。以下是詳細總結&#xff1a; 一、頭文件中可以做的事情 1.1 聲明 函數聲明&#xff08;無需inline&#xff…