본문 바로가기

사용기/리뷰/Docker

Docker로 Nginx + PHP-FPM 연결

도커 설치나 이미지 준비하는것은 웹에 다른 자료도 많으니 일단 생략하고...

무작정 설치하려 했다가 해맸던 부분만 기록 차원에서 적어두려 합니다.

우선 nginx:latest와 php:fpm 이미지를 docker pull 명령을 통해 준비하고

하기와 같이 docker-compose.yml을 작성하고 

 

version: “3.7”
services: 
   php:
       image: php:fpm
       restart: unless-stopped
       volumes:
          - ./var_www_html:/var/www/html
   nginx:
       image: nginx:latest
       restart: unless-stopped
       ports:
          - "80:80"
          - "443:443"
       volumes:
          - ./nginx:/etc/nginx
          - ./var_www_html:/var/www/html

nginx의 설정파일이 있는 폴더를

그대로 ./nginx 폴더로 복사하여 실행하게 하였고

 

./nginx/conf.d/default.conf 만 고쳐서 php와 연동되게 하려 하였으나

 아무리 이것저것 고쳐봐도 PHP 파일 소스 내용이 그대로 보이거나 (phpinfo.php 가 그대로 출력)

phpinfo.php파일이 그대로 다운로드 되는 현상이 나타났습니다.

 

무엇이 문제일까 이것저것 뒤져보며 왜 안될까 고민도 하고, 좌절도 하던 도중

결국 내가 뭔가를 잘못했기 때문에 안되는 것이다...하던 찰나..

 

결국 아래와 같이 ./nginx/conf.d/default.conf 의 php 설정이 문제였습니다.

 

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000

    location ~ \.php$ {
        root           /var/www/html;(여기는 원래 다른 경로이나, document_root 변경했었음)
        fastcgi_pass   php:9000;  <--------- 이부분이 문제였습니다
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;(여기도 변경했었음)
        include        fastcgi_params;
    }

 

위에 화살표 쳐진 부분의 원래 설정값은 fastcgi_pass   172.0.0.1 :9000; 로 localhost의 9000번 포트를 통해서

php fastcgi를 처리하게 하는데, 저는 도커로 nginx와 php:fpm을 연결하여 실행하려고 하였기 때문에

 

nginx의 설정값을 172.0.0.1:9000 대신 docker-compose.yml에서 설정된 php:fpm의 컨테이너 이름인 php를 쓰고 9000번 

포트를 가리키는  php:9000 을 써줘야 하는 것이었죠.

 

참 간단한데, 무작정 하려고 덤비면 답이 잘 안보이더라구요.

 

해결하려고 한참 찾아헤멨으나, 일단 해결 내용만 올려두려 합니다~2만