簡體   English   中英

Nginx Symfony2 暫存配置

[英]Nginx Symfony2 Staging Config

我正在嘗試將 nginx 配置為為一個 symfony 項目的多個版本提供服務。

發布文件夾結構:
/var/www/my-project/releases/24/
/var/www/my-project/releases/46/
/var/www/my-project/releases/47/

我想調用一個像“http://my-server/my-project/release/47”這樣的 URL,它應該訪問服務器上的 /var/www/my-project/releases/47/web/app.php .

我現在嘗試了一段時間,但找不到最終解決方案,任何幫助都會很棒!

我的最后一次嘗試:

server {
    server_name my-server;

    location / {
        # try to serve file directly, fallback to app.php
        try_files $uri $uri$2app.php$is_args$args;
    }

    location ~ /my-project/release/([-a-zA-Z0-9]+)/app\.php(/|$) {
        root /var/www/my-project/releases/$1/web;

        fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_split_path_info ^(.+\.php)(/.*)$;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root/app.php;
        fastcgi_param HTTPS off;

        error_log /var/log/nginx/my-project_$1_error.log;
        access_log /var/log/nginx/my-project_$1_access.log;

        # Prevents URIs that include the front controller. This will 404:
        # http://domain.tld/app.php/some-path
        # Remove the internal directive to allow URIs like this
        internal;
    }
}

此配置產生以下錯誤:

[錯誤] 2272#0:*169 重寫或內部重定向循環,同時內部重定向到“/my-project/release/47app.phpapp.phpapp.phpapp.phpapp.phpapp.phpapp.phpapp.phpapp.phpapp.phpapp.php”

您的server容器中缺少root指令—— /var/www是您架構的默認設置嗎? 否則,添加一個根指令:

root /var/www;

try_files無法找到匹配項,並將通過向其附加app.php來重寫 URL。 生成的 URL 與您的其他位置塊不匹配,因此它會一次又一次地被重寫。

try_files指令的最后一個術語是錯誤的。 你有$2應該放在/web/地方(可能是從之前的實驗中繼承的)。

使用try_files進行一般重寫是一個壞主意,因為任何錯誤輸入的 URL 都可能導致重寫循環。 嘗試:

location / {
  rewrite ^(/my-project/release/[-a-zA-Z0-9]+)$ $1/app.php;
}

我把配置改成這樣:

server {
    server_name my-server;
    root /var/www;

    location / {
        rewrite ^(/my-project/release/[-a-zA-Z0-9]+)$ $1/app.php;
    }

    location ~ /my-project/release/([-a-zA-Z0-9]+)/app\.php(/|$) {
        alias /var/www/my-project/releases/$1/web;

        fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_split_path_info ^(.+\.php)(/.*)$;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root/app.php;
        fastcgi_param HTTPS off;

        error_log /var/www/my-project/releases/$1/app/logs/nginx_error.log;
        access_log /var/www/my-project/releases/$1/app/logs/nginx_access.log;

        # Prevents URIs that include the front controller. This will 404:
        # http://domain.tld/app.php/some-path
        # Remove the internal directive to allow URIs like this
        internal;
    }
}

現在像“ http://my-server/my-project/release/47 ”這樣的調用正確指向“/var/www/my-project/releases/47/web/app.php”。

現在的問題是 url "my-project/release/47" 到達 symfony 路由器,它找不到到這個 url 的路由。

現在讓 url 在瀏覽器中顯示為“//my-server/my-project/release/47”但到達 symfony 為“//my-server/”的正確方法是什么?

謝謝大家的幫助,不幸的是我無法讓它工作。 我想我必須了解更多關於 nginx 配置的信息才能處理這些問題,然后才能在生產中使用它。

我的問題的解決方法是為每個版本創建一個自己的 nginx conf。 該文件將在構建過程中創建,然后傳輸到網絡服務器,復制到/etc/nginx/conf.d/[releasename].conf並由sudo service nginx reload激活。

當不再需要發布時,發布目錄中的卸載腳本會刪除源和配置。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM