2011. 8. 17. 16:09

Nginx 설치(간략)

Nginx 는 러시아에서 만든 웹서버로 접속이 많을 경우에도 안정적인 처리량을 보여주기때문에 사용자가 늘어나고 있는 추세이다. 다만 Nginx 에서 동적페이지인 PHP를 구동할 경우 오히려 Apache보다 처리능력이 떨어지기 때문에 이미지 웹서버만 분리해서 운영하려고 할때 좋은 성능을 보여준다.

가벼운 nginx를 전면에 두고 PHP처리가 필요한 호출에 대해서는 백단의 Apache에서 처리하도록 할 것이다.
Nginx 는 80포트, Apache는 8080으로 설정

Apache, PHP, MySql 등은 YUM을 통해 설치된 상태임. Apache포트는 8080으로 변경(가상호스트도 마찬가지)

1. Nginx 최신버젼 다운로드
wget http://nginx.org/download/nginx-1.1.0.tar.gz

2. configure 및 설치
./configure --prefix=/usr/local/nginx && make && make install
다른 옵션도 많으니 ./configure --help 로 확인해볼 것. 

3. 환경설정
/usr/local/nginx/conf/nginx.conf 에보면 예제로 PHP확장자의 처리에 대한 부분이 있다.
주석처리된 부분을 아래와 같이 수정한다.

아래 라인을 주석 해제하고 설정해줌
location ~ \.php$ {

    root           html;

    fastcgi_pass   127.0.0.1:9000;

    fastcgi_index  index.php;

    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;

    include        fastcgi_params;

}


#다른 port 에서 운영중인 웹서버를 이용할 경우(reverse proxy)
location ~ \.php$ {

    proxy_pass   http://127.0.0.1:8080;
}
여러 확장자를 처리하고 싶으면  ~ \.(php|htm|html)$ 과 같이 쓰면 됨

4. 실행
/usr/local/nginx/sbin/nginx 를 실행하면 웹서버가 시작함

옵션참고
-c 디폴트파일 대신 사용될 Nginx설정 파일을 지정합니다.
-t  Nginx를 실행하지는 않고 단지 설정파일을 테스트해봅니다. nginx에서 문법에 맞게 설정됐는지 체크합니다. 그리고 설정으로 지정된 파일을 시험삼아 열어봅니다.
-s  master 프로세스로 signal을 날립니다. :stop, quit, reopen, reload. (버전 >=0.7.53)
-v  버전을 찍어줍니다.
-V nginx의 버전, 컴파일러의 버전, 그리고 설정파라메터들을 찍어줍니다.
-ㅔ prefix prefix의 경로를 설정합니다. (디폴트 : /usr/local/nginx/). (버전 >=0.7.53)
-h, -? 도움말 찍기

5. 관리/종료
nginx -s signal

-s 옵션은 마스터 프로세스에 signal 을 날리는 옵션

signal 에는 아래 옵션을 사용하여 nginx를 시작/종료 할 수 있음
stop — 빠른종료(강제)
quit — 연결된 클라이언트와 통신과정이 끝난후 종료
reload — conf 파일 reload
reopen — 로그파일 재적용?

마스터 프로세서에 signal 을 날리는 방법외에 kill 을 사용하여 동일한 기능을 처리하도록 할수 있음

kill -signal  `cat /usr/local/nginx/logs/nginx.pid`

signal 에는 아래와 같은 명령을 줄 수 있음
TERM, INT - Quick shutdown 빠른 종료
QUIT - Graceful shutdown 정상적으로 종료
KILL - Halts a stubborn process 잘안죽는 프로세스 죽이기
HUP - Configuration reload
      Start the new worker processes with a new configuration
      Gracefully shutdown the old worker processes

      설정 리로드하기
      새로운 워커 프로세스가 시작될때 새로운 설정으로 시작됨
      오래된 워커 프로세스는 알아서 종료

USR1 - Reopen the log files - 로그파일 다시 열기
USR2 - Upgrade Executable on the fly 운행중 실행파일 업그레이드하기
WINCH - Gracefully shutdown the worker processes
        워커프로세스를 정상적으로 종료시키기


서버 운영중 reload 를 사용하여 conf 를 다시 읽을 경우 실시간으로 적용되므로 재시작 하지 않아도 된다.

6. 업데이트
kill 에서 사용하는 signal 중에 USER2 를 사용하여 서버가 동작중인 경우에도 업데이트를 할 수 있다.
1. kill -USER2  `cat /usr/local/nginx/logs/nginx.pid` 실행
  - 현재 사용하는 pid 파일을 .oldbin 으로 변경을 함
2. 새로운 버젼의 nginx 를 시작하면 두가지 버젼의 nginx 가 운영이되며 같이 80포트의 요청을 처리하게 됨
3. kill -WINCH  `cat /usr/local/nginx/logs/nginx.oldbin.pid` 실행 하여 이전버젼 nginx의 워커 프로세스들을 죵료시킨다.
4.  kill -QUIT `cat /usr/local/nginx/logs/nginx.oldbin.pid` 시그널로 이전버전을 종료시킴

만약 3번 까지 진행 이후 다시 이전버젼의 nginx로 되돌릴려고 할때는 아래와 같이 진행
- 오래된 마스터 프로세스에 HUP 시그날을 보낸다.(설정 리로드) -> 워커 프로세스가 다시 시작됨
- 새로운 마스터 프로세스에 QUIT 시그날을 보내서 그것의 워커프로세스를 정상적으로 종료시킨다.
- 새로운 마스터 프로세스에 TERM 시그날을 보내서 강제로 종료시킨다.
- 어떠한 이유로 새로운 마스터 프로세스가 종료되지 않으면, KILL 시그날을 보낸다.