2 回答

TA貢獻1804條經驗 獲得超3個贊
默認生成的配置nginx-proxy
不能完全工作。
VIRTUAL_ROOT
我認為環境變量搞砸了,因為問題的根源是 PHP 通過獲取錯誤的路徑SCRIPT_FILENAME
(這就是為什么你看不到 PHP 輸出)并且沒有try_files
with=404
符號(這就是為什么你得到 200 的所有內容)。
我在 GitHub 中準備了一個工作設置,docker-compose
以證明它可以與SCRIPT_FILENAME
nginx 配置中的現有設置一起使用。
我已經更改test.local
為test.localhost
.
我認為要讓它正常工作,您必須使用 nginx 模板nginx-proxy
,因此生成的模板default.conf
確實可以與 php fpm 一起使用,并且包含缺少的 fastcgi 參數。
另一種不同的方法是將 PHP 和手動配置的 Web 服務器 (nginx) 打包在一個項目中,并在獨立項目中擁有自動反向 nginx 代理。這將花費您運行額外的進程,但可以為您提供更多控制和更輕松的部署。
或者,您可能想看看traefik
哪個與 本質上相同nginx-proxy
。

TA貢獻1859條經驗 獲得超6個贊
我使用 php-fpm 圖像和 nginx 作為 php 站點的主堆棧。話雖如此,我不使用 nginx-proxy docker 鏡像。相反,我在主機上使用普通 nginx,并將端口配置為指向后端 php-fpm docker 映像。
我也不使用 docker-compose 。因為它只是運行單個站點的 docker 容器,所以我不需要它。這是一個 docker run 命令示例:
docker rm -f www.example.com || true
docker run -itd -p 9001:9000 -P \
? ? ? ? --name www.example.com \
? ? ? ? --volume /var/www/html/www.example.com:/var/www/html/www.example.com \
? ? ? ? --link mariadb:database.example.com \
? ? ? ? --restart="always" \
? ? ? ? --hostname="example.com" \
? ? --log-opt max-size=2m \
? ? --log-opt max-file=5 \
? ? ? ? mck7/php-fpm:7.4.x-wordpress
這是一個 nginx 配置示例:
server {
? server_name example.com www.example.com;
? location ~ /.well-known {
? ? allow all;
? }
? location ~ /\.ht {
? ? deny all;
? }
? root /var/www/html/www.example.com/src;
? index index.php;
? location / {
? ? try_files $uri $uri/ /index.php?$args;
? }
? location ~ [^/]\.php(/|$) {
? ? fastcgi_split_path_info ^(.+?\.php)(/.*)$;
? ? if (!-f $document_root$fastcgi_script_name) {
? ? ? return 404;
? ? }
? ? include fastcgi_params;
? ? fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
? ? fastcgi_param PATH_INFO? ? ? ?$fastcgi_path_info;
? ? fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
? ? fastcgi_pass? ?127.0.0.1:9001;
? ? fastcgi_index? index.php;
? }
}
有關此設置的一些事情很關鍵。docker 容器的端口重新映射。在此示例中,我將端口 9001 映射到 9000。另一個“問題”是容器的根必須是主機上的實際位置。我不知道為什么會出現這種情況,但無論出于何種原因,docker 認為它使用的路徑實際上也必須是主機上的路徑。
- 2 回答
- 0 關注
- 153 瀏覽
添加回答
舉報