AWS ECS: 동일한 호스트에 있는 컨테이너 Nginx와 PHP-FPM 간의 네트워킹

AWS ECS: 동일한 호스트에 있는 컨테이너 Nginx와 PHP-FPM 간의 네트워킹

그래서 저는 지난 2주 동안 ECS에 대해 배우고 nginx 컨테이너와 다른 컨테이너의 PHP 앱을 사용하여 매우 기본적인 작업을 설정하려고 노력했습니다. 매우 가까운 것 같지만 이제 nginx에서 다음 연결 거부 오류가 발생합니다. **[error] 29#29: *9 connect() failed (111: Connection refused) while connecting to upstream, client: 172.31.16.34, server: , request: "GET / HTTP/1.1", upstream: "fastcgi://172.17.0.4:8000", host: "##########:48152"**

CloudFormation 템플릿의 작업 정의는 다음과 같습니다.

     ContainerDefinitions:
        - Name: nginx
          Cpu: 10
          Essential: true
          Image: ###################
          Memory: 128
          MountPoints:
            - ContainerPath: /var/www
              SourceVolume: my-vol
          PortMappings:
            - ContainerPort: 80
          Links:
            - app
        - Name: app
          Cpu: 10
          Essential: true
          Image: #############
          Memory: 128
          MountPoints:
            - ContainerPath: /var/www
              SourceVolume: my-vol
          PortMappings:
            - ContainerPort: 8000
      Volumes:
        - Name: my-vol
          DockerVolumeConfiguration:
            Scope: task
            Driver: local

내 nginx Dockerfile:

FROM nginx:alpine
RUN apk update && apk add bash
COPY ./default.conf /etc/nginx/conf.d/default.conf

구성 파일:

server {
    listen 80;
    listen 443;
    index index.php index.html;
    error_log  /var/log/nginx/error.log;
    access_log /var/log/nginx/access.log;
    root /var/www/public;
    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass app:8000;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
    }
    location / {
        try_files $uri $uri/ /index.php?$query_string;
        gzip_static on;
    }
}

그리고 내 앱 Dockerfile은 다음과 같습니다.

FROM php:8.2-fpm
...
EXPOSE 8000

그렇다면 브리지 모드를 사용하는 이유는 무엇입니까? 제가 찾을 수 있는 모든 예는 브리지 모드를 사용하는 것이었고 이것이 실제로 로컬에서 작업하게 된 Docker에서 네트워크를 사용하는 것과 비슷하다는 것을 알고 있었기 때문에 이것이 가장 간단한 솔루션이라고 생각했습니다. 또한 그렇습니다. Links 사용이 더 이상 사용되지 않는다는 것을 알고 있지만 권장되는 대안을 찾을 수 없습니다.

따라서 nginx가 앱 호스트를 컨테이너의 IP 주소로 확인할 수 있다는 것을 알 수 있으므로 내 앱 로그에는 fpm is running및 가 표시되지만 문제는 PHP-FPM 측에 있을 수 있다고 추측됩니다 ready to handle connections. 어쨌든 나는 결과를 완전히 이해하지 못하는 변경 작업을 하고 싶지 않습니다. 따라서 누군가 무슨 일이 일어나고 있는지 설명할 수 있다면 좋을 것입니다.

관련 정보