본문 바로가기
시행착오/laravel

[laravel + php-fpm + nginx + docker] 3. 절망.

by 성동원 2024. 3. 5.

2024.03.05 - [시행착오] - [laravel + php-fpm + nginx + docker] 2. 재앙 시작

 

[laravel + php-fpm + nginx + docker] 2. 재앙 시작

2024.03.05 - [시행착오] - [laravel + php-fpm + nginx + docker] 1. 서버 배포. [laravel + php-fpm + nginx + docker] 1. 서버 배포. 나는 laravel로 API 서버를 운영할 계획이다. 내가 API 서버로 구축을 하면서 사용하는 버전

dongwoning.tistory.com

 

 

여기서부터 나는 엄청나게 다양한 시도를 셀수 없이 했기 때문에

어떻게 이 문제를 해결했는지에 대한 순서를 정리 하기가 어렵다.

 

그래서 정리 없이 작성이 될 수 도 있다.

 

 

1. 방화벽.

 

내가 지금 현재 운영하고 있는 서버는. 공유기로 인해 여러대가 물려있다.

다시말해. 하나의 ip 주소로 공유기를 통해 2대 이상을 운영하고 있다는 소리다.

 

그래서 나는 포트포워딩을 진행 해야 했다.

(ip 한대에 직접 연결한 서버라면 굳이 안해도 된다.)

 

내가 운영하는 서버를 A로 칭하고. A에게 필요한 port들을 정리해서 포워딩 진행했다.

※ 포트포워딩은 공유기 설정화면에서 진행한다.

 

  • nginx를 위한 웹서버 port : 8080
  • laravel API를 위한 port : 8001

2번째 laravel API에 대한 8001 포트포워딩도 처음에 진행을 했었다. 근데 지금 이 글을 작성할 때, 지워봤는데 필요없는 설정이였다.

 

당시 생각으로는 laravel 서버가 가동되고, 8001 포트로 열었으니 8001포트도 열려있어야 된다 생각을 했다.

근데 웹서버만 열려있으면 되는 것 같다.

 

 

공유기 방화벽을 진행 하였고, 내부 방화벽도 설정 해줬다.

 

sudo firewall-cmd --permanent --zone=public --add-port=8080/tcp
sudo firewall-cmd --reload

 

그리고 나서 nginx가 외부로부터 접속이 가능한지 테스트 진행 해봤는데.

 

 

얼추 이런 게 나오면 작동은 됐다라고 판단 하면 될라나...

 

아무튼 포트포워딩을 진행 했다.

 

 

근데 자꾸 이런 에러가 나왔다.

  • 127.0.0.1:34812 Invalid request (Malformed HTTP request).
  •  upstream prematurely closed connection while reading response header from upstream,

 

 

구글링에도 잘 없고 미쳤었다. 이때. 

 

아무쪼록 결과는 php-fpm이 필요했었던 것이었다.

 

그래서 ngnix에 php-fpm에 대한 설정을 해야 했다.

 

nginx의 설정파일 위치에서 다음과 같이 conf 파일을 만들어 주었다.

 

※ 각 서버마다 또 설치마다 경로가 다를 수 있으니. 잘 찾아보시길.

 

pwd - /etc/nginx/conf.d

vi /etc/nginx/conf.d/theme-back.conf

 

내 프로젝트 이름이 theme-back 이기 때문에 theme-back.conf로 지정해줬다.

 

server {
    listen 8080 default_server;                    # 내 nginx 서버 port는 8080 이므로 8080으로 설정.
    server_name _;

    root /home/fiq/www/theme-back/theme-back/public;      # 나의 laravel 디렉토리 위치 마지막에 /public을 해야 됨.
    index index.php index.html index.htm;

    location / {
        try_files $uri $uri/ /index.php$is_args$args;
        send_timeout 600;
    }

    location /_health {
        return 200 'OK';
    }

    location ~ \.php$ {
        fastcgi_pass unix:/var/run/php-fpm.sock;          # 이부분이 힘듬. php-fpm.sock을 찾아야한다.
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
        fastcgi_param PATH_INFO $fastcgi_path_info;
        include fastcgi_params;

        # 504 Gateway Time-out
        fastcgi_read_timeout 300;

        # performance boosts for PHP
        sendfile on;
        tcp_nopush off;
        keepalive_requests 0;

        # proxy buffers - no 502 errors!
        # proxy_buffer_size               128k;
        # proxy_buffers                   4 256k;
        # proxy_busy_buffers_size         256k;

        # fastcgi buffers - no 502 errors!
        fastcgi_buffering on;
        fastcgi_buffer_size 16k;
        fastcgi_buffers 16 16k;
    }

    error_log /var/log/nginx/api_error.log;
    access_log /var/log/nginx/api_access.log;
}

 

 

위 처럼 진행을 해서 nginx와 php-fpm 를 연결 해줘야 한다.

 

다음은 php-fpm.sock을 찾아보자.