开发者问题收集

Nginx、PHP-FPM、Docker - 113:主机无法访问

2020-08-13
2553

我很难理解我的错误在哪里。我查看了各种答案并尝试了补救措施,但发现他们的解决方案并没有解决我的问题。我把一切都精简到最基础的部分,看看是否能得到一个基本的 PHP index.php 来呈现它自己。

这是我试图在核心上完成的任务:

我使用 docker-compose 建立了 1 个网络,并将 2 个服务连接到该网络。一个服务是 PHP-FPM,另一个是为 PHP-FPM 服务的 nginx。每次我站起来时,无论我如何配置它,我都只会收到 502 Bad Gateway ,当我检查 nginx 容器日志时,我收到 [error] 29#29: *1 connect() failed (113: Host is unreachable) while connecting to upperleft .

./docker-compose.yml

version: "3.7"

networks:
    app:
        driver: bridge

services:
    php:
        image: php:7.4-fpm
        container_name: php
        volumes:
            - /home/admin/dev/test/php/www.conf:/usr/local/etc/php-fpm.d/www.conf
            - /home/admin/dev/test/src/:/var/www/html
        networks:
            - app

    nginx:
        image: nginx:alpine
        container_name: nginx
        depends_on:
            - php
        ports:
            - "80:80"
            - "443:443"
        volumes:
            - /home/admin/dev/test/src/:/usr/share/nginx/html
            - /home/admin/dev/test/nginx/conf.d/app.conf:/etc/nginx/conf.d/app.conf
        networks:
            - app

./php/www.conf -> /usr/local/etc/php-fpm.d/www.conf

[www]
user = www-data
group = www-data
listen = 0.0.0.0:9000
pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3

./nginx/conf.d/app.conf -> /etc/nginx/conf.d/app.conf

server {
    listen 80;
    server_name localhost;    
    root /usr/share/nginx/html;
    index index.php;
    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }
    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass php:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

./src/index.php -> (php) /var/www/html && (nginx) /usr/share/nginx/html (仅供参考)

<?php
phpinfo();

Docker: Docker 版本 19.03.12,内部版本 48a66213fe Docker-compose: docker-compose 版本 1.25.4,内部版本未知 环境: Linux localhost.localdomain 5.7.14-200.fc32.x86_64 #1 SMP Fri Aug 7 23:16:37 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux (Fedora 32 Workstation)

我相信我只是对 PHP-FPM 存在重大误解,但也许还有其他原因。

更新期间故障排除 我突然想到,我的整体环境(即 Fedora 32)搞砸了。Fedora 32 不支持 Docker 的开箱即用(必须更改 /etc/yum.repos.d 中的 repo 设置才能使其工作 - 必须使用 Fedora 31 的 repo)。所以我决定启动一个 Ubuntu 20.0.4 VM 并在那里进行测试。现在 PHP-FPM 和 Nginx 正在通信;我从 PHP-FPM 容器中获得了响应!但是,现在即使只使用基本脚本,我也会收到 404 错误,但这更接近我需要的位置……现在要修复 404。

确切的错误是: [error] 30#30:*1 FastCGI 在 stderr 中发送:“主脚本未知”,同时从上游读取响应标头

2个回答

最终更新(答案) 对于遇到此问题的任何人来说,截至今天,Docker 无法与 Fedora 32 配合使用(某些部分可以)。至少在我有时间进行故障排除/修补的情况下无法使用。这是一个全新的 Fedora 32,没有安装以前的 docker/docker-compose 或任何东西。

我启动了全新的 Fedora 31 和 Ubuntu 20.0.4,只是为了验证我的“结论”。两者开箱即用,无需额外调整。

patri0t
2020-08-14

您能检查一下您的 php-fpm 服务是否正在运行吗? 问题可能是 php-fpm 服务未运行,因此 nginx 无法连接到它

SKos
2020-08-14