본문

Windows + Nginx + PHP 돌리기.

저사양 Windows 서버에서 IIS를 돌리는게 좀 버거워서 다른 웹서버를 찾아봐야 했다. 여러가지를 실제로 설치해 보고 동작시켜 본것 중 가장 맘에 드는것은 Nginx였다. 설정이 쉽고, 벤치마킹결과 다른 웹서버에 비해 내가 원하는 방향으로의 성능이 두드러 졌기 때문이다. Connection time이 가장 중요한 이유였고 메모리 반환이라든가 부하 관리면에서도 우수했다. 또한 proxy_pass기능을 사용하여 IIS 뿐만 아니라 Jetty등의 다른 서버도 함께 돌릴 수 있어서 좋았다. (웹서버가 서비스보다는 개발 용도의 비중이 높다) 자세한 내용은 다른 사이트들에서 찾아볼 수 있다. 오래전에 조사했던거라서 링크및 자세한 내용은 첨부하지 않지만, 그사이 많은 자료들이 인터넷에 쉽게 검색될수있도록 공개되었을 것이다.

초창기에는 Windows에서 돌리기 위해서는 복잡한 과정을 거쳐야 했지만 Kevin Worthington이라는 분이 친절하게도 바이너리 설치형태로 배포하기 시작했다. 그리고 이후에 Nginx팀에서 정식으로 윈도우 호환버전을 내놓기 시작했다.

이 두 버전의 차이는 Windows에 Nginx를 포팅한 방식이라고 생각되는데, Worthington이 내놓은 것은 cygwin을 기반으로 하였지만, 정식버전은 Wine에 기반을 둔것이라고 생각된다. 개인적으로 cygwin기반의 버전을 사용하고 있다.기존 cygwin을 사용할때의 끔찍했던 속도와 완벽하지 않은 포팅으로 인해 정식버전을 사용하는것이 더 적합하다고 생각하지만, Worthington의 버전을 사용하는 이유는 cygwin의 cygdrive로의 접근을 통해서 (보안상의 문제가 있을수도 있겠지만) 여러 드라이브로 접근이 가능하다는 것이다.

지금 하드디스크를 두개를 꽂아놓은데다가 파티션도 나눠놓았고, 또한 여러곳에 흩어져 있는 로그파일들을 좀 더 손쉽게 관리하기 위해서 cygdrive편법을 잘 이용하고 있다. 그런데 다른 서버에 설치해보려고 하니 설치방법을 잊어버려서 나중에라도 쉽게 참조할 수 있도록 여기에 글을 적어본다.



서론이 길었는데, 바로 설치과정으로 넘어가 본다. Kevin Worthington의 사이트 메인화면에서 Stable 버전의 설치파일을 받고 설치하면 끝이다. 설치과정은 따로 설명할게 없는게, 주소와 기타 option을 사용자가 임의로 결정할 수 없기 때문이다. 이미 컴파일되어 나온 바이너리를 그냥 복사해 주는것에 지나지 않기 때문이다. C:\nginx의 위치에 설치가 된다.

그리고 나서 PHP를 nginx와 연동시켜야 한다. PHP 사이트의 윈도우 바이너리 다운로드 페이지에서 파일을 다운로드 하는데, nginx이 Unix 기반일 뿐만 아니라 밸런싱 기능도 포함되어 있으므로 VC6 x86 Non Thread Safe버전의 Zip 파일을 다운받아야 할것으로 생각된다. V6 x86 Thread Safe를 다운받아야지, Non Thread Safe를 사용해서 그런가 프로세스가 계속 죽어버리는거 같다. 하기야 그 로드밸런싱이랑 php랑은 아예 별개지. 파일을 다운 받고 C:\php 폴더에 압축을 푼다.

이후 작업도 어렵지 않은데, 왜냐하면 Nginx는 FastCGI를 지원하기 떄문이다. php 폴더에서 php-cgi.exe -b 127.0.0.1:<포트> 의 형식으로 실행시켜주고, fastcgi_pass 127.0.0.1:<포트번호>; 로 연결시켜주면 끝이다. php-cgi를 실행시키면 콘솔창이 꺼지지 않고 계속 남아있는데 그럴떄 다음의 프로그램을 사용하면 좋다. 더 아래에 이 프로그램이 사용되는 부분을 보면 이해가 쉬울것이다.


php 폴더에 위의 파일을 저장한 후, C:\nginx\conf 에서 start-nginx.bat에 마우스 오른쪽 버튼을 눌러서 편집 메뉴로 간 후 다음과 같이 수정하면 php와 nginx가 동시에 실행된다. 굵게처리된 부분이 새로 첨가되는 부분이다. 이때의 문제는 php-cgi가 계속해서 실행된다는 건데, 굳이 php-cgi만 끄는 경우는 흔치 않아서 따로 적지는 않겠다. stop-nginx.bat에서는 nginx와 같이 따라들어온 process -k 명령을 사용하는데, (물론 path설정해주면 되겠지만지만) 폴더 옮겨다니기 귀찮을! 경우, taskkill을 사용할 수도 있다. 참고로 taskkill은 win2k에는 없고 win2k3에는 있는 명령이다.

@ECHO OFF
c:\nginx\nginx.exe
cd \php
RunHiddenConsole.exe php-cgi.exe -b 127.0.0.1:9000
ping 127.0.0.1 -n 1>NUL
echo Starting nginx
echo .
echo .
echo .
ping 127.0.0.1 >NUL
EXIT

그러고 나서 환경설정을 해주어야 한다. 역시 C:\nginx\conf에서 nginx.conf 파일에서의
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
아래영역의 모든 #를 지워준다. 그리고 fastcgi_param영역을 다음과 같이 바꿔준다. php 데몬에 php파일의 정보를 넘겨주는 부분이므로 cygwin경로를 사용하지 않는 윈도우 경로로 확실하게 적어줘야지, 안그러면 파일이 있어도 404오류가 나게 된다.
SCRIPT_FILENAME c:/nginx/html$fastcgi_script_name;

이렇게 하면 어느정도 PHP가 잘 돌아가는것을 확인할 수 있을것이다.

댓글 2

Holic Spirit :: Tistory Edition

design by tokiidesu. powerd by kakao.