Nginx.conf

songtofu·2022년 5월 10일
0

Docker

목록 보기
6/6
post-custom-banner

nginx.conf

  • 어플리케이션의 기본 환경 설정 아래 명령어를 이용해 환경 파일을 찾을 수 있다.
  • 보통 /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;
         }
    }
}

Core 모듈

  • 프로세스 관리나 보안과 같은 필수적인 기능과 지시어
  • 코어 모듈은 대부분 환경 설정 파일의 최상단에 위치하며 한번만 사용할 수 있다. nginx의 기본적인 동작 방식을 정의한다.
  • worker_process: 설정키를 나타내며 그 뒤에 한개 이상의 값을 붙일 수 있다. 엔진엑스가 단일 작업자 프로세스로만 작동됨을 의미. (몇개의 워커 프로세스를 생성할 것인지 지정하는 지시어. 1이면 모든 요청을 하나의 프로세스로 실행하겠다는 뜻. CPU 멀티코어 시스템에서 1이면 하나의 코어만으로 요청을 처리하는 셈이다. auto로 놓는 경우가 많다.)
  • Nginx는 모듈 구조로 작동하기 떄문에 각 모듈은 특정 지시어의 묶음 형태로 제공된다. 가장 기본적인 지시어들은 엔진엑스 코어 모듈에 포함돼 있다.

Events 블록

  • 네트워크 기능의 내부 작동 방식을 구성
  • 주로 네트워크 동작에 관련된 설정 영역으로, 이벤트 모듈을 사용한다.
  • worker_connections : 하나의 프로세스가 처리할 수 있는 커넥션의 수
  • 최대 접속자 수 = worker_processes X worker_connections

Http 블록

  • 웹서버에 대한 동작을 설정하는 영역, server 블록과 location 블록의 루트 블록이다. 여기서 선언된 값은 하위 블록에 상속된다. 서버의 기본값이 된다.
  • include 지시어 : 특정 파일을 포함하는 기능을 수행한다. 지시어가 있는 바로 그 위치에 해당 파일 내용이 삽입된다. 파일명 글로빙을 지원(= 파일명에 와일드카드 문자 * 사용 가능)

Upstream 블록

Upstream

  • origin 서버라고도 한다. (= 여러대의 컴퓨터가 순차적으로 어떤 일을 처리할 때 어떤 서비스를 받는 서버를 의미.)

  • 위의 그림에서 업스트림 서버는 PHP-FPM이 설치된 서버이고, 이 맥락에서 NGINX는 Downstream 서버라고 할 수 있다.

Upstream Module

  • 업스트림 모듈은 NGINX에 내장된 모듈로 엔진엑스로 부하분산, 속도 개선과 같은 역할을 할 수 있게 한다. 아래 그림은 엔진엑스의 업스트림 모듈을 이용해서 한대의 웹서버에 여러대의 에플리케이션 서버를 붙이는 방법을 보여준다.
  • 업스트림을 설정하기 위해서는 Upstream 블록을 이용.

형식

upstream 이름 {
    server host_주소:포트 [옵션];
    .....
}

Server 블록

  • 한 개 이상의 서버 블록을 선언할 수 있다. 하나의 server 블록은 하나의 가상 호스트를 구성. 위의 예시에서 server 블록은 example.com과 일치하는 Host HTTP 헤더를 갖는 모든 요청에 적용될 환경 설정을 포함.
  • server 블록 안에 한 개이상의 location 블록을 삽입할 수 있습니다.
  • listen : 이 웹사이트가 바라보는 포트를 의미.
  • server_name : 클라이언트가 접속하는 서버 (주로 도메인). 이것과 실제 들어온 request의 header에 명시된 값이 일치하는지 확인해서 분기함.
  • root : 웹사이트가 바라보는 root 폴더의 경로를 의미

Location 블록

  • Server 블록 내에서 특정 URL을 처리하는 방법을 정의. (=요청 URI가 지정 경로와 일치할 경우에만 설정을 적용.)
  • 환경 설정은 자식 블록에 상속된다. 위의 예제에서 server 블록 레벨에 정의된 access_log 지시어는 서버가 수신하는 모든 http 요청을 텍스트 파일에 기록하게 하는데, 다시 access_log 지시어를 사용해 로그를 중지시키지 않는 한 자식 블록인 location 블록 안에서도 여전히 유효하다.
  • 예시에서는 location은 .php 확장자로 끝나는 요청을 처리하기 위한 부분이다.
    +) 추가
location /internal {
    return 200;  ## http status 코드를 임의로 넘길 수 있다.
  }

fastcgi_split_path_info

  • 지정한 정규표현식에 따라 경로 정보를 분할한다.
fastcgi_split_path_info ^(.+\.php)(.*) $;

이것은 두개의 변수에 영향을 준다.
1. $fastcgi_script_name: 실제 실행되는 스크립트의 파일명
2. $fastcgi_path_info: 스크립트명 다음에 오는 URL부분

fastcgi_pass

  • 위치를 명시해 요청이 FastCGI서버에 전달되게 지정한다.
  • TCP 소켓일 때의 구문: fastcgi_pass hostname:port;
socket
  • php-fpm과 NGINX를 연결하기 위한 인터페이스를 지정하는 것
  • 이 값은 php-fpm의 listen 설정값과 일치해야 한다.
TCP Connection

-만약 NGINX와 PHP-FPM이 서로 다른 머신에 설치되었다면 TCP Connection의 값을 지정해야 한다. 만약 PHP-FPM이 192.168.125.142에 설치되어 있다면 NGINX 측의 설정 fastcgi_pass 192.168.125.142:9000;

  • 이에 대응해서 PHP-FPM 측의 listen 값은 아래와 같아야 한다.
    listen = 192.168.125.142:9000

fastcgi_index

fastcgi_param

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은 전달된 값에 해당되는 파일을 읽어서 실행.

변수

  • 모듈은 지시어 값을 정의할 때 활용할 수 있는 변수도 제공. ex) Nginx HTTP 코어 모듈에서는 $nginx_version 변수를 정의. log_format 지시어를 설

엔진엑스 프로세스 구조

출처

profile
읽으면 머리에 안들어와서 직접 쓰는 중. 잘못된 부분 지적 대환영
post-custom-banner

0개의 댓글