Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> Linux 教學

Symfony2 在 Nginx 下的完整配置指南(HTTP/HTTPS)

編輯:Linux 教學

前言

Symfony2 採用前端控制器模式,所有請求均進入 web/app.php(生產環境)或 web/app_dev.php(開發環境)。Nginx 需正確配置 rewrite 與 fastcgi,確保僅允許這兩個入口檔以 PHP 腳本執行,其餘 PHP 檔案應被拒絕或下載,防止惡意執行。

HTTP 環境配置範例

server {
    listen 80;
    server_name example.com;          # 請替換為您的域名
    root /var/www/symfony2/web;       # 指向 Symfony 專案的 web 目錄

    error_log /var/log/nginx/symfony2.error.log;
    access_log /var/log/nginx/symfony2.access.log;

    # 將帶 app.php 的 URL 重寫為乾淨的靜態風格
    rewrite ^/app\.php/?(.*)$ /$1 permanent;

    location / {
        index app.php;
        try_files $uri @rewriteapp;   # 靜態檔直接服務,其餘交給 @rewriteapp
    }

    location @rewriteapp {
        rewrite ^(.*)$ /app.php/$1 last;
    }

    # 僅允許 app.php 與 app_dev.php 進入 FastCGI
    location ~ ^/(app|app_dev)\.php(/|$) {
        fastcgi_pass 127.0.0.1:9000;                  # PHP-FPM 監聽地址
        fastcgi_split_path_info ^(.+\.php)(/.*)$;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param HTTPS off;                      # 標識非 HTTPS
    }

    # 額外安全:禁止存取 web/ 目錄下其他 .php 檔
    location ~ \.php$ {
        return 404;
    }
}

HTTPS 環境配置範例

server {
    listen 443 ssl;
    server_name example.com;
    root /var/www/symfony2/web;

    ssl_certificate /etc/ssl/certs/symfony2.crt;
    ssl_certificate_key /etc/ssl/private/symfony2.key;

    error_log /var/log/nginx/symfony2.error.log;
    access_log /var/log/nginx/symfony2.access.log;

    rewrite ^/app\.php/?(.*)$ /$1 permanent;

    location / {
        index app.php;
        try_files $uri @rewriteapp;
    }

    location @rewriteapp {
        rewrite ^(.*)$ /app.php/$1 last;
    }

    location ~ ^/(app|app_dev)\.php(/|$) {
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_split_path_info ^(.+\.php)(/.*)$;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param HTTPS on;                       # 關鍵:告知 Symfony 當前為 HTTPS
    }

    location ~ \.php$ {
        return 404;
    }
}

關鍵配置解析

指令/區塊作用
try_files $uri @rewriteapp優先服務靜態資源(css/js/圖片),不存在則轉發至 @rewriteapp 進入前端控制器。
rewrite ^(.*)$ /app.php/$1 last;將所有動態請求重寫為 /app.php/原路徑,保留 PATH_INFO。
fastcgi_split_path_info正確分離 SCRIPT_FILENAME 與 PATH_INFO,支援 Symfony 的路由系統。
fastcgi_param HTTPS on/offSymfony 依此判斷 isSecure()、生成安全連結、設定 Secure Cookie 等。
location ~ \.php$ { return 404; }防禦措施:若攻擊者上傳惡意 .php 至 web/,直接返回 404,不交給 PHP-FPM 執行。

常見問題排查

  • 502 Bad Gateway:檢查 fastcgi_pass 指向的 PHP-FPM 是否運行、埠號是否正確、權限是否允許 Nginx 連接。
  • 路由 404:確認 try_files 順序、rewrite 正則、fastcgi_split_path_info 是否匹配實際 URL 結構。
  • HTTPS 下資源載入失敗:確保 fastcgi_param HTTPS on; 已設定,且 Symfony 設定 trusted_proxies(若經過反向代理)。
  • 開發環境無法訪問:app_dev.php 預設僅允許本地 IP,需在檔案中放行您的客戶端 IP 或暫時關閉檢查。

總結

上述配置遵循「最小權限」原則:僅暴露必要入口、強制 HTTPS 參數傳遞、阻斷任意 PHP 執行。部署時請根據實際路徑、域名、憑證位置調整,並配合 php-fpm.conf 中的 listen、user/group、pm.max_children 等參數調優,即可獲得高效穩定的 Symfony2 生產環境。

Copyright © Windows教程網 All Rights Reserved