Nginx 의 역할, 프로필 상세 설명 - 학습 노트

10909 단어 Nginx분포 식
Nginx 의 역할, 부하 균형 정책, 프로필 상세 설명
  • 1. 머리말
  • 둘 째 는 Nginx
  • 가 무엇 입 니까?
  • 3. Nginx 의 역할
  • 4. Nginx 설정 상세 설명
  • 머리말
    현재 많은 회사 들 이 Nginx 를 사용 하고 있 습 니 다. 그렇다면 도대체 무엇이 Nginx 인지 생각해 본 적 이 있 습 니까?Nginx 도대체 무슨 작용 이 있 습 니까?왜 우 리 는 그것 을 써 야 합 니까?
    2. Nginx 가 무엇 입 니까?Nginx 는 고성능, 경량급 Web 서버 / 역방향 프 록 시 및 이메일 IMAP/POP3 프 록 시 서버 입 니 다.메모리 가 적 고 병발 능력 이 강 한 것 이 특징 이다.
    3. Nginx 의 역할
    1. 역방향 에이전트
    역방향 프 록 시 는 프 록 시 서버 의 일종 이다.서버 는 클 라 이언 트 의 요청 에 따라 연 결 된 한 그룹 이나 여러 그룹의 백 엔 드 서버 (예 를 들 어 웹 서버) 에서 자원 을 가 져 온 다음 에 이 자원 을 클 라 이언 트 에 게 되 돌려 줍 니 다. 클 라 이언 트 는 프 록 시 뒤에 있 는 서버 클 라 이언 트 의 존 재 를 모 르 고 프 록 시 IP 주 소 를 되 돌려 줍 니 다.
    2. 동적 과 정적 분리Nginx 요청 을 분리 할 수 있 기 때문에 이 를 이용 하여 동적 요청 과 정적 요청 을 분리 할 수 있 습 니 다.이렇게 하면 정적 자원 을 Nginx 서버 에 배치 하고 백 엔 드 코드 를 tomcat 등 용기 에 배치 하면 동적 과 정적 분 리 를 실현 할 수 있다.
    3. 부하 균형Nginx 역방향 프 록 시 능력 이 있 기 때문에 Nginx 데이터 트 래 픽 을 일정한 규칙 에 따라 여러 서버 에 분담 하여 집행 하여 각 서버 의 압력 을 줄 이 고 여러 대의 서버 (클 러 스 터 형식) 가 공동으로 작업 임 무 를 완성 하여 데이터 의 스루풋 을 높 일 수 있다.
    Nginx 의 부하 균형 정책:
    매개 변수
    설명 하 다.
    어떠한 인자 도 쓰 지 않 음
    기본 폴 링
    weight
    중시 하 다
    ip_hash
    ip 에 따라 분배 하 다
    least_conn
    최소 연결
    url_hash (제3자)
    URL 에 따라 할당
    air (제3자)
    응답 시간
    부하 균형 노드 는 다음 과 같은 선택 가능 한 매개 변수 가 있 습 니 다.
    매개 변수
    설명 하 다.
    fail_timeout max_fails 와 결합 하여 사용 10smax_fails fail_timeout 매개 변수 설정 시간 내 에 실패 횟수 max_fails 에 도달 하면 Nginx 서버 가 사용 할 수 없다 고 생각 합 니 다 1backup
    이 서버 를 예비 서버 로 표시 합 니 다.홈 서버 가 멈 추 면 요청 이 여기에 전 송 됩 니 다.
    down
    태그 서버 가 영구적 으로 정지 되 었 습 니 다.Nginx 연결 탐지 기반 max_fails 설정 Nginx 서버 노드 와 통신 하려 는 시도 실패 횟수.fail_timeout 매개 변수 가 정 의 된 시간 동안 실패 한 횟수 가 max_fails 설정 한 값 에 달 했 습 니 다. Nginx 이 서버 노드 를 사용 할 수 없다 고 생각 하고 정책 에 따라 다른 사용 가능 한 서버 노드 로 요청 합 니 다.다음 fail_timeout 시간 주기 에 이 서버 노드 는 더 이상 시도 되 지 않 고 다음 fail_timeout 시간 주기 에 야 시도 된다.여기 주의 하 세 요 fail_timeout 는 이중 적 인 의미 가 있 습 니 다.max_fails 실패 한 시도 횟수 는 기본적으로 1 입 니 다.0 으로 설정 하면 시도 횟수 를 집계 하지 않 고 서버 가 계속 사용 할 수 있다 고 생각 합 니 다.명령 proxy_next_upstream, fastcgi_next_upstream, memcached_next_upstream 을 통 해 실패 한 시 도 를 설정 할 수 있 습 니 다.기본 설정 시 http_404 상 태 는 실패 한 시도 로 간주 되 지 않 습 니 다.
    3.1). 문의 이것 은 upstream 모듈 의 기본 부하 균형 정책 입 니 다.모든 요청 은 시간 순서에 따라 백 엔 드 서버 에 하나씩 배 치 됩 니 다.
    예:
    	upstream lixiang.test {
    		#  (  )
    	    server 192.168.0.1:8080 max_fails=3 fail_timeout=30s;
    	    server 192.168.0.2:8080 max_fails=3 fail_timeout=30s;
    	    server 192.168.0.3:8080 backup;
        }
    

    주의:
  • 부족 한 설정 은 폴 링 전략 입 니 다.
  • 폴 링 에서 서버 다운 이 떨 어 지면 자동 으로 서버 를 제거 합 니 다.
  • 이 정책 은 서버 설정 이 상당 하고 상태 가 없 으 며 짧 고 빠 른 서비스 에 적합 합 니 다.

  • 3.2). 가중치 weight폴 링 전략 을 바탕 으로 weight 매개 변 수 를 통 해 폴 링 의 비중 을 지정 합 니 다.그 중에서 weight 의 기본 값 은 1 이 고 weight 값 이 클 수록 분배 되 는 비중 이 클 수록 분배 되 는 확률 이 높다.
    예:
    	upstream lixiang.test {
    		#  
    	    server 192.168.0.1:8080 weight=2;
    	    server 192.168.0.2:8080 weight=3;
    	    server 192.168.0.3:8080 max_fails=3 fail_timeout=30s;
        }
    

    주의:
  • 가중치 가 높 을 수록 처리 해 야 할 요청 이 많 습 니 다.
  • 이 전략 은 least_connip_hash 를 결합 하여 사용 할 수 있다.
  • 이 정책 은 서버 의 하드웨어 설정 차이 가 비교적 큰 경우 에 적합 합 니 다.

  • 3.3). ip 에 따라 분배 ip_hashNginx 클 라 이언 트 ip 의 hash 결과 에 따라 분 배 됩 니 다.같은 ip 은 일정 시간 동안 고정된 서버 노드 에 배 치 됩 니 다. 그러면 공유 문 제 를 해결 할 수 있 습 니 다 session.
    예:
    	upstream lixiang.test {
    		ip_hash; #   + ip_hash,    ip             
    	    server 192.168.0.1:8080 weight=2;
    	    server 192.168.0.2:8080;
    	    server 192.168.0.3:8080 max_fails=3 fail_timeout=30s;
        }
    

    주의:
  • nginx 버 전 1.3.1 이전 에는 ip_hash 에서 가중치 weight 를 사용 할 수 없습니다.
  • ip_hashbackup 와 동시에 사용 할 수 없다.
  • 이 전략 은 상태 서비스 에 적합 하 다. 예 를 들 어 session.
  • 서버 를 제거 해 야 할 때 수 동 down 으로 제거 해 야 합 니 다.

  • 3.4). 최소 연결 least_connNginx 연결 수가 적은 백 엔 드 서버 에 요청 을 전달 합 니 다.
    폴 링 알고리즘 은 요청 을 각 백 엔 드 에 평균 적 으로 전달 하여 부하 가 대체적으로 같 도록 하 는 것 이다.그러나 일부 요청 이 오래 걸 리 면 서버 노드 부하 가 높 을 수 있 습 니 다.이런 상황 에서 least_conn 이런 방식 은 더욱 좋 은 부하 균형 효 과 를 거 둘 수 있다.
    예:
    	upstream lixiang.test {
    		least_conn;  #                 
    	    server 192.168.0.1:8080 weight=2;
    	    server 192.168.0.2:8080 backup;
    	    server 192.168.0.3:8080 max_fails=3 fail_timeout=30s;
        }
    

    주의:
  • 이 부하 균형 정책 은 요청 처리 시간 이 길 고 짧 아서 서버 가 과부하 되 는 상황 에 적합 합 니 다.

  • 3.5). 제3자
    제3자 의 부하 균형 전략의 실현 은 제3자 플러그 인 을 설치 해 야 한다.
    3.5.1).fair
    서버 측의 응답 시간 에 따라 요청 을 분배 하고 응답 시간 이 짧 은 우선 분배 합 니 다.
    예:
    	upstream lixiang.test {
    		fair;    #          
    	    server 192.168.0.1:8080;
    	    server 192.168.0.2:8080;
    	    server 192.168.0.3:8080;
        }
    

    3.5.2).url_hash
    접근 urlhash 결과 에 따라 요청 을 할당 하여 각각 url 을 같은 백 엔 드 서버 로 지정 하고 캐 시 명중 에 맞 춰 사용 해 야 합 니 다.같은 자원 이 여러 번 요청 하면 서로 다른 서버 에 도착 하여 불필요 한 여러 번 다운로드, 캐 시 명중률 이 높 지 않 고 일부 자원 시간의 낭 비 를 초래 할 수 있 습 니 다.url_hash 를 사용 하면 같은 url (즉 같은 자원 요청) 이 같은 서버 에 도착 하고 요청 을 받 으 면 캐 시 에서 읽 을 수 있 습 니 다.
    예:
    	upstream lixiang.test {
    		hash $request_uri;    #    url           
    	    server 192.168.0.1:8080;
    	    server 192.168.0.2:8080;
    	    server 192.168.0.3:8080;
        }
    

    4. Nginx 설정 상세 설명
    위 에서 소개 한 Nginx 관련 정 보 는 틀림없이 Nginx 에 대해 어느 정도 알 고 있 을 것 이다. 다음은 Nginx 가장 중요 한 프로필 nginx.conf 을 소개 한다.설정 파일 의 내용 에 대해 상세 한 설명 을 하면 우리 가 사용 하고 이해 할 수 있 습 니 다.
    user www-data; #    
    worker_processes  2; #        (    CPU    2  CPU)  
    
    error_log  /var/log/nginx/error.log; #        
    pid        /var/run/nginx.pid; #pid       
    
    worker_rlimit_nofile 65535; #     worker   CPU, Linux  2.4    
    
    #          
    events {
     	#epoll     IO      
     	#     linux2.6    ,      nginx   。
     	#epoll Linux         
        use   epoll;
        worker_connections  65536;#  worker process          
    }
    
    #  http   ,                  
    http {
        include       /etc/nginx/mime.types; #  mime  ,   mime.type    
        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    /var/log/nginx/access.log;  #        
        #access_log  off;  #           ,          off,       
    
    	client_header_timeout  10;   #                。        ,            ,Nginx   “Request time out(408)”  。
        client_body_timeout    10;   #                 ,    60。        ,            ,Nginx   “Request time out(408)”  。
        send_timeout           10;   #              。                  ,        ,         ,Nginx      。
      
        client_max_body_size  600m;  #                      。
        client_header_buffer_size    64k;   #             headerbuffer  。
        large_client_header_buffers  4 64k;  #                          ,“4”   ,“32K”   
    
        #   nginx      sendfile   (zero copy   )     ,      ,     on,                
        #             IO     ,     off,        I/O    ,     uptime.
        sendfile        on;
        tcp_nopush      on;  #        
        tcp_nodelay     on;  #        
    
        keepalive_timeout  60;  #                  。         ,         。
        
        #  gzip  ,              
        gzip  on;
        gzip_min_length  1k;
        gzip_buffers     4  16k;
        gzip_http_version  1.1;
        gzip_comp_level  2;
        gzip_types  text/plain application/x-javascript text/css application/xml;
        gzip_vary  on;
    
        #            
        upstream lixiang.test1 {
    	    #  (  )
    	    server 192.168.0.1:8080;
    	    server 192.168.0.1:8081;
    	    server 192.168.0.1:8082;
        }
        
        upstream lixiang.test2 {
    	    #weigth      ,             ,     1
    	    server 192.168.0.2:8081;
    	    server 192.168.0.2:8082 weight=2;
    	    server 192.168.0.2:8083 weight=3;
        }
    
    	upstream lixiang.test3 {
    	    ip_hash;   #  ip hash   ,    ip             
    	    server 192.168.0.3:8081;
    	    server 192.168.0.3:8082 weight=2;
    	    server 192.168.0.3:8083 weight=3;
        }
    
    	#    
        server {
            listen       80;   #  192.168.1.1 80  
            server_name  192.168.1.1;
            root   /data/webroot;
            
            #location URL          
            #   /lixiang/test1       lixiang.test1         
    		location /lixiang/test1 {
                proxy_pass http://lixiang.test1;
                include proxy.conf;   #             
            }
            
            #   /lixiang/test2       lixiang.test2         
    		location /lixiang/test2 {
                proxy_pass http://lixiang.test2;
            }
    
       		#    
        	location / {
            	root   /data/webroot/web;    #               
            	index index.php index.html index.htm;   #           
            	
    			proxy_pass http://lixiang.test3;   #   /       lixiang.test3         
    			
    	      	autoindex off;    #        
    			autoindex_exact_size off;   #          ,       MB,GB  ,   b  
    			autoindex_localtime on;    #                  
    			
    			#    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;
    			proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
    	    }
    		
    		#  (allow)   (deny)  ip ip   ,          ,           
    		location /nginx-status {
    			stub_status on;
    			access_log off;
    			
    			allow 192.168.10.100;
    			allow 192.168.20.0/24;
    			deny all;
    		}
    
        	#         
        	error_page   500 502 503 504 404 /50x.html;  
            location = /50x.html {
            	root   /root;
       		}
       		
       		#                 。
       		#      ,           ,                 。
       		#               ,          
       		#   .html  30d
    		#location ~ \.(html)$ {
            #	expires 30d; 
            #}
    
    		#        24h
            #location ~ .*\.(gif|jpg|jpeg|png)$ {    
    	    #	expires 24h;    
            #}
    		
    		#   .js   .css   2h
            #location ~ .*\.(js|css)$ {    
            #	expires 2h;    
            #}
            
    	    #    ,nginx    
    	    #location ~ ^/(flash|media|static)/ {
    	    #   root /data/webroot/static;
    	        #  30 ,         ,        ,      ,         。
    	    #   expires 30d;
       		#}
    	  
    	    #     .htxxx   
    	    location ~ /\.ht {
    	        deny all;
    	    }
    	    
    	     #     WEB-INF   
    		location ~ ^/(WEB-INF)/ {
    			deny all;
    		}
        }
    }
    

    좋은 웹페이지 즐겨찾기