亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何讓 PHP-FPM 與帶有 FastCGI 的 nginx-proxy 配合使用?

如何讓 PHP-FPM 與帶有 FastCGI 的 nginx-proxy 配合使用?

PHP
烙印99 2023-08-06 14:57:22
我正在嘗試讓nginx?-?proxy通過.?不幸的是,我似乎無法做到這一點。我確信問題只是一些我不知道的簡單問題。php-fpmfastcgi我已盡我所能遵循 nginx-proxy 的說明,并將其歸結為一種非常簡單的方法來重新創建問題。這是我的docker-compose.yml文件:version: "3"services:? proxy:? ? image: jwilder/nginx-proxy? ? ports:? ? ? - "80:80"? ? volumes:? ? ? - /var/run/docker.sock:/tmp/docker.sock:ro? ? environment:? ? ? - DEFAULT_HOST=test.local? fpm:? ? image: php:fpm? ? environment:? ? ? - VIRTUAL_HOST=test.local? ? ? - VIRTUAL_PROTO=fastcgi然后我通過運行以下命令放入一個簡單的index.php文件:docker container exec -it web_fpm_1 /bin/bash -c 'echo "<?php phpinfo(); ?>" > /var/www/html/index.php'(它放在web_前面是因為該項目位于名為 的目錄中web/。)我還修改了我的hosts文件以指向test.local,127.0.0.1以便我可以測試它。但是,每次嘗試瀏覽都會test.local導致空白頁。web_proxy_1據我所知,容器的日志沒有表明任何異常情況:? docker container logs web_proxy_1WARNING: /etc/nginx/dhparam/dhparam.pem was not found. A pre-generated dhparam.pem will be used for now while a new oneis being generated in the background.? Once the new dhparam.pem is in place, nginx will be reloaded.forego? ? ?| starting dockergen.1 on port 5000forego? ? ?| starting nginx.1 on port 5100dockergen.1 | 2020/07/20 19:24:54 Generated '/etc/nginx/conf.d/default.conf' from 2 containersdockergen.1 | 2020/07/20 19:24:54 Watching docker eventsdockergen.1 | 2020/07/20 19:24:54 Contents of /etc/nginx/conf.d/default.conf did not change. Skipping notification 'nginx -s reload'nginx.1? ? | test.local 172.18.0.1 - - [20/Jul/2020:19:25:12 +0000] "GET / HTTP/1.1" 200 5 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36"容器的日志web_fpm_1顯示,除了 200 響應之外,沒有發送任何內容:? docker container logs web_fpm_1[20-Jul-2020 19:24:54] NOTICE: fpm is running, pid 1[20-Jul-2020 19:24:54] NOTICE: ready to handle connections172.18.0.3 -? 20/Jul/2020:19:25:12 +0000 "- " 200172.18.0.3 -? 20/Jul/2020:19:25:13 +0000 "- " 200我究竟做錯了什么?
查看完整描述

2 回答

?
狐的傳說

TA貢獻1804條經驗 獲得超3個贊

默認生成的配置nginx-proxy不能完全工作。

VIRTUAL_ROOT我認為環境變量搞砸了,因為問題的根源是 PHP 通過獲取錯誤的路徑SCRIPT_FILENAME(這就是為什么你看不到 PHP 輸出)并且沒有try_fileswith=404符號(這就是為什么你得到 200 的所有內容)。

我在 GitHub 中準備了一個工作設置,docker-compose以證明它可以與SCRIPT_FILENAMEnginx 配置中的現有設置一起使用。

我已經更改test.localtest.localhost.

我認為要讓它正常工作,您必須使用 nginx 模板nginx-proxy,因此生成的模板default.conf確實可以與 php fpm 一起使用,并且包含缺少的 fastcgi 參數。

另一種不同的方法是將 PHP 和手動配置的 Web 服務器 (nginx) 打包在一個項目中,并在獨立項目中擁有自動反向 nginx 代理。這將花費您運行額外的進程,但可以為您提供更多控制和更輕松的部署。

或者,您可能想看看traefik哪個與 本質上相同nginx-proxy。


查看完整回答
反對 回復 2023-08-06
?
BIG陽

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 認為它使用的路徑實際上也必須是主機上的路徑。


查看完整回答
反對 回復 2023-08-06
  • 2 回答
  • 0 關注
  • 143 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號