리눅스환경에서 php프로젝트가 2개로 늘어나는 바람에 이전에 진행했던 nginx, php-fpm간의 연동이 제대로 되지 않았다.
따라서, nginx를 사용하기 위한 설정파일인 nginx.conf파일에서 수정해줘야 했다.
그 과정에서 fastcgi_pass명령어는 뭘 의미하는지, 모른채로 연동했어서 정리하고 넘어가고자 한다.
[출처] : https://battlecook.github.io/2017/12/22/nginx-phpfpm-communication.html
위 그림은 nginx와 php를 사용해 웹 서버를 구축하는 경우의 구조이다.
필자의 우분투에는 여러 php이 있고, 어떤 버전을 연동해야 하는지 의문이였다. 클라이언트에서 API를 호출하면 Nginx의 location에 따라 어떤 방식으로 php-fpm을 호출할지를 설정해줘야 한다.
결론은 nginx의 fastcgi_pass, php-fpm의 listen을 설정해줘야 한다, 위 그림에서 보면 알 수 있듯 nginx와 php-fpm이 연동되어야 한다.
nginx에서는 fastcgi_pass을 수정해줘야하고, php-fpm의 설정파일에서도 수신받는 파일을 적어야 한다. (리눅스에서 소켓은 파일로 취급한다.)
필자의 환경에서 php-fpm의 설정파일 경로는 다음과 같다.
/etc/php/8.1/fpm의 php-fpm.conf파일
에서 위와 같이 적어줘야 한다.
이는 유닉스 소켓 통신을 이용한 방법이다. 유닉스 소켓 통신이란 IPC(Inter-Process Communication)의 일종이다. 프로세스간 데이터를 주고 받기 위해, 프로세스 간 메모리를 공유하는 방식을 이용한다던지, 메세지 큐를 이용한다던지, 소켓을 이용한다던지.. 하는 여러가지 방식들 중에 소켓 방식이다.
이 유닉스 소켓 통신 방식은, 같은 로컬 머신 안에서 사용되는 기법이고, 다른 방법으로 TCP/IP 소켓 방식을 사용해 nginx와 php-fpm을 연결해줄 수도 있다.
TCP/IP 소켓 방식은 같은 로컬 머신뿐만 아니라, 다른 기기에 있다고 하더라도 통신할 수 있다. 네트워크 통신을 하는데 여러 오버헤드(OSI 7계층의 레이어에서 패킷 헤더를 만들고 캡슐화, 비캡슐화.. / localhost를 하더라도 주소만 자기 자신으로 오는것이지 위와 같은 오버헤드가 발생)가 발생한다. TCP/IP 소켓 방식은 우리가 흔히 접했던 fastcgi_pass 127.0.0.1:3000, listen = 127.0.0.1:3000과 같이 작성해준다.
비교하는 좋은 자료가 있어 아래에 첨부한다.
[출처] : https://www.kernelpanic.kr/19
'Dev > Nginx' 카테고리의 다른 글
[Nginx] fastcgi_param 설정과 활용 방안 (0) | 2023.03.12 |
---|