차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

양쪽 이전 판이전 판
다음 판
이전 판
tech:nginx [2018/03/01 06:25] – 이전 판으로 되돌림 (2016/09/29 17:35) 백괴저장소 맞음 V_Ltech:nginx [2023/09/11 21:01] (현재) – [redirect subdomain to port] V_L
줄 1: 줄 1:
 {{tag>nginx 엔진엑스 apache 아파치 웹서버 성능 http www}} {{tag>nginx 엔진엑스 apache 아파치 웹서버 성능 http www}}
 ======Nginx (엔진엑스)====== ======Nginx (엔진엑스)======
- 
-{{http://nginx.com/static/images/logos/nginx_200.png }} 
  
 엔진엑스 nginx는 러시아 개발자(Igor Sysoev)가 혼자서 만든 프로젝트이지만,  메모리와 성능이 좋아 입소문으로 많이 사람들이 알게 되었다. 2002년부터 시작되어 최근 사용하는 곳이 급속히 증가하고 있다. 엔진엑스 nginx는 러시아 개발자(Igor Sysoev)가 혼자서 만든 프로젝트이지만,  메모리와 성능이 좋아 입소문으로 많이 사람들이 알게 되었다. 2002년부터 시작되어 최근 사용하는 곳이 급속히 증가하고 있다.
  
 http://nginx.com/ http://nginx.com/
- 
  
 특히 nginx는 http://wordpress.com 에 적용되면서 많이 유명해졌다.  특히 nginx는 http://wordpress.com 에 적용되면서 많이 유명해졌다. 
-현재 Nginx를 쓰는 유명한 곳으로는 페이스북, Netflix, WordPress.com, [[GitHub]], [[사운드클라우드]], Zynga, Sourceforge 등이 있으며, 한국에서는 네이버 첫페이지, 백괴사전, 일베저장소, 엔하위키 미러,카카오톡 공지사항 서버,XpressEngine 공식 홈페이지등이 있다.+현재 Nginx를 쓰는 유명한 곳으로는 페이스북, Netflix, WordPress.com, [[GitHub]], [[사운드클라우드]], Zynga, Sourceforge 등이 있으며, 한국에서는 네이버 첫페이지, 백괴사전, 일베저장소, 나무위키 미러,카카오톡 공지사항 서버,XpressEngine 공식 홈페이지등이 있다.
  
 {{http://vbtechsupport.com/wp-content/uploads/2012/01/activewebsites_rank.png}} {{http://vbtechsupport.com/wp-content/uploads/2012/01/activewebsites_rank.png}}
  
-nginx 는 비동기(async) 이벤트 기반(ioctl, send, recv, epoll)으로 만들어졌고, Apache Http 서버는 프로세스 또는 쓰레드를 태생으로 만들어졌다. +nginx 는 비동기(async) 이벤트 기반(ioctl, send, recv, epoll)으로 만들어졌고, Apache Http 서버는 프로세스 또는 쓰레드를 태생으로 만들어졌다.
  
 따라서, 더 적은 자원으로 더 빠르게 데이터를 서비스 할 수 있다. 따라서, 더 적은 자원으로 더 빠르게 데이터를 서비스 할 수 있다.
줄 20: 줄 17:
 =====성능===== =====성능=====
  
- +성능은 접속자가 어느 정도 이상 되고 다양한 사이트가 운영되면 차이가 많이 난다. 동접자가 많을수록 체감할수 있다 물론 설정을 시스템에 맞게 잘 해주면 효과가 극대화 되겠다. 
-성능은 접속자가 어느 정도 이상 되고 다양한 사이트가 운영되면 차이가 많이 난다. 동접자가 많을수록 체감할수 있다 물론 설정을 시스템에 맞게 잘 해 주셔야 효과가 극대화 되겠다. +
 서버가 리눅스일경우 그리고 멀티코어일 경우 엔진엑스와 아파치의 차이가 많이 난다. 서버가 리눅스일경우 그리고 멀티코어일 경우 엔진엑스와 아파치의 차이가 많이 난다.
  
-한국에서 엔진엑스를 많이 안쓰는 이유는 아직 정형화된 한글 문서들이 없기 때문이다. 호스팅 서비스의 경우 rewrite 관련 부분을 사용하는 호스팅 사용자가 많은 경우 상당히 귀찮아 질 수 있다.+한국에서 엔진엑스를 많이 안쓰는 이유는 한글 문서들이 많이 없기 때문이다. 호스팅 서비스의 경우 rewrite 관련 부분을 사용하는 호스팅 사용자가 많은 경우 상당히 귀찮아 질 수 있다.
  
 보통 접속자가 많은 사이트 (토렌트, 유머 등등) 인 경우 엔진엑스를 많이 쓰고 있는 추세이다, 보통 접속자가 많은 사이트 (토렌트, 유머 등등) 인 경우 엔진엑스를 많이 쓰고 있는 추세이다,
 성능을 원하면 Nginx로 셋팅하자. 성능을 원하면 Nginx로 셋팅하자.
-  
  
 [[http://stackoverflow.com/questions/14983276/php-processing-speed-apache-2-4-mpm-prefork-mod-php-5-4-vs-nginx-1-2-x-php-fpm-5|아파치 2.4와의 비교]] [[http://stackoverflow.com/questions/14983276/php-processing-speed-apache-2-4-mpm-prefork-mod-php-5-4-vs-nginx-1-2-x-php-fpm-5|아파치 2.4와의 비교]]
- 
  
 Use nginx in the front as proxy, and serving all static content (css, images, js) and leaving the php process to Apache. Use nginx in the front as proxy, and serving all static content (css, images, js) and leaving the php process to Apache.
줄 51: 줄 45:
 =====윈도용===== =====윈도용=====
  
-윈도우용 Nginx는 native win32 api를 이용하며, select() 연결만 사용하기 때문에 향상된 성능을 기대하기는 어렵다. 이외의 몇몇 제약 때문에 아직 베타버전으로 간주된다. +윈도우용 Nginx는 native win32 api를 이용하며, select() 연결만 사용하기 때문에 향상된 성능을 기대하기는 어렵다. 이외의 몇몇 제약 때문에 아직 베타버전으로 간주된다.
  
 http://nginx.org/en/docs/windows.html 참고한다. http://nginx.org/en/docs/windows.html 참고한다.
줄 69: 줄 63:
  
 =====설치===== =====설치=====
- 
  
 우분투에서 패키지를 이용해 설치하면된다.  우분투에서 패키지를 이용해 설치하면된다. 
줄 86: 줄 79:
 </file> </file>
  
-혹시 업그레이드가 잘 안먹으면 +혹시 업그레이드가 잘 안먹으면
  
   sudo apt-get dist-upgrade   sudo apt-get dist-upgrade
- 
  
 =====설정===== =====설정=====
  
 Nginx 설정은 ''/etc/nginx/nginx.conf'', ''/etc/nginx/sites-available/default'' 에서 할 수 있다. Nginx 설정은 ''/etc/nginx/nginx.conf'', ''/etc/nginx/sites-available/default'' 에서 할 수 있다.
- 
  
 PHP5와 Nginx 연동하기위해 사이트 설정 파일에 다음 줄을 추가한다. PHP5와 Nginx 연동하기위해 사이트 설정 파일에 다음 줄을 추가한다.
줄 121: 줄 112:
  
    sudo service php5-fpm restart    sudo service php5-fpm restart
- 
- 
  
   sudo service nginx restart   sudo service nginx restart
줄 130: 줄 119:
 유닉스소켓 연결이 조금 더 빠르기는 하지만 TCP/IP 만큼 Scalable 하지는 않다. 일일 방문자가 만명 수준이 본 사이트(http://openwiki.kr) 에서도 유닉스 소켓 연결로 설정 후 종종 php가 연결이 끊기는 경우 (갑자기 사이트 먹통, nginx 와 php 재시작 후 살아남)가 생겼었다. 이를 다시 TCP연결로 복구한 뒤 해결되었다. 유닉스소켓 연결이 조금 더 빠르기는 하지만 TCP/IP 만큼 Scalable 하지는 않다. 일일 방문자가 만명 수준이 본 사이트(http://openwiki.kr) 에서도 유닉스 소켓 연결로 설정 후 종종 php가 연결이 끊기는 경우 (갑자기 사이트 먹통, nginx 와 php 재시작 후 살아남)가 생겼었다. 이를 다시 TCP연결로 복구한 뒤 해결되었다.
  
-이런 경우 nginx가 502 에러를 뿜는다고 하는데, 그냥 먹통이 되기도 한다. 소켓 세팅을 만지거나 그냥  TCP/IP 로 돌아가면 된다. +이런 경우 nginx가 502 에러를 뿜는다고 하는데, 그냥 먹통이 되기도 한다. 소켓 세팅을 만지거나 그냥  TCP/IP 로 돌아가면 된다.
  
 In your fastcgi conf change: In your fastcgi conf change:
줄 138: 줄 127:
  
     fastcgi_pass 127.0.0.1:9000;     fastcgi_pass 127.0.0.1:9000;
- 
- 
  
 http://IP주소 로 접속해본다. http://IP주소 로 접속해본다.
줄 156: 줄 143:
   * [[http://www.anilcetin.com/|Apache -> Nginx 변환기]]   * [[http://www.anilcetin.com/|Apache -> Nginx 변환기]]
   * [[http://wiki.nginx.org/Pitfalls#Server_Name|Good & bad]]   * [[http://wiki.nginx.org/Pitfalls#Server_Name|Good & bad]]
- 
  
   * last vs rewrite    * last vs rewrite 
줄 165: 줄 151:
  
 <file>server { <file>server {
- server_name m.openwiki.kr; +    server_name m.openwiki.kr; 
-# return 301 $scheme://openwiki.kr$request_uri;+     return 301 $scheme://openwiki.kr$request_uri;
        rewrite ^(.*) http://openwiki.kr$1 permanent;        rewrite ^(.*) http://openwiki.kr$1 permanent;
 }</file> }</file>
줄 230: 줄 216:
 </file> </file>
 ====Compression==== ====Compression====
-/etc/nginx/nginx.conf +/etc/nginx/nginx.conf
  
 http section http section
 <file> <file>
  
- +  - enable gzip compression
-enable gzip compression+
 gzip on; gzip on;
 gzip_min_length  1100; gzip_min_length  1100;
줄 242: 줄 227:
 gzip_types    text/plain application/x-javascript text/xml text/css; gzip_types    text/plain application/x-javascript text/xml text/css;
 gzip_vary on; gzip_vary on;
-end gzip configuration+  - end gzip configuration
 </file> </file>
  
줄 264: 줄 249:
 ====subdomain==== ====subdomain====
  
-이런식이다. +이런식이다.
  
 <file>server { <file>server {
줄 290: 줄 275:
     }        }   
 } }
 +</file>
 +
 +====max children====
 +''/etc/php/8.1/fpm/pool.d/www.conf''
 +<file>
 +pm.max_children = 128
 +
 +pm.start_servers = 10
 +
 +pm.min_spare_servers = 4
 +
 +pm.max_spare_servers = 16
 +
 +pm.max_requests = 500
 </file> </file>
 ====성가신 로그 끄기==== ====성가신 로그 끄기====
 +[[var_log]]
  
 <file conf> <file conf>
-Avoids filling up the error logs with commonly requested files. +  - Avoids filling up the error logs with commonly requested files. 
-Note that if you have a custom 404 page, the request may be logged anyway.+  Note that if you have a custom 404 page, the request may be logged anyway.
 location = /robots.txt { log_not_found off; } location = /robots.txt { log_not_found off; }
 location = /favicon.ico { log_not_found off; } location = /favicon.ico { log_not_found off; }
줄 303: 줄 303:
 location = /apple-touch-icon-120x120-precomposed.png { log_not_found off; } location = /apple-touch-icon-120x120-precomposed.png { log_not_found off; }
 </file> </file>
- 
  
 접근 로그는 ''nginx.conf''에서 설정하는 것이 편하다. 접근 로그는 ''nginx.conf''에서 설정하는 것이 편하다.
   access_log off;   access_log off;
 +에러 로그도 끌 수 있다. 
 +  error_log off;
 =====아파치 호환성===== =====아파치 호환성=====
  
 ====getallheaders()==== ====getallheaders()====
  
-getallheaders는 아파치의 헤더를 받아오는 것으로 nginx에서는 작동하지 않는다. 호환성을 위해 다음과 같은 함수를 만들어 쓰면 된다. +getallheaders는 아파치의 헤더를 받아오는 것으로 nginx에서는 작동하지 않는다. 호환성을 위해 다음과 같은 함수를 만들어 쓰면 된다.
  
 <file php> <file php>
줄 337: 줄 338:
    * http://www.solanara.net/solanara/nginx 소개, 리버스프록시로 사용...    * http://www.solanara.net/solanara/nginx 소개, 리버스프록시로 사용...
    * http://helloworld.naver.com/helloworld/192785 모듈개발    * http://helloworld.naver.com/helloworld/192785 모듈개발
-   * http://opentutorials.org/module/384/3462 소개, 설치 +   * http://opentutorials.org/module/384/3462 소개, 설치
    
-  
- 
-^  누구나 수정하실 수 있다. [[http://vaslor.net/syntax|위키 사용법]] 참고하라.  ^ 
- 
-