为了账号安全,请及时绑定邮箱和手机立即绑定

如何让 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 关注
  • 114 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信