Windows系統(tǒng)下Apache HTTP Server 2.4安裝與配置、運(yùn)維手冊(cè)
本文基于 Apache 2.4 官方文檔,完全適配 Windows 系統(tǒng),從安裝、基礎(chǔ)配置、監(jiān)聽綁定、虛擬主機(jī)、URL 重寫、SSL、緩存、日志、性能調(diào)優(yōu)到安全加固,形成一份可直接落地的 Windows 運(yùn)維文檔。
一、Windows 下 Apache 2.4 入門與安裝
1.1 下載與環(huán)境說明
Apache 官方不提供 EXE 安裝包,Windows 版本以壓縮包形式分發(fā):
- 下載地址:https://www.apachehaus.com/ 或 https://www.apachelounge.com/
- 版本:
Apache 2.4.x Win64 - 依賴:Windows 7/2008R2 及以上,需安裝對(duì)應(yīng) VC++ 運(yùn)行庫
1.2 目錄結(jié)構(gòu)(Windows 典型路徑)
解壓到無空格、無中文路徑,例如:
C:\Apache24\ ├── bin\ httpd.exe、服務(wù)管理工具 ├── conf\ 主配置目錄 ├── htdocs\ 默認(rèn)網(wǎng)站根目錄 ├── logs\ 日志目錄 └── modules\ 模塊文件(*.so)
1.3 安裝為 Windows 服務(wù)
以管理員身份打開 CMD,進(jìn)入 bin 目錄:
cd C:\Apache24\bin
安裝服務(wù):
httpd -k install
啟動(dòng)服務(wù):
httpd -k start
停止 / 重啟 / 卸載:
httpd -k stop httpd -k restart httpd -k uninstall
驗(yàn)證安裝:
打開瀏覽器,訪問 http://localhost/。如果看到 "It works!" 的默認(rèn)頁面,就說明 Apache 已經(jīng)成功安裝并運(yùn)行了。
二、監(jiān)聽與綁定(Bind)配置
文件:conf/httpd.conf
2.1 Listen 指令(監(jiān)聽端口)
# 監(jiān)聽所有網(wǎng)卡 80 端口 Listen 0.0.0.0:80 # 監(jiān)聽 IPv6 Listen [::]:80 # 自定義端口 Listen 8080 # HTTPS 監(jiān)聽 Listen 443 https
2.2 ServerName 避免啟動(dòng)警告
ServerName localhost:80
三、主配置結(jié)構(gòu)與配置段
3.1 核心路徑配置(Windows 路徑用/或\\)
Define SRVROOT "C:/Apache24"
ServerRoot "${SRVROOT}"
DocumentRoot "${SRVROOT}/htdocs"
<Directory "${SRVROOT}/htdocs">
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>3.2 常用配置段說明
<Directory>:目錄權(quán)限<Files>:文件匹配<Location>:URL 路徑匹配<VirtualHost>:虛擬主機(jī)<IfModule>:模塊加載判斷
示例:
<Files ".env">
Require all denied
</Files>四、日志配置(Logs)
4.1 錯(cuò)誤日志
ErrorLog "${SRVROOT}/logs/error.log"
LogLevel warn報(bào)警級(jí)別: debug, info, notice, warn, error, crit,alert, emerg.
4.2 訪問日志(通用 Combined 格式)
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
CustomLog "${SRVROOT}/logs/access.log" combined日志文件默認(rèn)在:
C:\Apache24\logs\
五、URL 映射(URL Mapping)
5.1 別名 Alias
將 url中的/static 映射到 D 盤某目錄:
Alias "/static" "D:/web/static"
<Directory "D:/web/static">
Require all granted
</Directory>5.2 腳本別名 ScriptAlias
ScriptAlias "cgi-bin" "${SRVROOT}/cgi-bin/"
<Directory "${SRVROOT}/cgi-bin/">
require all granted
</Directory>5.3 默認(rèn)首頁
DirectoryIndex index.html index.php index.htm
六、URL 重寫(mod_rewrite)
6.1 啟用模塊
LoadModule rewrite_module modules/mod_rewrite.so
6.2 常用規(guī)則示例
1)HTTP 強(qiáng)制跳轉(zhuǎn) HTTPS
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [R=301,L]注解:
RewriteEngine On- 功能:開啟 Apache 的
mod_rewrite重寫引擎。 - 作用:這是使用所有重寫規(guī)則的前提。如果沒有這一行,下面的規(guī)則將不會(huì)生效。
- 功能:開啟 Apache 的
RewriteCond %{HTTPS} off- 功能:設(shè)置重寫的條件(Condition)。
- 含義:檢查當(dāng)前訪問的協(xié)議是否為
off(即非 HTTPS,也就是 HTTP)。 - 邏輯:只有當(dāng)用戶使用的是 HTTP 訪問時(shí),才會(huì)執(zhí)行下一行的跳轉(zhuǎn)規(guī)則。如果用戶已經(jīng)在使用 HTTPS,則不執(zhí)行任何操作,避免死循環(huán)。
RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [R=301,L]- 功能:定義具體的重寫/跳轉(zhuǎn)規(guī)則。
^(.*)$:這是一個(gè)正則表達(dá)式,用于匹配用戶請(qǐng)求的整個(gè)路徑(URI)。(.*)會(huì)把匹配到的內(nèi)容(比如/index.html或/about)保存為變量$1。- 為啥沒有域名呢?
- 因?yàn)樵?Apache 的
RewriteRule規(guī)則中,它只負(fù)責(zé)處理“路徑”,不負(fù)責(zé)處理“域名”。域名(如www.example.com)是由 Apache 的其他部分(虛擬主機(jī)配置)處理的,當(dāng)請(qǐng)求到達(dá)RewriteRule時(shí),域名已經(jīng)被“剝離”掉了,只剩下路徑。
https://%{HTTP_HOST}$1:這是跳轉(zhuǎn)的目標(biāo)地址。https://:強(qiáng)制使用加密協(xié)議。%{HTTP_HOST}:自動(dòng)獲取當(dāng)前訪問的域名(如example.com)。$1:填入剛才匹配到的路徑部分。[R=301,L]:這是規(guī)則的標(biāo)志(Flags)。R=301:表示執(zhí)行301 永久重定向。這會(huì)告訴瀏覽器和搜索引擎(如 Google、百度),該頁面已永久移動(dòng)到新的安全地址,有利于 SEO。L:表示這是最后一條(Last)規(guī)則。一旦匹配成功并執(zhí)行了跳轉(zhuǎn),服務(wù)器就不再處理后面的其他規(guī)則了。
補(bǔ)充:
1. URL 的結(jié)構(gòu)拆解
在 HTTP 協(xié)議中,一個(gè)完整的 URL 是這樣的:http://www.example.com:80/news/123.html
Apache 在內(nèi)部處理時(shí),會(huì)把它拆分成不同的變量:
- 協(xié)議:
http - 主機(jī)名/域名:
www.example.com(對(duì)應(yīng)變量%{HTTP_HOST}) - 端口:
80 - URI/路徑:
/news/123.html(這就是RewriteRule匹配的對(duì)象)
當(dāng)你寫 RewriteRule ^(.*)$ ... 時(shí),正則表達(dá)式 ^(.*)$ 匹配的對(duì)象僅僅是 URI/路徑 部分。
2. 為什么后面又要寫%{HTTP_HOST}?
既然 ^(.*)$ 抓不到域名,那為什么我們?cè)谔D(zhuǎn)目標(biāo)里又要寫 https://%{HTTP_HOST}$1 呢?
^(.*)$:負(fù)責(zé)抓取路徑(比如/news/123.html),并存為$1。%{HTTP_HOST}:這是一個(gè)系統(tǒng)變量。它的作用是告訴 Apache:“去查一下剛才那個(gè)請(qǐng)求的域名是什么,把它填在這里”。
?? 舉例說明
假設(shè)你的域名是 example.com:
- 用戶訪問:
http://example.com/news/article1 - 觸發(fā)條件:
RewriteCond檢測(cè)到是 HTTP (off)。 - 執(zhí)行跳轉(zhuǎn):
RewriteRule捕獲路徑/news/article1為$1。 - 最終結(jié)果:瀏覽器地址欄變?yōu)?nbsp;
https://example.com/news/article1。
2)偽靜態(tài) /path → index.php?path=
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]3)支持 .htaccess
是 Apache Web 服務(wù)器 的一種分布式配置文件。它允許你在不修改服務(wù)器主配置文件(如 httpd.conf)的情況下,直接控制該目錄及其子目錄下的網(wǎng)站行為。它在虛擬主機(jī)(共享主機(jī))環(huán)境中非常流行,因?yàn)槠胀ㄓ脩敉ǔ]有權(quán)限修改服務(wù)器的主配置,但可以通過上傳 .htaccess 文件來實(shí)現(xiàn)各種高級(jí)功能。
.htaccess 的功能非常強(qiáng)大,最常見的用途包括:
- URL 重寫(偽靜態(tài))
- 這是它最核心的功能。通過
mod_rewrite模塊,它可以把復(fù)雜的動(dòng)態(tài) URL(如product.php?id=123)轉(zhuǎn)換成簡(jiǎn)潔、對(duì)搜索引擎友好的靜態(tài) URL(如product/123),或者實(shí)現(xiàn) HTTP 強(qiáng)制跳轉(zhuǎn) HTTPS。
- 這是它最核心的功能。通過
- 自定義錯(cuò)誤頁面
- 當(dāng)用戶訪問不存在的頁面時(shí),你可以配置它顯示一個(gè)自定義的、友好的 404 頁面,而不是服務(wù)器默認(rèn)的枯燥報(bào)錯(cuò)信息。
- 例如:
ErrorDocument 404 /errors/404.html
- 訪問控制與安全
- IP 限制:允許或禁止特定 IP 地址訪問你的網(wǎng)站。
- 目錄密碼保護(hù):為特定文件夾設(shè)置密碼,只有輸入正確的用戶名和密碼才能訪問。
- 防盜鏈:防止其他網(wǎng)站直接引用你服務(wù)器上的圖片或文件,節(jié)省你的帶寬。
- 優(yōu)化與緩存
- 它可以設(shè)置文件的緩存策略,告訴瀏覽器哪些文件需要緩存、緩存多久,從而提升網(wǎng)站的加載速度。
- 禁止目錄列表
- 如果一個(gè)文件夾里沒有首頁文件(如
index.html),默認(rèn)情況下 Apache 會(huì)列出該文件夾下的所有文件。使用.htaccess可以禁止這種行為,防止文件結(jié)構(gòu)泄露。 - 例如:
Options -Indexes
- 如果一個(gè)文件夾里沒有首頁文件(如
<Directory "${SRVROOT}/htdocs">
AllowOverride All
</Directory>七、虛擬主機(jī)(Virtual Hosts)
#Include conf/extra/這個(gè)目錄里是放什么的conf/extra/ 目錄是 Apache 用來存放特定功能的擴(kuò)展配置文件的地方。
簡(jiǎn)單來說,Apache 的主配置文件 httpd.conf 就像一個(gè)總指揮部,而 conf/extra/ 目錄就像是各個(gè)專項(xiàng)部門(如安保部、交通部、后勤部)的獨(dú)立辦公室。為了保持主配置文件的整潔和易讀,Apache 將一些復(fù)雜或特定功能的配置單獨(dú)拆分出來,放在這個(gè)目錄下。主配置文件通過 Include 指令來調(diào)用它們。
7.1 啟用配置
涉及conf/extra/ 目錄,是 Apache 用來存放特定功能的擴(kuò)展配置文件的地方。為了保持主配置文件的整潔和易讀,Apache 將一些復(fù)雜或特定功能的配置單獨(dú)拆分出來,放在這個(gè)目錄下。主配置文件通過 Include 指令來調(diào)用它們。
在 httpd.conf 中取消注釋:
Include conf/extra/httpd-vhosts.conf
7.2 httpd-vhosts.conf 示例
<VirtualHost *:80>
ServerName www.site1.com
DocumentRoot "C:/web/site1"
ErrorLog "logs/site1-error.log"
CustomLog "logs/site1-access.log" combined
</VirtualHost>
<VirtualHost *:80>
ServerName www.site2.com
DocumentRoot "C:/web/site2"
ErrorLog "logs/site2-error.log"
CustomLog "logs/site2-access.log" combined
</VirtualHost>Windows 本地測(cè)試需修改:
C:\Windows\System32\drivers\etc\hosts
添加
127.0.0.1 www.site1.com 127.0.0.1 www.site2.com
八、SSL / HTTPS 配置
8.1 啟用模塊
LoadModule ssl_module modules/mod_ssl.so LoadModule socache_shmcb_module modules/mod_socache_shmcb.so Include conf/extra/httpd-ssl.conf
8.2典型SSL配置
<VirtualHost *:443>
ServerName site.com
DocumentRoot "C:/web/site"
SSLEngine on
SSLCertificateFile "C:/ssl/site.crt"
SSLCertificateKeyFile "C:/ssl/site.key"
SSLCertificateChainFile "C:/ssl/chain.crt"
# 安全套件
SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
SSLCipherSuite HIGH:!aNULL:!MD5
</VirtualHost>九、緩存配置(Caching)
9.1磁盤緩存
LoadModule cache_module modules/mod_cache.so LoadModule cache_disk_module modules/mod_cache_disk.so CacheEnable disk / CacheRoot "C:/Apache24/cache" CacheDirLevels 2 CacheDirLength 1 CacheDefaultExpire 3600
9.2 瀏覽器緩存(靜態(tài)資源)
<FilesMatch "\.(jpg|png|css|js|gif|ico)$">
Header set Cache-Control "max-age=86400"
</FilesMatch>需加載頭模塊
LoadModule headers_module modules/mod_headers.so
十、內(nèi)容協(xié)商(Content Negotiation)
根據(jù)瀏覽器語言自動(dòng)返回對(duì)應(yīng)頁面:
LoadModule negotiation_module modules/mod_negotiation.so
<Directory "${SRVROOT}/htdocs">
Options +MultiViews
</Directory>可放置:
- index.html.en
- index.html.zh-cn
Apache 會(huì)自動(dòng)匹配。
十一、動(dòng)態(tài)模塊 DSO
Windows 下所有擴(kuò)展均為 DSO 模式,通過 LoadModule 加載:
LoadModule deflate_module modules/mod_deflate.so LoadModule expires_module modules/mod_expires.so LoadModule rewrite_module modules/mod_rewrite.so
無需編譯,直接啟用即可。
十二、性能調(diào)優(yōu)(Windows 專用)
文件:conf/extra/httpd-mpm.conf
12.1 MPM WinNT(Windows 專屬多處理模塊)
<IfModule mpm_winnt_module>
ThreadsPerChild 150
MaxConnectionsPerChild 0
</IfModule>優(yōu)化建議:
- 并發(fā)高:
ThreadsPerChild 250~500 - 內(nèi)存?。?code>ThreadsPerChild 80~120
解釋代碼
2. ThreadsPerChild 150
- 含義:每個(gè)子進(jìn)程允許創(chuàng)建的最大線程數(shù)。
- 核心作用:這是決定你網(wǎng)站并發(fā)能力最關(guān)鍵的參數(shù)。
- 工作機(jī)制:
- 在 Windows 下,Apache 啟動(dòng)后通常只生成 1 個(gè) 子進(jìn)程。
- 這個(gè)子進(jìn)程會(huì)一次性啟動(dòng) 150 個(gè)線程。
- 每個(gè)線程可以處理一個(gè)用戶的請(qǐng)求。
- 實(shí)際效果:設(shè)置為
150,意味著你的服務(wù)器同一時(shí)間最多可以處理 150 個(gè) 并發(fā)連接。- 如果第 151 個(gè)用戶訪問,他必須等待,直到前面的某個(gè)線程處理完任務(wù)空閑下來。
- 注意:默認(rèn)值通常是 64 或 150。如果你的網(wǎng)站訪問量很大,這個(gè)值可能需要調(diào)大(例如 1000 或更高),但也要考慮服務(wù)器內(nèi)存限制。
3. MaxConnectionsPerChild 0
- 含義:每個(gè)子進(jìn)程在銷毀前允許處理的最大連接數(shù)。
- 核心作用:控制進(jìn)程的生命周期,防止內(nèi)存泄漏。
- 數(shù)值解讀:
- 設(shè)置為
0(當(dāng)前配置):表示不限制。子進(jìn)程會(huì)一直運(yùn)行,永遠(yuǎn)不會(huì)因?yàn)樘幚砹颂嗾?qǐng)求而自動(dòng)重啟。 - 設(shè)置為非 0 值(例如
10000):表示當(dāng)一個(gè)子進(jìn)程累計(jì)處理了 10000 個(gè)請(qǐng)求后,Apache 會(huì)“殺掉”這個(gè)舊進(jìn)程,并重新生成一個(gè)新的子進(jìn)程來代替它。
- 設(shè)置為
- 為什么要限制?:如果 Apache 或你的 PHP 代碼存在微小的內(nèi)存泄漏(即處理完請(qǐng)求后沒有完全釋放內(nèi)存),長時(shí)間運(yùn)行會(huì)導(dǎo)致內(nèi)存被耗盡。設(shè)置一個(gè)非 0 的值可以讓進(jìn)程定期“重生”,釋放內(nèi)存,保持服務(wù)器健康。
總結(jié)與建議
這段配置的意思是:
“在 Windows 系統(tǒng)下,Apache 啟動(dòng)一個(gè)子進(jìn)程,該進(jìn)程同時(shí)開啟 150 個(gè)線程來處理請(qǐng)求。并且,這個(gè)進(jìn)程將永久運(yùn)行,除非手動(dòng)重啟,不會(huì)因?yàn)樘幚砹诉^多請(qǐng)求而自動(dòng)重置。”
apache的windows版本,它通常只啟動(dòng)一個(gè)子進(jìn)程,與LINUX/Unix系統(tǒng)下的apache有本質(zhì)的區(qū)別。Linux下apache啟動(dòng)父進(jìn)程來管理多個(gè)子進(jìn)程,window的apache的設(shè)計(jì)機(jī)制主進(jìn)程負(fù)責(zé)管理服務(wù)和綁定端口,單個(gè)子進(jìn)程(主進(jìn)程啟動(dòng)唯一的子進(jìn)程。多線程:這個(gè)子進(jìn)程內(nèi)部創(chuàng)建大量的線程)。
優(yōu)化建議:
- 如果是生產(chǎn)環(huán)境(正式網(wǎng)站):建議將
MaxConnectionsPerChild設(shè)置為一個(gè)較大的數(shù)字(如10000或20000),以防止?jié)撛诘膬?nèi)存泄漏導(dǎo)致服務(wù)器變慢。 - 如果是高并發(fā)環(huán)境:如果網(wǎng)站經(jīng)常有超過 150 人同時(shí)在線操作,需要適當(dāng)調(diào)大
ThreadsPerChild的值。
12.2 通用性能優(yōu)化
HostnameLookups Off EnableSendfile On KeepAlive On KeepAliveTimeout 3 TimeOut 10
啟用 Gzip 壓縮:
AddOutputFilterByType DEFLATE text/html text/plain text/css application/json
十三、安全加固(Security Tips)
13.1 隱藏版本號(hào)
ServerTokens Prod ServerSignature Off
13.2 禁止訪問敏感目錄
<Directory "${SRVROOT}/cgi-bin">
Require all granted
</Directory>
# 默認(rèn)拒絕所有
<Directory />
Require all denied
AllowOverride None
</Directory>13.3限制請(qǐng)求大小
LimitRequestBody 10485760
13.4禁止列目錄
Options -Indexes
完整可直接粘貼的安全加固段(Windows 專用)
你直接復(fù)制粘貼到 httpd.conf 末尾即可:
# ==============================
# 安全加固配置 Security Tips
# ==============================
# 隱藏版本號(hào)
ServerTokens Prod
ServerSignature Off
# 禁止根目錄訪問,提高安全性
<Directory />
Require all denied
AllowOverride None
Options None
</Directory>
# 禁止目錄瀏覽
Options -Indexes
# 限制請(qǐng)求體大?。?0MB)
LimitRequestBody 10485760
# 禁止訪問 .htaccess、.env 等敏感文件
<FilesMatch "\.(htaccess|htpasswd|ini|phps|sql|bak|env|log)$">
Require all denied
</FilesMatch>
# 關(guān)閉反向DNS查詢,提升速度+安全
HostnameLookups Off
# 禁用符號(hào)鏈接(如不需要可開啟)
# Options -FollowSymLinks四、修改后必須執(zhí)行
管理員 CMD:
httpd -t
檢查無誤后重啟(cmd):
httpd -k restart
如果你用了虛擬主機(jī)
虛擬主機(jī)里的安全規(guī)則寫在:
C:\Apache24\conf\extra\httpd-vhosts.conf
每個(gè) <VirtualHost> 內(nèi)部都可以單獨(dú)加權(quán)限控制。
14環(huán)境變量(env)
設(shè)置環(huán)境變量供腳本使用:
SetEnv APP_ENV production SetEnv PATH "C:/PHP"
十六、Windows 常見問題排查
- 端口被占用(80/443)
netstat -ano | findstr ":80"
- 啟動(dòng)報(bào)錯(cuò):系統(tǒng)找不到指定文件路徑含中文 / 空格,或 VC++ 運(yùn)行庫未裝
- 403 禁止訪問目錄權(quán)限不足,Apache 服務(wù)用戶無讀取權(quán)限
- 404 無法訪問DocumentRoot 路徑錯(cuò)誤或文件不存在
- 配置不生效未重啟服務(wù):
httpd -k restart
到此這篇關(guān)于Windows系統(tǒng)下Apache HTTP Server 2.4安裝與配置、運(yùn)維手冊(cè)的文章就介紹到這了,更多相關(guān)Windows Apache2.4安裝配置內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 阿里云的WindowsServer2016上部署php+apache
- Windows Server 2016 上配置 APACHE+SSL+PHP+perl的教程詳解
- Windows Apache2.4 VC9(ApacheHaus)詳細(xì)安裝配置教程
- windows下apache的簡(jiǎn)單命令
- win7安裝xampp提示windows找不到-n文件(安裝成功后,443端口占用,apache服務(wù)器無法正常啟動(dòng))的解決方案
- Windows2003下php5.4安裝配置教程(Apache2.4)
- windows8.1下Apache+Php+MySQL配置步驟
- windows下apache搭建php開發(fā)環(huán)境
相關(guān)文章
Linux?Tomcat的服務(wù)器查看接口請(qǐng)求方式的方法
本文講述了在安卓開發(fā)中遇到的接口405錯(cuò)誤,懷疑是由于客戶端用GET請(qǐng)求代替了POST,通過查看ApacheTomcat的localhost_access_log日志確認(rèn)請(qǐng)求方式并定位問題,可能是緩存導(dǎo)致,所以講解了Linux?Tomcat的服務(wù)器查看接口請(qǐng)求方式的方法,需要的朋友可以參考下2024-07-07
詳解基于Centos7+Nginx+Tomcat8的負(fù)載均衡服務(wù)器的搭建
這篇文章主要介紹了詳解基于Centos7+Nginx+Tomcat8的負(fù)載均衡服務(wù)器的搭建,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-06-06

