on
Nginx
생활코딩 Nginx강의
아래의 내용은 egoing님이 강의하시는 opentutorials의 NGINX강의에서 발췌한 것 입니다.
1강 Nginx 소개
- 웹, 클라이언트와 서버간의 관계에 대한 설명
- HTTP에 대한 소개
- Web server -> HTTP라고도 할 수 있다.
- 웹서버의 역사
- 아파치의 압도적인 점유율
- 그러나 최근들어서 점점 아파치의 점유율을 따라오고 있다.
- Nginx는 차세대 웹서버 - 더 적은 자원으로 더 빠르게 데이터를 서비스할 수 있는 경량화된 웹서버
- Document Root :
/usr/share/nginx/html/
- 설정파일:
/etc/nginx/
conf.d
->default.conf
에는 nginx의 기본 설정이 있다.conf.d
는 이름이 달라질 수 있다.
- 로그파일:
/var/log/nginx/
2강 Nginx 컴파일
- 컴파일하는 방법, 의존성 등의 문제가있는 난이도가 있음
- Nginx 모듈을 컴파일을 통해서만 설치할 수 있기 때문에 알아두면 좋다
- Nginx는 세가지 버전이 있다.
- 안전버전 : 실제 배포할 때
- 개발버전: 개발할 때 / 버그가 발생할 수 있다.
- 레거시버전: 예전버전의 Nginx
- 안전버전의 설치가 권장된다.
- Nginx는 마스터 프로세스(Master Process)와 작업자 프로세스(Worker Process)를 가지고 있다.
ps aux | grep nginx
를 실행해보면 아래와 같은 프로세스가 떠있을 것이다.- 마스터 프로세스는 루트 계정으로 실행되면서 80, 443 포트의 소켓과의 통신을 담당한다.
- 작업자 프로세스는 실제로 데이터를 처리하는 프로세스라고 할 수 있는데 이 프로세스를 핸들링할 사용자를 만들어야 한다. 일반적으로 웹서버의 워커 유저는 www-data를 사용한다. www-data를 만드는 법은 아래와 같다.
useradd --shell /usr/sbin/nologin www-data
3강 PHP-FPM-MYSQL 1
CGI
- CGI는 Common Gateway Interface의 약자로 웹서버와 외부 프로그램을 연결해주는 표준화된 프로토콜이다.
FastCGI
- CGI 는 하나의 요청(Request)에 하나의 프로세스를 생성한다. 이것은 프로세스를 생성하고 삭제하는 과정에서 많은 부하가 발생한다. 당연히 느리다. 이를 개선하기 위해서 등장한 것이 FastCGI이다. FastCGI는 요청이 있을 때마다 프로세스가 만들어지는 것이 아니라 만들어진 프로세스가 계속해서 새로운 요청들을 처리한다. 덕분에 프로세스를 생성하고 제거하는데 들어가는 부하가 줄어든다.
3강 PHP-FPM-MYSQL 2
- FPM, 과 MYSQL을 설치를 한 후에는 Nginx를 설정해 줘야 하는데 설정파일은
/etc/nginx/conf.d/default.conf
이거나/etc/nginx/sites-available/default
에 있다. - socker - fastcgi_pass는 php-fpm과 NGINX를 연결하기 위한 인터페이스를 지정하는 것.
- Upstream Module - Upstream Module는 NGINX를 일종의 부하분배장치(Load Balancer)로 이용할 수 있게 해주는 NGINX의 모듈이다. 자세한 내용은 Upstream Module를 참고한다. Upstream Module 바로가기
4강 PHP-FPM-MYSQL 3
- PHP를 Nginx와 독립된 별도의 서버에 설치하여 연결하는 것을 설명
5강 NGINX 환경설정
-
Nginx 설정파일은 conf 디렉토리 아래에 위치하고, 설치 바업에 따라서 설정파일의 위치가 다를 수 있다.
- 컴파일을 통해 설치할 경우 ->
/usr/local/nginx/conf
apt-get
을 이용해서 우분투에 설치할 경우 ->/etc/nginx
- 컴파일을 통해 설치할 경우 ->
-
설정파일 위치를 찾는 명령어
sudo find / -name nginx.conf
-
설정파일의 역할
- nginx.conf : 메인 설정 파일.
- fcgi.conf : FastCGI 환경설정 파일
- sites-enabled : 활성화된 사이트들의 설정 파일들이 위치. 아파치에서는 Virtual host의 설정에 해당한다. 기본적으로 존재하지 않을수도 있다. 이 디렉토리를 직접 만들어서 사용하는 방법은 가상 호스팅편에서 알아본다.
- sites-available : 비활성화된 사이트들의 설정 파일들이 위치
-
아래의 Nginx 메인 환경설정 파일인
nginx.conf
의 내용을 파해치며 Nginx의 환경설정을 이해해 나가보자worker_processes 1; events { worker_connections 1024; } http { include mime.types; server { listen 80; location / { root html; index index.html index.htm; } }
Core 모듈 설정
위의 예의 work_processes와 같은 지시자 설정 파일 최상단에 위치하면서 nginx의 기본적인 동작 방식을 정의한다. 여기서 사용되는 지시어들은 다른 곳에서 사용되지 않는다. 코어모듈 지시어 사전을 참고하자.
http 블록
http 블록은 이후에 소개할 server, location의 루트 블록이라고 할 수 있고, 여기서 설정된 값을 하위 블록들은 상속한다. http 블록은 여러개를 사용할 수 있지만 관리상의 이슈로 한번만 사용하는 것을 권장한다.
http, server, location 블록은 계층구조를 가지고 있다. 많은 지시어가 각각의 블록에서 동시에 사용할 수 있는데, http의 내용은 server의 기본값이 되고, server의 지시어는 location의 기본값이 된다. 그리고 하위의 블록에서 선언된 지시어는 상위의 선언을 무시하고 적용된다.
server 블록
server 블록은 하나의 웹사이트를 선언하는데 사용된다. 가상 호스팅(Virtual Host)의 개념이다. 예를들어 하나의 서버로 http://opentutorials.org 과 http://egoing.net 을 동시에 운영하고 싶은 경우 사용할 수 있는 방법이다. 가상 호스팅에 대한 자세한 내용은 가상 호스팅 수업을 참고하자.
location 블록
location 블록은 server 블록 안에 등장하면서 특정 URL을 처리하는 방법을 정의한다. 이를테면 http://opentutorials.org/course/1 과 http://opentutorials.org/module/1 로 접근하는 요청을 다르게 처리하고 싶을 때 사용한다.
events 블록
이벤트 블록은 주로 네트워크의 동작방법과 관련된 설정값을 가진다. 이벤트 블록의 지시어들은 이벤트 블록에서만 사용할 수 있고, http, server, location와는 상속관계를 갖지 않는다. 이벤트 모듈 지시어에 대한 설명은 이벤트 모듈 지시어 사전을 참고한다.
설정 파일의 반영
설정 파일의 내용을 변경한 후에는 이를 NGINX에 반영해야 하는데 아래와 같이 reload 명령을 이용한다. restart를 이용해도 되지만 권장되지 않는다.
Forward proxy와 Reverse proxy의 차이
https://www.lesstif.com/pages/viewpage.action?pageId=21430345