首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

Apache 2.4 + PHP 8.x Windows 整合部署指南:Apache Lounge、mod_php、VirtualHost、SSL 與效能調優

     編輯:PHP 相關知識

前言

Windows 上部署 Apache + PHP 最穩定的組合是 **Apache Lounge VS16 編譯版 + PHP Thread Safe (TS) 版**,透過 `mod_php` (php8apache2_4.dll) 整合。本文涵蓋從下載、安裝、VirtualHost、SSL 憑證、URL 重寫、PHP 配置到效能調優的完整流程。

版本對應鐵律

元件版本要求下載來源
Apache2.4.x VS16 (Visual Studio 2019)Apache Lounge
PHP8.x TS (Thread Safe) VS16 x64windows.php.net
VC++ RedistVisual C++ 2015-2022 x64Microsoft

版本不匹配會導致「Cannot load php8apache2_4.dll」或 Apache 崩潰。

下載與安裝步驟

  1. 安裝 VC++ Redistributable:下載 並安裝。
  2. 解壓 Apache:將 `httpd-2.4.62-win64-VS16.zip` 解壓至 `C:\Apache24` (路徑無空格)。
  3. 解壓 PHP:將 `php-8.3.12-Win32-vs16-x64.zip` (TS版) 解壓至 `C:\php\8.3.12-ts`。
  4. 配置 PHP:複製 `php.ini-production` 為 `php.ini`,修改關鍵項 (參考前文 153716)。
  5. 配置 Apache 整合 PHP:編輯 `C:\Apache24\conf\httpd.conf`。
    # 1. 載入 PHP 模組 (確認 dll 存在)
    LoadModule php_module "C:/php/8.3.12-ts/php8apache2_4.dll"
    
    # 2. 指定 php.ini 目錄
    PHPIniDir "C:/php/8.3.12-ts"
    
    # 3. 關聯 .php 副檔名
    
        SetHandler application/x-httpd-php
    
    
    # 4. 預設首頁
    DirectoryIndex index.php index.html index.htm
    
    # 5. 允許 .htaccess (需配合 AllowOverride)
    
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    
    
  6. 安裝 Apache 服務 (管理員 PowerShell):
    cd C:\Apache24\bin
    .\httpd.exe -k install -n "Apache2.4_PHP8.3"
    .\httpd.exe -k start
    
  7. 驗證:瀏覽 `https://localhost/info.php` (內容 ``)。

VirtualHost 多站點配置

1. 啟用虛擬主機

# httpd.conf 取消註解
Include conf/extra/httpd-vhosts.conf

2. 編輯 `conf/extra/httpd-vhosts.conf`


    ServerName site1.local
    DocumentRoot "C:/www/site1/public"
    
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    
    ErrorLog "logs/site1-error.log"
    CustomLog "logs/site1-access.log" common



    ServerName site2.local
    DocumentRoot "C:/www/site2/public"
    
        AllowOverride All
        Require all granted
    

3. 修改 Windows Hosts 檔

# C:\Windows\System32\drivers\etc\hosts (管理員編輯)
127.0.0.1   site1.local
127.0.0.1   site2.local

SSL/HTTPS 本地開發配置

1. 產生自簽憑證 (mkcert 推薦)

# 安裝 mkcert (Chocolatey/Scoop/手動)
choco install mkcert
mkcert -install
mkcert site1.local localhost 127.0.0.1 ::1

# 產生 site1.local+2.pem (憑證) 和 site1.local+2-key.pem (私鑰)
# 複製至 C:\Apache24\conf\ssl\

2. 啟用 SSL 模組

# httpd.conf 取消註解
LoadModule ssl_module modules/mod_ssl.so
LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
Include conf/extra/httpd-ssl.conf

3. 配置 `conf/extra/httpd-ssl.conf` 或 vhost


    ServerName site1.local
    DocumentRoot "C:/www/site1/public"
    
    SSLEngine on
    SSLCertificateFile "C:/Apache24/conf/ssl/site1.local+2.pem"
    SSLCertificateKeyFile "C:/Apache24/conf/ssl/site1.local+2-key.pem"
    
    # 現代 SSL 設定
    SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
    SSLCipherSuite HIGH:!aNULL:!MD5:!3DES
    SSLHonorCipherOrder on
    
    
        AllowOverride All
        Require all granted
    

4. 重啟 Apache:`httpd.exe -k restart`

瀏覽 `https://site1.local` 應顯示綠鎖 (mkcert 已安裝根憑證至系統信任存儲)。

URL 重寫 (.htaccess / mod_rewrite)

# httpd.conf 確認載入
LoadModule rewrite_module modules/mod_rewrite.so

# 專案根目錄 .htaccess (Laravel/Symfony/ThinkPHP 通用)
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ index.php [L]

效能調優 (Windows 環境)

Apache (httpd.conf)


    ThreadsPerChild       1920   # 依 CPU 核心調整,預設 1920 較高
    MaxConnectionsPerChild 10000
    AcceptFilter http none       # Windows 建議關閉
    AcceptFilter https none
    EnableSendfile Off           # Windows 網路磁碟問題
    EnableMMAP Off


# 靜態資源快取

    ExpiresActive On
    ExpiresByType image/* "access plus 1 month"
    ExpiresByType text/css "access plus 1 week"
    ExpiresByType application/javascript "access plus 1 week"


# Gzip 壓縮

    AddOutputFilterByType DEFLATE text/html text/css application/javascript application/json
    DeflateCompressionLevel 6

PHP (php.ini)

; OpCache (生產必開)
opcache.enable=1
opcache.enable_cli=1
opcache.memory_consumption=256
opcache.interned_strings_buffer=16
opcache.max_accelerated_files=20000
opcache.revalidate_freq=60
opcache.jit=tracing
opcache.jit_buffer_size=128M

; 實際路徑快取
realpath_cache_size=4096K
realpath_cache_ttl=7200

; 上傳/執行限制
max_execution_time=60
memory_limit=256M
post_max_size=50M
upload_max_filesize=50M

常見問題速查

現象排查步驟
Apache 啟動閃退1. `httpd.exe -t` 檢查語法 2. 事件檢視器 → Windows Logs → Application 找 Error 3. 檢查 php8apache2_4.dll 是否存在、版本匹配
PHP 錯誤不顯示php.ini: display_errors=On, error_reporting=E_ALL; httpd.conf: php_flag display_errors On (若用 php_flag)
.htaccess 不生效AllowOverride All 且目錄正確;檢查 RewriteEngine On
SSL 憑證不信任mkcert -install 並重啟瀏覽器;或手動匯入根憑證至「受信任的根憑證授權單位」
上傳大檔失敗php.ini post_max_size/upload_max_filesize;Apache LimitRequestBody
中文路徑 404Apache 2.4.58+ 支援 UTF-8 路徑;舊版需啟用 `AcceptPathInfo On` 或升級

結語

Windows Apache + PHP 部署核心在於 VC++ 編譯版本一致 (VS16)、TS 版 PHP + mod_php、正確載入順序與路徑。配合 mkcert 產生受信任本地憑證、VirtualHost 多站點隔離、OpCache + 實際路徑快取,可構建極接近生產環境的本地開發體驗。長期專案建議遷移至 **Docker (php:apache / php:fpm + nginx)** 或 **WSL2**,消除平台差異,實現開發/測試/部署一致性。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved