개발 꿀팁/PHP

nginx와 php-fpm 통신의 두 가지 방식

Jammie 2022. 7. 6. 16:20
반응형

서술하다
리눅스에서는 nginx 서버와 php-fpm을 tcp 소켓과 유닉스 소켓 두 가지 방식으로 구현할 수 있다.

유닉스 소켓은 같은 운영체제에서 두 개 이상의 프로세스가 데이터 통신을 할 수 있는 단말기다.이 방식으로는 nginx 프로필에 다시 넣어야 합니다php-fpm의 pid 파일 위치를 작성하면 tcp 소켓보다 효율이 높다.

TCP 소켓의 장점은 서버를 넘나들 수 있고, nginx와 php-fpm이 같은 기기에 있지 않을 때는 이런 방식을 쓸 수밖에 없다는 것이다.

윈도 시스템은 TCP 소켓의 통신 방식만 사용할 수 있다

설정 방법
TCP 소켓
TCP 소켓 통신 방식, 필요nginx 프로필에 php-fpm이 실행되는 ip 주소와 포트 번호를 기입해야 한다.

location ~ \.php$ {
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;;
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
}

유닉스 소켓
유닉스 소켓통편지 방식은 nginx 프로필에 php-fpm이 실행되는 pid 파일 주소를 기입해야 한다

location ~ \.php$ {
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;;
    fastcgi_pass unix:/var/run/php5-fpm.sock;
    fastcgi_index index.php;
}

php-fpm의 실행 포트 번호와 socket 파일의 주소는 모두 php-fpm.conf에서 구성되어 있다.
php-fpm.conf 파일은 php 설치 파일의 /etc 디렉토리 아래에 있습니다.
예를 들어 php를 /opt/php 디렉토리에 설치한다면 /opt/php/php-fpm.conf이어야 합니다.

; The address on which to accept FastCGI requests.
; Valid syntaxes are:
;   'ip.add.re.ss:port'    - to listen on a TCP socket to a specific IPv4 address on
;                            a specific port;
;   '[ip:6:addr:ess]:port' - to listen on a TCP socket to a specific IPv6 address on
;                            a specific port;
;   'port'                 - to listen on a TCP socket to all IPv4 addresses on a
;                            specific port;
;   '[::]:port'            - to listen on a TCP socket to all addresses
;                            (IPv6 and IPv4-mapped) on a specific port;
;   '/path/to/unix/socket' - to listen on a unix socket.
; Note: This value is mandatory.
listen = 127.0.0.1:9000
listen = /var/run/php-fpm.sock

주석을 통해 php-fpm의 listen 명령은 FastCGI 요청을 5가지 방식으로 처리할 수 있음을 알 수 있다.
1. ipv4: 포트 번호
2. ipv6: 포트 번호
3. port는 0.0.0.0:port에 해당하며, 기본 ipv4에 해당하는 포트 번호
4. [::]:port, ipv4 및 ipv6 포함
5. 유닉스 소켓 파일

unix socket 파일을 직접 설정하면 access deny 문제가 발생합니다. socket 파일로 인해본질적으로는 여전히 하나의 문서로서 존재한다권한 제어 문제, 기본값은 root 사용자가 생성하므로 nginx 프로세스에 대한 권한이 없습니다. 다음 명령을 구성해야 합니다

; Set permissions for unix socket, if one is used. In Linux, read/write
; permissions must be set in order to allow connections from a web server. Many
; BSD-derived systems allow connections regardless of permissions.
; Default Values: user and group are set as the running user
;                 mode is set to 0660
listen.owner = www
listen.group = www 
listen.mode = 0660

nginx와 php-fpm을 모두 wwk 사용자로 설정할 수 있으므로 권한 문제가 없으며, 물론 다른 사용자를 만든 후 같은 그룹에 가입할 수도 있으므로 권한을 쉽게 할당할 수 있습니다

반응형