시나리오 설정
하나의 서버에 두 개의 독립적인 프로젝트(웹사이트) site1과 site2가 있다고 가정해 봅시다. 서버에서는 Nginx를 HTTP 서버로 사용하고 PHP로 동적 콘텐츠를 처리합니다.
Nginx 설정
Nginx의 기본 설정 파일은 /etc/nginx/nginx.conf에 위치하며, include 지시어를 사용하여 여러 특정 설정을 가져와 각 프로젝트를 관리할 수 있습니다. include의 기본 경로는 /etc/nginx/conf.d입니다. 각 프로젝트(웹사이트)에 대한 설정 파일을 별도로 만들면 설정 파일의 범위를 명확하게 분리하여 서로 영향을 주지 않게 됩니다. site1에 대해 site1-www.conf라는 설정 파일을 만들 수 있습니다. 간단한 설정 파일은 다음과 같습니다:
server {
# one 캐시 사용
#proxy_cache one;
#proxy_cache_valid any 10m;
listen 80;
server_name site1.example.com;
# upload_max_file_size 2M;
#client_max_body_size 10M;
location / {
root /var/www/site1;
index index.html;
# try_files $uri $uri/ /index.php?$args;
}
# rewrite /admin$ $scheme://$host$uri/ permanent;
# error_page 401 402 403 404 500 502 503 504 /oops.html;
# location = /oops.html {
# root ;
# }
location ~\.php$ {
root /var/www/site1;
fastcgi_pass unix:/run/php-fpm/site1.sock;
#fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
Nginx를 설치하면 conf.d 경로에 기본적으로 php-fpm.conf 설정 파일이 있으며, 이는 Nginx와 PHP의 통신 방식을 구성하는 데 사용됩니다. 방금 fastcgi_pass는 cgi 전달 방식을 지정하며, ip:port 또는 sock으로 전달할 수 있습니다. sock을 예로 들어 conf.d 경로에 sock에 대한 별도 설정을 만들 수 있습니다. 예를 들어 site1-php.conf는 다음과 같습니다:
upstream site1 {
# ip_hash 알고리즘은 IP 결과에 따라 요청을 고정된 백엔드 서비스로 할당합니다. weight, backup과 동시에 사용할 수 없습니다
#ip_hash;
server unix:/run/php-fpm/site1.sock;
server 192.168.1.101:8000;
server 192.168.1.102:9000 weight=1;
}
주요 정보는 다음과 같습니다:
- name: 서버 이름을 식별하는 데 사용됩니다. 이 서버는 특정 웹사이트, 프로젝트를 의미하므로 여러 upstream이 존재할 경우 name은 반복되지 않아야 합니다
- server: sock 또는 주소일 수 있으며, 접근 방식을 나타냅니다. upstream은 종종 로드 밸런싱에 사용되므로 하나의 upstream에 여러 server가 포함될 수 있습니다
이제 conf.d에서 site1-www.conf와 site1-php.conf를 사용하여 site1 사이트에 대한 독립적인 제어를 구현했습니다. site2에 대해 동일한 두 개의 설정 파일을 추가할 수 있습니다. 설정에서 모든 **site1**을 **site2**로 변경하고 중복되지 않도록 주의하세요. 사이트 설정 파일이 완성되면 주 설정 파일 /etc/nginx/nginx.conf가 이들을 올바르게 사용하는지 확인해야 합니다. 파일에 include /etc/nginx/conf.d/*.conf; 문장이 있는지 확인하세요.
PHP-FPM 설정
Linux 환경에서는 php-fpm이 작동하며, 기본 설정 파일은 /etc/php-fpm.conf에 있습니다. 여기에는 include에 다른 설정 파일의 경로가 기록되어 있으며, 기본값은 /etc/php-fpm.d/*.conf입니다. 이 디렉터리에는 웹 애플리케이션에 해당하는 여러 설정 파일을 만들 수 있으며, 각 설정 파일의 주요 정보는 다음과 같습니다:
- [site1]: 애플리케이션 풀 이름으로, IIS의 프로세스 풀과 유사하며 프로젝트로 명명할 수 있습니다. 이렇게 하면 로컬(현재 서버)에 여러 웹 애플리케이션이 있는 경우 각각 관리하고 식별할 수 있습니다
- user= 로컬 시스템 사용자 이름을 지정합니다, group= 로컬 시스템 사용자 속 그룹 이름을 지정합니다
- listen=/run/php-fpm/*.sock 현재 설정이 수신할 방식을 나타내며, sock 방식일 수도 있고 127.0.0.1:9002와 같은 IP 방식일 수도 있습니다. 웹 서버와 일치해야 합니다(Nginx의 fastcgi_pass와)
site1과 site2에 대해 각각 다른 설정 파일을 제공해야 합니다. php-fpm.d의 기본 설정 파일을 예로 들어 방금 설명한 대로 site1과 site2에 해당하는 두 개의 설정 파일을 만들 수 있습니다:
[site1]
xxx
user = nginx
group = nginx
listen=/run/php-fpm/site1.sock
xxx
[site2]
xxx
user = nginx
group = nginx
listen=/run/php-fpm/site2.sock
xxx
이제 Nginx와 php-fpm 모두에 대해 site1과 site2에 대한 독립적인 설정을 구성했습니다.
접근 테스트
Nginx 설정과 php-fpm 관련 설정이 올바르게 찾아서 연결되는 것이 설정의 핵심입니다. nginx.conf는 conf.d의 모든 하위 설정을 포함하며, /etc/php-fpm.ini는 php-fpm.d의 모든 하위 설정을 포함합니다. 모든 하위 설정은 site1.sock, site2.sock(또는 ip:port) 방식으로 통신합니다. 이것이 Nginx와 PHP를 함께 사용하는 기본 경로입니다. 설정이 완료되면 설정이 올바른지 테스트하고 서비스를 다시 시작하여 결과를 확인합니다:
nginx -t
systemctl reload php-fpm
systemctl reload nginx