/etc/nginx/*
아래에 설정파일이 위치해있고, 로그파일은 /var/log/nginx/*
에 위치worker_processes 1;
events {
worker_connections 768;
}
http {
upstream wordpress_server {
server wordpress:9000;
}
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name yejsong.42.fr;
root /var/www/wordpress/;
autoindex off;
index index.php index.html index.htm;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_certificate /etc/ssl/certs/yejsong.crt;
ssl_certificate_key /etc/ssl/private/yejsong.key;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass wordpress_server;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
}
}
}
worker_process
: 설정키를 나타내며 그 뒤에 한개 이상의 값을 붙일 수 있다. 엔진엑스가 단일 작업자 프로세스로만 작동됨을 의미. (몇개의 워커 프로세스를 생성할 것인지 지정하는 지시어. 1이면 모든 요청을 하나의 프로세스로 실행하겠다는 뜻. CPU 멀티코어 시스템에서 1이면 하나의 코어만으로 요청을 처리하는 셈이다. auto로 놓는 경우가 많다.)worker_connections
: 하나의 프로세스가 처리할 수 있는 커넥션의 수최대 접속자 수 = worker_processes X worker_connections
include
지시어 : 특정 파일을 포함하는 기능을 수행한다. 지시어가 있는 바로 그 위치에 해당 파일 내용이 삽입된다. 파일명 글로빙을 지원(= 파일명에 와일드카드 문자 *
사용 가능)Upstream
- origin 서버라고도 한다. (= 여러대의 컴퓨터가 순차적으로 어떤 일을 처리할 때 어떤 서비스를 받는 서버를 의미.)
위의 그림에서 업스트림 서버는 PHP-FPM이 설치된 서버이고, 이 맥락에서 NGINX는 Downstream 서버라고 할 수 있다.
Upstream Module
- 업스트림 모듈은 NGINX에 내장된 모듈로 엔진엑스로 부하분산, 속도 개선과 같은 역할을 할 수 있게 한다. 아래 그림은 엔진엑스의 업스트림 모듈을 이용해서 한대의 웹서버에 여러대의 에플리케이션 서버를 붙이는 방법을 보여준다.
- 업스트림을 설정하기 위해서는 Upstream 블록을 이용.
upstream 이름 {
server host_주소:포트 [옵션];
.....
}
listen
: 이 웹사이트가 바라보는 포트를 의미.server_name
: 클라이언트가 접속하는 서버 (주로 도메인). 이것과 실제 들어온 request의 header에 명시된 값이 일치하는지 확인해서 분기함.root
: 웹사이트가 바라보는 root 폴더의 경로를 의미location /internal {
return 200; ## http status 코드를 임의로 넘길 수 있다.
}
fastcgi_split_path_info ^(.+\.php)(.*) $;
이것은 두개의 변수에 영향을 준다.
1. $fastcgi_script_name: 실제 실행되는 스크립트의 파일명
2. $fastcgi_path_info: 스크립트명 다음에 오는 URL부분
-만약 NGINX와 PHP-FPM이 서로 다른 머신에 설치되었다면 TCP Connection의 값을 지정해야 한다. 만약 PHP-FPM이 192.168.125.142에 설치되어 있다면 NGINX 측의 설정 fastcgi_pass 192.168.125.142:9000;
listen = 192.168.125.142:9000
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param은 FastCGI의 규칙에 따라서 에플리케이션(php-fpm)에게 전달할 데이터를 지정한다.
SCRIPT_FILENAME
은 CGI의 규격 중 SCRIPT_NAME에 해당하는 값인데, 이 값으로 전달된 $document_root는 루트 디렉토리 즉 /usr/share/nginx/html 을 의미, $fastcgi_script_name은 파일의 이름을 의미. 이 두개의 값이 조합된 결과가 PHP-FPM으로 전달되는 것이다. PHP-FPM은 전달된 값에 해당되는 파일을 읽어서 실행.