index.php kann nicht vom Nginx-Container zum PHP-Container auf AWS und Docker übertragen werden

index.php kann nicht vom Nginx-Container zum PHP-Container auf AWS und Docker übertragen werden

Ich habe Docker auf einer AWS EC2-Instanz installiert und Nginx- und PHP-FPM-Container bereitgestellt.

[ec2-user@ip-172-31-80-56 ~]$ sudo docker container ls
CONTAINER ID   IMAGE                           COMMAND                  CREATED       STATUS       
PORTS                                                                            NAMES

e8cb988f47ff   jeremycanfield/php:latest       "docker-php-entrypoi…"   12 days ago   Up 12 
days   0.0.0.0:9000->9000/tcp                                                           php

8ac5a82f84f2   jeremycanfield/nginx:latest     "/docker-entrypoint.…"   2 weeks ago   Up 2 
weeks   0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp, 0.0.0.0:18080-18085->18080-18085/tcp   nginx

Beihttp://ec2-23-22-195-223.compute-1.amazonaws.com/index.html, wird "Willkommen bei Nginx" angezeigt. Wenn ich gehe zuhttp://ec2-23-22-195-223.compute-1.amazonaws.com/index.php, index.php wird heruntergeladen, anstatt im Webbrowser angezeigt zu werden, und der Browser zeigt502 Bad Gateway.

/etc/nginx/conf.d/default.conf im Nginx-Container hat fastcgi_pass 172.31.29.217:9000.

server {
    server_name         localhost;
    index               index.php;
    listen              80;
    root                /var/www/www;

    location ~ \.php$ {
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_pass 172.31.29.217:9000;
        include fastcgi_params;
    }
}

172.31.29.217 ist die an die eth0-Schnittstelle der EC2-Instanz gebundene IP-Adresse.

[ec2-user@ip-172-31-29-217 ~]$ ip a
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9001 qdisc pfifo_fast state UP group default 
qlen 1000
    link/ether 0a:4a:bb:2e:e2:41 brd ff:ff:ff:ff:ff:ff
    inet 172.31.29.217/20 brd 172.31.31.255 scope global dynamic eth0
       valid_lft 3207sec preferred_lft 3207sec
    inet6 fe80::84a:bbff:fe2e:e241/64 scope link
       valid_lft forever preferred_lft forever

Der PHP-FPM-Container lauscht auf Port 9000.

[ec2-user@ip-172-31-29-217 ~]$ sudo docker exec php grep ^listen /usr/local/etc/php-fpm.d/www.conf
listen = 127.0.0.1:9000

Ich starte den PHP-Container neu und überprüfe, ob er aktiv ist.

[ec2-user@ip-172-31-29-217 ~]$ sudo docker restart php
[ec2-user@ip-172-31-29-217 ~]$ sudo docker logs php
[09-Dec-2022 22:08:10] NOTICE: fpm is running, pid 1
[09-Dec-2022 22:08:10] NOTICE: ready to handle connections

Mit OpenSSL kann ich über 172.31.29.217:9000 eine Verbindung vom Nginx-Container zum PHP-FPM-Container herstellen.

[ec2-user@ip-172-31-29-217 ~]$ sudo docker exec nginx openssl s_client -connect 172.31.29.217:9000
write:errno=0
CONNECTED(00000003)
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 0 bytes and written 283 bytes
Verification: OK
---
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
Early data was not sent
Verify return code: 0 (ok)
---

Oder mithilfe von curl aus dem Nginx-Container kann ich eine Verbindung zu 172.31.29.217:9000 herstellen.

[ec2-user@ip-172-31-29-217 ~]$ sudo docker exec nginx curl --silent 172.31.29.217:9000 -v
*   Trying 172.31.29.217:9000...
* Connected to 172.31.29.217 (172.31.29.217) port 9000 (#0)
> GET / HTTP/1.1
> Host: 172.31.29.217:9000
> User-Agent: curl/7.74.0
> Accept: */*
>
* Empty reply from server
* Connection #0 to host 172.31.29.217 left intact

Wenn ich gehehttp://ec2-23-22-195-223.compute-1.amazonaws.com/index.php, werden in den Protokollen des PHP-Containers keine Ereignisse angezeigt, fast so, als ob die Anforderung für index.php nicht vom Nginx-Container an den PHP-Container weitergeleitet wird.

[ec2-user@ip-172-31-29-217 ~]$ sudo docker logs php --tail=2
[09-Dec-2022 22:08:10] NOTICE: fpm is running, pid 1
[09-Dec-2022 22:08:10] NOTICE: ready to handle connections

Bemerkenswert ist auch, dass dieses Problem nicht auftritt, wenn ich einen ähnlichen Docker-Server in meinem Labor zu Hause einrichte. Die Seite index.php wird in meinem Labor zu Hause problemlos geladen.

Ich bin nicht sicher, was mein nächster Schritt ist.

Antwort1

Ihr PHP-FPMDocker php-Container ist so konfiguriert, dass er auf lauscht, 127.0.0.1sodass er nicht auf externe Anfragen außerhalb seines Containers reagieren kann. Entweder haben Sie neben /usr/local/etc/php-fpm.d/www.confdem phpContainer noch eine andere Konfigurationsdatei oder ein anderes Programm lauscht auf dem Port 9000im System (z. B. php-fpmauf dem Hostsystem selbst installiert). Sie können den Abhörport 9000mit überprüfen ss -nlp |grep :9000. Überprüfen Sie auch Ihre Docker-Portzuordnungen.

Außerdem sind opensslund curlVerbindungen zum Port 9000irrelevant. Der Port 9000verwendet FastCGIdas Protokoll, nicht TLSoder HTTP. Um FastCGIdie Verbindung zu testen, können Sie verwendencgi-fcgiBefehl.

verwandte Informationen