nginx 설정 요약

30792 단어 nginxurl 재 작성web
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 디 렉 터 리: 1,소프트웨어 설치 2, 가상 호스트 3, 사용자 인증 4, HTTPS 5, 역방향 에이전트 6, 부하 균형 7, URL 재 작성
*********************************************************************************************************************************************
rhel 5. x 에서 상기 기능 실현
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
   
   
   
   
  1. nginx-1.2.2.tar.gz /usr/src    ,1.2.2  
  2. #  
  3. #yum -y groupinstall "Development Libraries"  "Development Tools" 
  4. #yum -y install pcre-devel 
  5. #useradd -s /sbin/nologin nginx 
  6. #cd /usr/src 
  7. #tar xzvf nginx-1.2.2.tar.gz 
  8. #cd /usr/src/nginx-1.2.2 
  9. #./configure --prefix=/usr/local/nginx --pid-path=/var/run/nginx/nginx.pid \ 
  10. --lock-path=/var/lock/nginx.lock --user=nginx --group=nginx --with-http_ssl_module \ 
  11. --with-http_flv_module --with-http_stub_status_module --with-http_gzip_static_module \ 
  12. --http-client-body-temp-path=/var/tmp/nginx/client/ --http-proxy-temp-path=/var/tmp/nginx/proxy \ 
  13. --http-fastcgi-temp-path=/var/tmp/nginx/fcgi --http-uwsgi-temp-path=/var/tmp/nginx/uwsgi \ 
  14. --http-scgi-temp-path=/var/tmp/nginx/scgi --with-pcre 
  15. #make && make install 

nginx 에 SysV 서비스 시작 스 크 립 트 제공
   
   
   
   
  1. #vim /etc/init.d/nginx   
  2. #!/bin/sh 
  3. # nginx - this script starts and stops the nginx daemon 
  4. # chkconfig:   - 85 15  
  5. # description:  Nginx is an HTTP(S) server, HTTP(S) reverse \ 
  6. #               proxy and IMAP/POP3 proxy server 
  7. # processname: nginx 
  8. # config:      /usr/local/nginx/conf/nginx.conf 
  9. # config:      /etc/sysconfig/nginx 
  10. # pidfile:     /var/run/nginx.pid 
  11.   
  12. # Source function library. 
  13. . /etc/rc.d/init.d/functions 
  14.   
  15. # Source networking configuration. 
  16. . /etc/sysconfig/network 
  17.   
  18. # Check that networking is up. 
  19. [ "$NETWORKING" = "no" ] && exit 0 
  20.   
  21. nginx="/usr/local/nginx/sbin/nginx" 
  22. prog=$(basename $nginx) 
  23.   
  24. NGINX_CONF_FILE="/usr/local/nginx/conf/nginx.conf" 
  25.   
  26. [ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/nginx 
  27.   
  28. lockfile=/var/lock/subsys/nginx 
  29.   
  30. make_dirs() { 
  31.    # make required directories 
  32.    user=`nginx -V 2>&1 | grep "configure arguments:" | sed 's/[^*]*--user=\([^ ]*\).*/\1/g' -` 
  33.    options=`$nginx -V 2>&1 | grep 'configure arguments:'` 
  34.    for opt in $options; do 
  35.        if [ `echo $opt | grep '.*-temp-path'` ]; then 
  36.            value=`echo $opt | cut -d "=" -f 2` 
  37.            if [ ! -d "$value" ]; then 
  38.                # echo "creating" $value 
  39.                mkdir -p $value && chown -R $user $value 
  40.            fi 
  41.        fi 
  42.    done 
  43.   
  44. start() { 
  45.     [ -x $nginx ] || exit 5 
  46.     [ -f $NGINX_CONF_FILE ] || exit 6 
  47.     make_dirs 
  48.     echo -n $"Starting $prog: " 
  49.     daemon $nginx -c $NGINX_CONF_FILE 
  50.     retval=$? 
  51.     echo 
  52.     [ $retval -eq 0 ] && touch $lockfile 
  53.     return $retval 
  54.   
  55. stop() { 
  56.     echo -n $"Stopping $prog: " 
  57.     killproc $prog -TERM
  58.     retval=$? 
  59.     echo 
  60.     [ $retval -eq 0 ] && rm -f $lockfile 
  61.     return $retval 
  62.   
  63. restart() { 
  64.     configtest || return $? 
  65.     stop 
  66.     sleep 1 
  67.     start 
  68.   
  69. reload() { 
  70.     configtest || return $? 
  71.     echo -n $"Reloading $prog: " 
  72.     killproc $nginx -HUP 
  73.     RETVAL=$? 
  74.     echo 
  75.   
  76. force_reload() { 
  77.     restart 
  78.   
  79. configtest() { 
  80.   $nginx -t -c $NGINX_CONF_FILE 
  81.   
  82. rh_status() { 
  83.     status $prog 
  84.   
  85. rh_status_q() { 
  86.     rh_status >/dev/null 2>&1 
  87.   
  88. case "$1" in 
  89.     start) 
  90.         rh_status_q && exit 0 
  91.         $1 
  92.         ;; 
  93.     stop) 
  94.         rh_status_q || exit 0 
  95.         $1 
  96.         ;; 
  97.     restart|configtest) 
  98.         $1 
  99.         ;; 
  100.     reload) 
  101.         rh_status_q || exit 7 
  102.         $1 
  103.         ;; 
  104.     force-reload) 
  105.         force_reload 
  106.         ;; 
  107.     status) 
  108.         rh_status 
  109.         ;; 
  110.     condrestart|try-restart) 
  111.         rh_status_q || exit 0 
  112.             ;; 
  113.     *) 
  114.         echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}" 
  115.         exit 2 
  116. esac 
   
   
   
   
  1.  
  2. #chmod a+x /etc/init.d/nginx 
  3. #chkconfig --add nginx 
  4. #chkconfig nginx on 
  5. #service nginx start 

 
가상 호스트 설정       
   
   
   
   
  1. #vim /usr/local/nginx/conf/nginx.conf 
  2. ..... 
  3. server { 
  4.          listen   80;  #  
  5.          server_name www.andy.com;   #  
  6.          index  index.html index.htm; #  
  7.          root /www;          #  
  8. }
  9. server {
  10. ........
  11. .......
  12. }
  13. ....... 

  만약 에 이 서버 의 가상 호스트 가 많다 면 위의 설정 방법 이 관리 하기 쉽 지 않 은 것 이 분명 합 니 다. 우 리 는 가상 호스트 의 설정 파일 을 넣 을 디 렉 터 리 를 지정 할 수 있 습 니 다. 모든 가상 호스트 는 하나의 설정 파일 을 단독으로 사용 하면 관리 하기에 도 훨씬 편리 합 니 다. 설정 은 다음 과 같 습 니 다.
   
   
   
   
  1. #vim /usr/local/nginx/conf/nginx.conf 
  2. ..... 
  3. ..... 
  4. include conf/vhost/*.conf;  
  5.  
  6. #mkdir /usr/local/nginx/conf/vhost 
  7. #vim /usr/local/nginx/conf/vhost/www.conf  
  8. server { 
  9. listen   80;  #  
  10. server_name www.andy.com;   #  
  11. index  index.html index.htm; #  
  12. root /www;          #  
  13. }

사용자 인증
   
   
   
   
  1. # htpasswd   
  2. #htpasswd -cd /usr/local/nginx/conf/.auth andy  
  3. #htpasswd -d /usr/local/nginx/conf/.auth andy_f  
  4. #vim /usr/local/nginx/conf/vhost/www.conf  
  5. server {  
  6.         listen   80;   
  7.         server_name www.andy.com;     
  8.         index  index.html index.htm; 
  9.         root /www;   
  10. location / { 
  11.          auth_basic "test"; 
  12.          auth_basic_user_file /usr/local/nginx/conf/.auth; 
  13.  
  14. #service nginx restart 

4, HTTPS 자체 발급 인증서 사용 
   
   
   
   
  1. # https  
  2. #mkdir -pv /usr/local/nginx/conf/.sslkey 
  3. #  
  4. #cd /usr/local/nginx/conf/.sslkey 
  5. #openssl genrsa -out https.key 1024 
  6. # , , Common Name  FQDN 
  7. #openssl req -new -x509 -key https.key -out https.crt 
  8. # , 400 
  9. #chmod -R 400 /usr/local/nginx/conf/.sslkey 
  10.  
  11. #vim /usr/local/nginx/conf/vhost/www.conf 
  12. server {  
  13.         listen   443;   
  14.         server_name www.andy.com;   
  15.         index  index.html index.htm;  
  16.         root /www;   
  17.         ssl                 on; 
  18.         ssl_protocols       SSLv3 TLSv1 TLSv1.1 TLSv1.2; 
  19.         ssl_ciphers         AES128-SHA:AES256-SHA:RC4-SHA:DES-CBC3-SHA:RC4-MD5; 
  20.         ssl_certificate     /usr/local/nginx/conf/.sslkey/https.crt; 
  21.         ssl_certificate_key /usr/local/nginx/conf/.sslkey/https.key; 
  22.         ssl_session_cache   shared:SSL:10m; 
  23.         ssl_session_timeout 10m; 
  24. }   
  25.  
  26. # nginx
  27. #service nginx restart   

5. 역방향 대리 캐 시 메커니즘 이 있 는 역방향 에이전트
   
   
   
   
  1. #vim /usr/local/nginx/conf/nginx/conf 
  2. .......
  3. .......
  4. http { 
  5. ......
  6.  
  7.   proxy_cache_path /var/www/cache levels=1:2 keys_zone=mycache:20m max_size=2048m inactive=60m
  8.   proxy_temp_path /www/cache/tmp; 
  9. ......
  10. server { 
  11.         listen 80; 
  12.         server_name www.andy.com; 
  13.         location / { 
  14.           proxy_pass http://127.0.0.1/;  
  15.           proxy_cache mycache; 
  16.           proxy_cache_valid 200 302 60m; 
  17.           proxy_cache_valid 404 1m; 
  18.           proxy_set_header Host $host; 
  19.           proxy_set_header X-Real-IP $remote_addr; 
  20.           } 
  21. # nginx
  22. #service nginx restart

 
6. 부하 균형      nginx 에서 부하 균형 을 실현 하 는 것 도 역방향 대 리 를 사용 하 는 메커니즘 입 니 다. 그러면 nginx 에서 기본적으로 지원 하 는 스케줄 링 알고리즘 은 세 가지 가 있 습 니 다. 폴 링, 가중 폴 링, iphash, 부하 균형 이 무엇 인지 설명 할 필요 가 없 죠? 다음은 nginx 의 부하 균형 을 설정 합 니 다.
   
   
   
   
  1. #vim /usr/local/nginx/conf/nginx.conf  
  2. user  nginx;  
  3. worker_processes  10;  
  4. error_log  logs/error.log crit;  
  5. pid        logs/nginx.pid;  
  6. events  
  7. {  
  8.   use epoll;  
  9.   worker_connections 51000;  
  10. }  
  11. http {  
  12.     include       mime.types;  
  13.     default_type  application/octet-stream;  
  14.     keepalive_timeout  60;  
  15.     tcp_nodelay on;  
  16. #  bbs.andy.com
  17.     upstream bbs.andy.com {  
  18.         server  172.16.0.2:80;  #
  19.         server  172.16.0.3:80;
  20. server 172.16.0.4:80 weight=5;
  21. server 172.16.0.5:8080 backup; ,  
  22.         ip_hash;  #
  23.         }  
  24.     server {  
  25.         listen       80;  
  26.         server_name  bbs.andy.com;  
  27.         index index.html index.htm index.php;  
  28.         location / {  
  29.             proxy_pass      http://bbs.andy.com;  # ,
  30. # 502 504 nginx , ,nginx , ,
  31. proxy_next_upstream http_502 http_504 error timeout invalid_header;  
  32.             proxy_set_header    Host    $host;  
  33.             proxy_set_header    X-Real-IP   $remote_addr;  
  34.             proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;  
  35.             proxy_connect_timeout   600;  
  36.             proxy_read_timeout  600;  
  37.             proxy_send_timeout  600;  
  38.             proxy_buffer_size   8k;  
  39.             proxy_temp_file_write_size  64k;  
  40.         }     
  41.   
  42.       
  43.         access_log      logs/bbs.log;  
  44.   
  45.         }  

 
7. URL 재 작성 url 재 작성 이란 특정한 경 로 를 다른 경로 로 다시 찾 는 것 입 니 다. 찾기 와 바 꾸 는 차이 가 많 지 않 습 니 다. 형식 은 다음 과 같 습 니 다. rewrite regex replacement [flag];    nginx 에서 url 재 작성 처리 체 제 는 다음 과 같은 4 가지 가 있 습 니 다.  last    일치 하 는 url 을 다시 일치 시 킵 니 다.  break 가 일치 하 는 url 은 일치 하지 않 습 니 다.  redirect 임시 방향 변경  permanent 영구 재 설정 1. 예 를 들 어 특정한 사이트 에 방문 하 는 경 로 는 / forum / 이 때 / bbs 를 사용 하여 이 사 이 트 를 방문 하려 면 url 재 작성 을 해 야 합 니 다. 다음 과 같 습 니 다.
   
   
   
   
  1. location / {
  2. rewrite ^/forum/?$ /bbs/ permanent; 
  3. }

2. 예 를 들 어 특정한 사이트 에 그림 서버 (10.0.0.1 / p w picpaths /) 가 있 는데 이때 특정한 사이트 에 방문 합 니 다 / pw_picpaths / 자원 시 이미지 서버 에 접근 하고 싶 은 자원
   
   
   
   
  1. location / {
  2. rewrite ^/p_w_picpaths/(.*\.jpg)$  /p_w_picpaths2/$1 break;

3, 도 메 인 이름 이동
   
   
   
   
  1. server 
  2. listen 80; 
  3. server_name andy.com; 
  4. rewrite ^/ http://www.andy.com/; 

4, 도 메 인 이름 미 러
   
   
   
   
  1. server 
  2. listen 80; 
  3. server_name  andy.com; 
  4. rewrite ^/(.*)$ http://www.andy.com/$1 last; 

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * if 판단 문, 문법 if (조건) {.....} 응용 환경 server 도 지원 합 니 다. ,location  if 판단 조건 은 다음 과 같다. 1. 변수 명;false values are: empty string (", or any string starting with" 0 ";) 2. 변수 에 대한 비교 표현 식 은 = 또는! = 을 사용 할 수 있 습 니 다.테스트 진행 하기;3. 정규 표현 식 의 패턴 일치:  ~  크기 구분 패턴 일치  ~* 알파벳 대소 문자 구분 없 는 패턴 일치 !~ 와!위의 두 가지 테스트 에서 반 4 를 취하 고 파일 이 - f 또는! -f 5 、 테스트 디 렉 터 리 존재 여부 - d 또는! -d 6. 디 렉 터 리, 파일 또는 링크 파일 의 존재 성 - e 또는! -e 7 、 파일 의 실행 권한 검사 - x 또는! -x
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *http://wiki.nginx.org/HttpCoreModule#Variables   공식 문서 $argPARAMETER $args $binary_remote_addr $body_bytes_sent $content_length $content_type $cookie_COOKIE $document_root $document_uri $host $hostname $http_HEADER $sent_http_HEADER $is_args $limit_rate $nginx_version $query_string $remote_addr $remote_port $remote_user $request_filename $request_body $request_body_file $request_completion $request_method $request_uri $scheme $server_addr $server_name $server_port $server_* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 도 난 방지 체인
   
   
   
   
  1. location ~* \.(gif|jpg|png|swf|flv)$ { 
  2.   valid_referers none blocked www.andy.com; 
  3.   if ($invalid_referer) { 
  4.     rewrite ^/ http://www.andy.com/403.html; 
  5.   } 

6, 사용자 가 요청 한 페이지 가 존재 하지 않 으 면 사용자 정의 점프
   
   
   
   
  1. if (!-f $request_filename) { 
  2.       rewrite ^(/.*)$ http://www.andy.com permanent; 

7. 사용자 브 라 우 저의 유형 을 판단 하고 해당 하 는 점프 를 합 니 다.
   
   
   
   
  1. if ($http_user_agent ~* MSIE) { 
  2.   rewrite  ^(.*)$  /msie/$1  break; 

 
OK, 완 공 했 습 니 다. 잠시 이렇게 많은 것 을 정리 하 였 습 니 다.

좋은 웹페이지 즐겨찾기