1 回答

TA貢獻1848條經驗 獲得超10個贊
我設法解決了這個問題,所以我在下面為有類似問題的人發布我自己的解決方案。
解決方案是在 nginx 配置中使用 'alias' 指令而不使用 'root' 指令(我已經刪除了一些在這里不重要的部分):
upstream phpserver {
server web:9000;
}
server {
listen 443 http2;
ssl on;
server_name app;
ssl_certificate /ssl.crt;
ssl_certificate_key /ssl.key;
location ~ ^/index\.php(/|$) {
alias /app/web;
fastcgi_pass phpserver;
fastcgi_split_path_info ^(.+\.php)(/.*)$;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
internal;
http2_push_preload on;
}
}
現在請求已正確路由到端口 9000 上的 phpserver,并由 php fpm 在那里處理。Php fpm 通過查看“別名”指令知道要執行哪個腳本。
現在的問題是如何提供靜態文件。一種解決方案是也通過 php fpm 為它們提供服務,但根據我在網上閱讀的內容,不推薦這樣做,因為開銷會更大。所以我的解決方案是與 nginx docker 容器共享所有靜態文件,以便 ngnix 可以訪問它們并可以直接為它們提供服務。如果有人對如何在這種情況下提供靜態文件有更好的解決方案,請告訴我。
# Cache Control for Static Files
location ~* \.(jpg|jpeg|gif|png|css|js|ico|xml)$ {
#access_log on;
#log_not_found off;
expires 360d;
}
- 1 回答
- 0 關注
- 175 瀏覽
添加回答
舉報