No se puede obtener index.php del contenedor Nginx al contenedor PHP en AWS y Docker

No se puede obtener index.php del contenedor Nginx al contenedor PHP en AWS y Docker

Instalé Docker en una instancia AWS EC2 e implementé contenedores Nginx y PHP-FPM.

[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

Enhttp://ec2-23-22-195-223.compute-1.amazonaws.com/index.html, Se muestra "Bienvenido a Nginx". Cuando voy ahttp://ec2-23-22-195-223.compute-1.amazonaws.com/index.php, index.php se descarga en lugar de mostrarse en el navegador web y el navegador muestra502 Puerta de enlace no válida.

/etc/nginx/conf.d/default.conf en el contenedor Nginx tiene 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 es la dirección IP vinculada a la interfaz eth0 de la instancia EC2.

[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

El contenedor PHP-FPM escucha en el puerto 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

Reinicio el contenedor PHP y verifico que esté funcionando.

[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

Usando OpenSSL, puedo establecer una conexión desde el contenedor Nginx al contenedor PHP-FPM usando 172.31.29.217:9000.

[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)
---

O usando curl desde el contenedor Nginx, puedo conectarme a 172.31.29.217:9000.

[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

Cuando voy ahttp://ec2-23-22-195-223.compute-1.amazonaws.com/index.php, no aparece ningún evento en los registros del contenedor php, casi como si sugiriera que la solicitud de index.php no se reenvía desde el contenedor Nginx al contenedor PHP.

[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

También cabe destacar que cuando configuro un servidor Docker similar en mi laboratorio en casa, no tengo este problema. La página index.php se carga perfectamente en mi laboratorio en casa.

No estoy seguro de cuál será mi próximo paso.

Respuesta1

Su contenedor PHP-FPMDocker phpestá configurado para escuchar, 127.0.0.1por lo que no podrá responder a solicitudes externas fuera de su contenedor. O tiene otro archivo de configuración además /usr/local/etc/php-fpm.d/www.confdel phpcontenedor o algún otro programa está escuchando el puerto 9000en el sistema (por ejemplo, php-fpminstalado en el propio sistema host). Puedes comprobar el puerto de escucha 9000con ss -nlp |grep :9000. También verifique las asignaciones de puertos de la ventana acoplable.

Además, openssllas curlconexiones al puerto 9000son irrelevantes. El puerto 9000utiliza FastCGIprotocolo, no TLSo HTTP. Para probar FastCGIla conexión puedes usarcgi-fcgidominio.

información relacionada