2017-01-18 140 views
8

我的Nginx配置有問題。我有兩臺服務器,一臺使用nginx,另一臺使用symfony3中的webApp。 這裏是我的配置:爲所有的PHP腳本,但所有的資產(靜態文件)損壞文件的用symfony3提供遠程靜態文件

location /portal/mysite/ { 

    set $frontRoot /srv/data/apps/mysite-portal-stag/current/web; 
    set $sfApp app.php; # Change to app.php for prod or app_dev.php for dev 

    root /srv/data/apps/mysite-portal-stag/current/web; 

    rewrite ^/portal/mysite/(.*)$ /$1 break; 
    try_files $uri @sfFront; 

} 
location @sfFront { 

    root /srv/data/apps/mysite-portal-stag/current/web; 

    fastcgi_pass myserver:myport; 
    include fastcgi_params; 
    fastcgi_param SCRIPT_FILENAME $frontRoot/$sfApp; 

    fastcgi_param SCRIPT_NAME /portal/mysite/$sfApp; 

} 

的網站工作。我不明白Nginx如何工作來表明什麼是靜態文件,並「告訴」我的代理他們不是腳本。

+0

嘗試將'include fastcgi_params'改爲'include fastcgi.conf'並移除您設置的'fastcgi_param'。相反,請添加'fastcgi_split_path_info ^(。+ \。php)(/.*)$;'。在我看來,你傳遞的路徑可能是錯誤的,這就是事情部分工作的原因。我有'php-fpm'和'nginx'與反向代理,它工作得很好。 – tftd

+0

@JeanDoux,我希望你找到我的答案有用,並保持你的賞金討價還價的一部分;否則,請隨時告訴我有沒有什麼不清楚的地方,如果有的話,我很樂意將剩下的點連接起來。 – cnst

回答

7

try_files指令在放棄之前會自動嘗試查找靜態文件並將其作爲靜態文件提供,並將請求作爲腳本提供。

  • http://nginx.org/r/try_files

    檢查按照指定的順序文件的存在,並使用用於請求處理的第一找到的文件;該處理在當前上下文中執行。文件路徑是根據根和別名指令從文件參數構建的。可以通過在名稱末尾指定斜線來檢查目錄的存在,例如, 「$ URI /」。如果找不到任何文件,則將內部重定向到最後一個參數中指定的uri。

注意,雖然你已經在使用try_files,看來,也許你的路徑處理不符合規格。


至於你自己的答案有一個臨時的解決方案,there's nothing wrong with using a rewrite or two,而是說,它看起來就像你從alias指令中受益。

但是,你從來沒有解釋爲什麼你服務的東西出來/tmp。請注意,/tmp通常會被一些cron腳本自動清除,例如,,在OpenBSD上,/etc/daily腳本會自動find並刪除大於7天的文件(on a daily basis,顧名思義)。


綜上所述,你應該首先弄清楚什麼是文件系統的Web視圖和文件系統之間的適當的映射。

隨後,如果找到前綴,只需使用資產的單獨location以及alias

否則,找出try_files按預期工作的路徑。

1

我發現一個很醜陋的解決方案,直到有人找到一個更好的解決方案,這裏是我做了什麼:

  • 我抄的全部資產庫,並將其複製到nginx的是我的代理服務器。

這是我的新的配置:

location /portal/mysite/ { 

    set $frontRoot /srv/data/apps/mysite-portal-stag/current/web; 
    set $sfApp app.php; 

    root /srv/data/apps/mysite-portal-stag/current/web; 

    rewrite ^/portal/mysite/(.*)$ /$1 break; 
    try_files $uri @sfFront; 

} 
location /portal/mysite/asset { 
    root /tmp/mysite/asset; 
    rewrite ^/portal/mysite/asset/(.*)$ /$1 break; 
} 
location @sfFront { 

    set $frontRootWeb /srv/data/apps/mysite-portal-stag/current/web; 
    root /srv/data/apps/mysite-portal-stag/current/web; 

    fastcgi_pass myAdressWeb:myPort; 
    include fastcgi_params; 
    fastcgi_param SCRIPT_FILENAME $frontRoot/$sfApp; 

    fastcgi_param SCRIPT_NAME /portal/mysite/$sfApp; 

} 

,現在它的工作,所有的JS/CSS和圖片被發現。

如果有人想到一個「更清潔」的答案,他是非常歡迎回答。