nginx 의 기본 설정

22326 단어

#
user www-data;    
# , cpu
worker_processes  1;

# PID
error_log  /var/log/nginx/error.log;
pid        /var/run/nginx.pid;

#
events {
    use   epoll;             #epoll IO(I/O Multiplexing) , linux2.6 , nginx
    worker_connections  1024;# worker process
    # multi_accept on; 
}

# http ,
http {
     # mime , mime.type
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;
    #
    access_log    /var/log/nginx/access.log;

    #sendfile nginx sendfile (zero copy ) , ,
    # on, IO , off, I/O , uptime.
    sendfile        on;
    #tcp_nopush     on;

    #
    #keepalive_timeout  0;
    keepalive_timeout  65;
    tcp_nodelay        on;
    
    # gzip
    gzip  on;
    gzip_disable "MSIE [1-6]\.(?!.*SV1)";

    #
    client_header_buffer_size    1k;
    large_client_header_buffers  4 4k;

    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;

    #
     upstream mysvr {
    #weigth ,
    # Squid 3128
    server 192.168.8.1:3128 weight=5;
    server 192.168.8.2:80  weight=1;
    server 192.168.8.3:80  weight=6;
    }


   server {
    # 80
        listen       80;
        # www.xx.com
        server_name  www.xx.com;

        #
        access_log  logs/www.xx.com.access.log  main;

    #
    location / {
          root   /root;      #
          index index.php index.html index.htm;   #

          fastcgi_pass  www.xx.com;
         fastcgi_param  SCRIPT_FILENAME  $document_root/$fastcgi_script_name; 
          include /etc/nginx/fastcgi_params;
        }

    #
    error_page   500 502 503 504 /50x.html;  
        location = /50x.html {
        root   /root;
    }

    # ,nginx
    location ~ ^/(images|javascript|js|css|flash|media|static)/ {
        root /var/www/virtual/htdocs;
        # 30 , , , , 。
        expires 30d;
    }
    #PHP FastCGI . FastCGI .
    location ~ \.php$ {
        root /root;
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME /home/www/www$fastcgi_script_name;
        include fastcgi_params;
    }
    # Nginx
    location /NginxStatus {
        stub_status            on;
        access_log              on;
        auth_basic              "NginxStatus";
        auth_basic_user_file  conf/htpasswd;
    }
    # .htxxx
    location ~ /\.ht {
        deny all;
    }
     
     }
}

, Nginx

, http :

# http ,
http {
     # mime , mime.type
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;
    #
    access_log    /var/log/nginx/access.log;

    #

    #。。。。。。。。。。

    #
     upstream mysvr {
    #weigth ,
    server 192.168.8.1x:3128 weight=5;# Squid 3128
    server 192.168.8.2x:80  weight=1;
    server 192.168.8.3x:80  weight=6;
    }

   upstream mysvr2 {
    #weigth ,

    server 192.168.8.x:80  weight=1;
    server 192.168.8.x:80  weight=6;
    }

   #
   server {
    # 192.168.8.x 80
        listen       80;
        server_name  192.168.8.x;

      # aspx
    location ~ .*\.aspx$ {

         root   /root;      #
          index index.php index.html index.htm;   #

          proxy_pass  http://mysvr ;# mysvr

          # .

          proxy_redirect off;

          # Web X-Forwarded-For IP
          proxy_set_header Host $host;
          proxy_set_header X-Real-IP $remote_addr;
          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
          client_max_body_size 10m;    #
          client_body_buffer_size 128k;  # ,
          proxy_connect_timeout 90;  #nginx ( )
          proxy_send_timeout 90;        # ( )
          proxy_read_timeout 90;         # , ( )
          proxy_buffer_size 4k;             # (nginx)
          proxy_buffers 4 32k;               #proxy_buffers , 32k ,
          proxy_busy_buffers_size 64k;    # (proxy_buffers*2)
          proxy_temp_file_write_size 64k;  # , , upstream

       }

     }
}

Nginx web , 。 apache ,nginx 。

nginx , nginx 。 apache ,nginx 。 , cgi,fastcgi apache web , nginx,nginx 。 。 , nginx 。nginx 。

nginx nginx, , 。

nginx ,nginx nginx nginx.conf(nginx.conf include ) 。

 

nginx 。 nginx /usr/local/nginx/nginx.conf。 /usr/local/nginx/nginx.conf.default。 .default 。.default , 。 , 。 , 。

cp /usr/local/nginx/nginx.conf /usr/local/nginx/nginx.conf-20121224

nginx.conf

/usr/loca/nginx/nginx -t
kill -HUP `cat /usr/local/nginx/nginx.pid`

#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;

events {
    worker_connections  1024;
}

。 , 。 :

  • # ,nginx 。
  • ( ,worker_processes pid), ( ,1 logs/nginx.pid) ( ,"logs/error.log notice")
  • events 여러 개의 키 명령 을 매개 변수 로 포함 할 수 있다.이 하위 명령 들 은 괄호 로 둘러싸 여 있다.

  • nginx 는 공백 문자 (예 를 들 어 tab, 빈 칸, 줄 바 꿈 문자) 를 처리 하지 않 지만 좋 은 들 여 쓰기 가 장기 적 으로 설정 파일 을 실행 하 는 효율 을 높 일 수 있 습 니 다.좋 은 들 여 쓰기 설정 파일 을 더 유창 하 게 읽 을 수 있 습 니 다. 몇 달 전에 도 설정 정책 을 쉽게 알 수 있 습 니 다.
    다음은 프로필 을 계속 읽 겠 습 니 다.
    http {
        include       mime.types;
        default_type  application/octet-stream;
    
        #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
        #                  '$status $body_bytes_sent "$http_referer" '
        #                  '"$http_user_agent" "$http_x_forwarded_for"';
    
        #access_log  logs/access.log  main;
    
        sendfile        on;
        #tcp_nopush     on;
    
        #keepalive_timeout  0;
        keepalive_timeout  65;
    
        #gzip  on;

    "http {}" 블록의 시작 은 프로필 의 시작 과 같이 표준 설정 입 니 다. 수정 할 필요 가 없습니다.여기 서 우 리 는 이러한 요소 에 주 의 를 기울 여야 한다.
    이 부분 내용 의 시작 "include" 문 구 는 / usr / loca / nginx / ime. types 파일 에서 nginx. conf 파일 include 문 구 를 포함 합 니 다.include 는 ningx. conf 파일 의 가 독성 과 조직 성에 유용 합 니 다.
    include 를 너무 많이 사용 할 수 없습니다. 너무 많은 재 귀적 인 include 파일 이 혼 란 스 러 울 수 있 으 므 로 include 를 합 리 적 으로 사용 하여 설정 파일 의 선명 함 과 관 리 를 확보 해 야 합 니 다.
    log 를 제거 할 수 있 습 니 다.format 명령 전의 설명 과 이 몇 줄 의 변 수 를 기록 하고 싶 은 정 보 를 수정 합 니 다.
    gzip 명령 은 nginx 에 게 gzip 압축 방식 을 사용 하여 대역 폭 사용 을 낮 추고 전송 속 도 를 가속 화 하 라 고 알려 줍 니 다.gzip 압축 을 사용 하려 면 설정 파일 의 gzip 위치 에 다음 설정 을 추가 해 야 합 니 다.
            gzip on;
            gzip_http_version 1.1;
            gzip_comp_level 2;
            gzip_types    text/plain text/html text/css
                          application/x-javascript text/xml
                          application/xml application/xml+rss
                          text/javascript;

    gizp 압축 을 사용 하 는 것 은 대가 가 없 는 것 이 아 닙 니 다.대역 폭 을 낮 추 는 동시에 CPU 사용 도 늘 렸 다.gzip_cop_level 의 매개 변수 수치 범위 1 - 9, 9 는 CPU 와 1 을 가장 많이 사용 하고 기본 값 은 1 입 니 다.
     
    또한, 위의 세 션 인 'http {' 는 끝 '}' 을 포함 하지 않 으 며, 나머지 부분 은 아래 에서 계속 합 니 다.
    가상 컴퓨터 서버 설정
    저희 집 은 nginx. conf 입 니 다. 다음 프로필 은 이 렇 습 니 다.
            server {
                    listen       80;
                    server_name  localhost;
    
                    access_log  logs/localhost.access.log  main;
    
                    location / {
                        root   html;
                        index  index.html index.htm;
                    }
            }
    }

    http {} 블록 이 여기 서 끝 나 는 것 을 볼 수 있 습 니 다.
    server 명령 블록 은 위의 예 에서 보 듯 이 우리 nginx 사용자 가 주로 자신의 가상 호스트 를 설정 하 는 곳 입 니 다.server 블록 에는 중요 한 명령 이 많 습 니 다.listen 명령 은 nginx 가 특정한 hostname, ip 또는 tcp 포트 에서 연결 을 감청 하 는 것 을 알려 줍 니 다.기본적으로 http 서 비 스 는 80 포트 에서 실 행 됩 니 다.이 listen 명령 들 은 모두 유효 합 니 다.
    listen     127.0.0.1:80;
    listen     localhost:80;
    
    listen     127.0.0.1:8080;
    listen     localhost:8080;
    
    listen     192.168.3.105:80;
    listen     192.168.3.105:8080;
    
    listen     80;
    listen     *:80;
    listen     8080;
    listen     *:8080;
    
    listen     12.34.56.77:80;
    listen     12.34.56.78:80;
    listen     12.34.56.79:80;

    이런 예 에서 우 리 는 많은 다른 표현 방식 을 볼 수 있다.
    1 조 2 개 명령 은 서버 감청 이 127.0.0.1 또는 localhost 의 80 포트 에 있 음 을 가리 키 며, localhost 는 보통 / etc / hosts 가 127.0.0.1 을 가리 키 는 것 으로 정의 합 니 다.
    2 조 는 80 이 아 닌 포트 번호 감청 을 제외 하고 1 조 와 같다.
    세 번 째 예 는 서버 감청 이 192.168.3.105 의 80 과 8080 포트 에 있 음 을 정의 한다.
    네 번 째 예 는 모든 주소 에서 특정한 포트 를 감청 하 는 것 이다.listen 80 은 listen *: 80 과 같 고 listen 8080 은 listen *: 80 과 같 습 니 다.
    마지막 예 는 서버 가 12.34.56.77 / 78 / 79 의 80 포트 에 있 는 요청 만 감청 하도록 설정 합 니 다.
    server_name 명령 은 도 메 인 이름 을 기반 으로 하 는 가상 호스트 를 설정 할 수 있 습 니 다. 요청 한 머리 내용 에 따라 ip 서버 에서 여러 도 메 인 이름 을 설정 할 수 있 습 니 다.다음은 이 servername 의 매개 변 수 는 유효 합 니 다:
    server_name   nginx.cn;
    server_name   nginx.cn www.nginx.cn;
    server_name   *.nginx.cn;
    server_name   .nginx.cn;
    
    server_name   nginx.*;
    
    server_name   nginx.cng bucknell.net brackley.org;
    server_name   localhost litchfield bleddington;
    
    server_name   "";

    여러 도 메 인 이름 사 이 를 빈 칸 으로 구분 합 니 다.nginx 는 가상 호스트 에 하나 이상 의 이름 이 있 거나 마스크 '*' 를 사용 하여 가상 호스트 의 이름 을 설정 할 수 있 습 니 다.위의 예 에서 우 리 는 매우 많은 특수 한 점 을 보 았 다.
    첫 번 째 예, 먼저 server 를 정의 합 니 다.nginx. cnhttp://nginx.cn이 호스트 에 요청 할 겁 니 다.두 번 째 예 는 nginx. cn 과 www. nginx. cn 을 설정 하 였 습 니 다. 그러면http://nginx.cn화해시키다http://www.nginx.cn이 호스트 에 요청 할 겁 니 다.
    *. nginx. cn 과. nginx. cn 은 같은 설정 입 니 다. 이 호스트 는 nginx. cn 에서 온 모든 하위 도 메 인 이름 을 처리 합 니 다. 예 를 들 어 www. nginx. cn, blog. nginx. cn 등 2 조 servername nginx. * 를 설정 하고 서버 를 설정 하여 nginx 로 시작 하 는 모든 요청 을 처리 합 니 다.예 를 들 어 nginx. com, nginx. cn, nginx. net, nginx. baidu. com 다음 조 첫 번 째 servername 설정, 호스트 처리 요청 을 설정 합 니 다.nginx 는 유효한 도 메 인 이름 이 아 닌 이름 을 설정 할 수 있 습 니 다.예 를 들 어 다음 설정 에서 우 리 는 유효한 도 메 인 이름 이 아 닌 세 가지 예 를 볼 수 있 습 니 다. localhost, litchfiled 와 bledington.nginx 는 요청 한 HTTP 헤더 의 도 메 인 이름 만 찾 지만 도 메 인 이름 이 올 바른 지 판단 하지 않 습 니 다. 이 예 에서 호스트 이름 은 / etc / hosts 에 할당 할 수 있 습 니 다.이 컴퓨터 에서 디 버 깅 할 때 도 메 인 이름 이 아 닌 호스트 이름 을 사용 하 는 것 이 더 적합 할 때 가 있 습 니 다.
    마지막 예, servername 은 빈 따옴표 로 설정 되 어 있 습 니 다. nginx 에 hostname 이 없 는 모든 요청 을 캡 처 하거나 hostname 이 다른 server 에 없 음 을 알려 줍 니 다.name 에서 지정 한 것 입 니 다.
     
    우 리 는 다음 server 명령 블록 을 계속 분석 하고 access 를 봅 시다.log 명령.
    access_log logs/nginx.access.log;
    access_log /srv/http/ducklington.org/logs/access.log;
    access_log /var/log/nginx/access/ducklington.org;
    access_log off;

    첫 번 째 예, 로 그 는 상대 경 로 를 사용 합 니 다. 로그 파일 은 설정 파일 과 같은 등급 의 디 렉 터 리 에 저 장 됩 니 다. 즉, 로 그 는 / usr / local / nginx / logs / nginx. access. log 에 저 장 됩 니 다.다음 두 가지 예 는 완전한 절대 경 로 를 정의 했다.마지막 예 는 access log 를 닫 고 파일 에 접근 로 그 를 기록 하지 않 습 니 다.
    server 블록 의 마지막 부분 은 location 명령 블록 입 니 다. client 의 서로 다른 요청 목표 에 대해 location 는 서버 의 서로 다른 응답 을 설정 하 는 데 사 용 됩 니 다.
    servername 명령 설정 nginx 처리 요청 은 요청 에 포 함 된 정 보 를 사용 하 는 것 과 마찬가지 로 location 명령 설정 은 서로 다른 위치 자원 의 요청 에 어떻게 응답 하 는 지 설정 합 니 다.예 를 들 면:
    location / { }
    location /images/ { }
    location /blog/ { }
    location /planet/ { }
    location /planet/blog/ { }
    
    location ~ IndexPage\.php$ { }
    location ~ ^/BlogPlanet(/|/index\.php)$ { }
    
    location ~* \.(pl|cgi|perl|prl)$ { }
    location ~* \.(md|mdwn|txt|mkdn)$ { }
    
    location ^~ /images/IndexPage/ { }
    location ^~ /blog/BlogPlanet/ { }
    
    location = / { }

    앞의 다섯 가지 예 는 url 도 메 인 이름 뒤에 시 작 된 부분 과 글자 별로 일치 합 니 다.요청 을 가정 하 다http://www.nginx.cn, 우 리 는 servername 이 www. nginx. cn 과 일치 하면 "location /" 명령 이 이 요청 을 캡 처 합 니 다.nginx 는 일치 도가 가장 높 은 location 을 사용 합 니 다.예 를 들 면http://ducklington.org/planet/blog/화해시키다http://ducklington.org/planet/blog/about/"location / planet / blog" 가 아 닌 "location / planet / blog" 와 일치 합 니 다.
     위치 설정
    특정한 요청 에 대해 nginx 가 하나의 location 에 일치 하면 처리 합 니 다.그러면 이 요청 의 응답 내용 은 이 location 블록 에 있 는 명령 에 의 해 결 정 됩 니 다.우 리 는 먼저 가장 기본 적 인 location 설정 블록 을 보 겠 습 니 다.
    location / {
        root   html;
        index  index.html index.htm;
    }

    이 예 에서 중국어 파일 루트 (doucument root) 는 html / 디 렉 터 리 에 있 습 니 다.nginx 의 설치 디 렉 터 리 / usr / local / nginx 에 따 르 면 이 location 의 전체 경 로 는 / usr / local / nginx / html 입 니 다./ blog / includes / styles. css 파일 에 접근 요청 이 다른 location 블록 과 일치 하지 않 는 다 고 가정 하면 nginx 는 파일 시스템 에 있 는 / usr / local / nginx / html / blog / includes / styles. css 로 응답 합 니 다.물론 루트 명령 을 절대 경로 로 설정 할 수도 있 습 니 다.
    index 명령 은 nginx 에 어떤 자원 을 사용 하 는 지 알려 줍 니 다. 요청 에 파일 이름 이 없 으 면.하면, 만약, 만약...http://.ducklington.org/자원 위 치 를 / usr / local / nginx / html / index. html 로 보완 합 니 다.index 가 여러 파일 을 설정 하면 nginx 는 첫 번 째 존재 하 는 보완 자원 을 찾 을 때 까지 순서대로 처리 합 니 다.index. html 가 관련 디 렉 터 리 에 없 으 면 index. htm 를 사용 합 니 다.둘 다 존재 하지 않 으 면 404 오 류 를 되 돌려 줍 니 다.
    다른 location 명령 의 예 를 보 여 줍 니 다. 이 location 명령 들 은 모두 Ducklington. org 의 server 명령 블록 에 있 습 니 다.
    root /srv/www/ducklington.org/public_html;
    location / {
    
        index  index.html index.htm;
    }
    
    location ~ \.php$ {
        gzip off;
        include fastcgi_params;
        fastcgi_pass  127.0.0.1:9000;
        fastcgi_index index.pl;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    }

    이 예 에서. php 로 끝 나 는 모든 요청 은 두 번 째 location 블록 으로 처 리 됩 니 다.두 번 째 문장 블록 은 모든 요청 에 fastcgi 핸들 을 지정 합 니 다.다른 요청 은 nginx 에서 첫 번 째 location 블록 으로 처리 합 니 다.
    청구 하 다.http://ducklington.org// srv / www / ducklington. org / publichtml / index. html 이 존재 하지 않 는 다 면 / srv / www / ducklington. org / publichtml / index. htm, 둘 다 존재 하지 않 으 면 404 오 류 를 되 돌려 줍 니 다.
    청구 하 다. http://ducklington.org/blog// srv / www / ducklington. org / publichtml / blog / index. html 존재 하지 않 으 면 / srv / www / ducklington. org / publichtml / blog / index. htm, 둘 다 존재 하지 않 으 면 404 오 류 를 되 돌려 줍 니 다.
    청구 하 다.http://ducklington.org/tasks.php/ srv / www / ducklington. org / public 에 있 는 fastcgi 에 보 내 집 니 다.html / tasks. php 파일
    청구 하 다. http://ducklington.org/squire/roster.php에 자리잡다,... /srv/www/ducklington.org/public_html / squire / roster. pl 의 파일 을 되 돌려 줍 니 다.
    구체 적 인 location 매 칭 규칙 은 말 하지 않 겠 습 니 다. 모 르 는 것 은 여기 nginx location 매 칭 을 볼 수 있 습 니 다.
    최선 의 실천
    위의 예 와 설명 은 nginx server 를 설정 할 수 있 도록 충분 할 것 입 니 다.다음은 nginx server 를 설정 하 는 가장 좋 은 실천 을 보 여 줍 니 다.
    우선, 구체 적 으로 설정 할 server 명령 블록 의 모든 명령 을 파일 에 넣 은 다음 include 문 구 를 사용 하여 설정 파일 에 포함 시 킵 니 다.
    예 를 들 어 Ducklington. org 도 메 인 이름 을 연결 하려 면 먼저 Ducklington. org 의 server 명령 블록 을 / srv / www / ducklington. org / nginx. conf 에 설정 합 니 다.그리고 명령 include / srv / www / ducklington. org / nginx. conf 를 추가 합 니 다.설정 파일 의 http 블록 에 있 습 니 다.이렇게:
    http {
          # [...]
    
          include /srv/www/ducklington.org/nginx.conf;
    
          # [...]
    }

좋은 웹페이지 즐겨찾기