nginx 역방향 에이전트, 부하 균형, 크로스 필드 문제

9928 단어 nginx
nginx 의 응용 장면
1. http 서버: Nginx 는 http 서버 로 http 서 비 스 를 독립 적 으로 제공 할 수 있 습 니 다.정적 웹 서버 로 사용 할 수 있 습 니 다.2. 가상 호스트: 한 대의 서버 가 여러 개의 사 이 트 를 가상 으로 만 들 수 있 습 니 다.예 를 들 어 개인 사이트 에서 사용 하 는 가상 호스트.
3. 역방향 프 록 시: 사이트 의 방 문 량 이 어느 정도 에 이 르 면 한 대의 호스트 가 사용자 의 요 구 를 만족 시 키 지 못 할 때 여러 대의 서버 클 러 스 터 를 사용 하여 Nginx 를 역방향 프 록 시 로 할 수 있 습 니 다.4. 부하 균형: 그리고 여러 대의 서버 가 평균 적 으로 부 하 를 분담 할 수 있 으 며 특정한 서버 의 부하 가 높 은 지연 으로 인해 특정한 서버 가 방치 되 지 않 습 니 다.
1. http 역방향 프 록 시 설정
server {
//       
		listen       8080;                                                         
		server_name  localhost;                                               
		client_max_body_size 1024M;
	 
		location / {
		//          
			proxy_pass http://localhost:8082;
			proxy_set_header Host $host:$server_port;
		}
	}

프로필 을 저장 하고 Nginx 를 다시 시작 합 니 다. localhost 에 접근 할 때 localhost: 8080 에 접근 하 는 것 과 같 습 니 다.
2. 부하 균형 설정
2.1 부하 균형 설정
부하 균형 은 웹 서버, FTP 서버 등 여러 서비스 셀 에 할당 요청 을 수행 해 작업 임 무 를 함께 수행 하 는 것 을 의미 하 는 Nginx 가 자주 사용 하 는 기능 이다.쉽게 말 하면 2 대 이상 의 서버 가 있 을 때 규칙 에 따라 무 작위 로 요청 을 지정 한 서버 에 나 누 어 처리 하 는 것 이다. 부하 균형 설정 은 일반적으로 역방향 프 록 시 를 동시에 설정 하고 역방향 프 록 시 를 통 해 부하 균형 으로 전환 해 야 한다.한편, Nginx 는 현재 3 가지 부하 균형 전략 을 지원 하고 2 가지 자주 사용 하 는 제3자 전략 도 있다.
2.1.1、 RR
이것 은 Nginx 의 기본 정책 입 니 다. 요청 마다 시간 순서에 따라 다른 백 엔 드 서버 에 할당 되 며, 백 엔 드 서버 다운 이 떨 어 지면 자동 으로 제거 할 수 있 습 니 다.
upstream test {
    server localhost:8080;
    server localhost:8081;
}
server {
    listen       80;                                                         
    server_name  localhost;                                               
    client_max_body_size 1024M;
 
    location / {
        proxy_pass http://test;
        proxy_set_header Host $host:$server_port;
    }
}

upstream 의 서비스 8080 이 끊 기 면 방문 합 니 다.http://localhost 때 에 도 문제 가 없 을 것 이 고, 기본 값 으로 넘 어 갈 것 이다http://localhost:8081,。Nginx 는 서버 상 태 를 자동 으로 판단 하기 때문에 서버 가 접근 할 수 없 으 면 이 서버 로 넘 어가 지 않 기 때문에 서버 한 대가 끊 겨 사용 에 영향 을 주 는 상황 도 피 할 수 있 습 니 다. 이것 이 바로 Nginx 의 기본 정책 RR 입 니 다.
2.1.2 가중치
모든 서비스의 폴 링 확률 을 지정 하고 weight 와 방문 비율 이 정비례 하여 백 엔 드 서버 의 성능 이 고 르 지 않 은 경우 에 사용 합 니 다.
upstream test {
    server localhost:8080 weight=9;
    server localhost:8081 weight=1;
}
server {
    listen       80;                                                         
    server_name  localhost;                                               
    client_max_body_size 1024M;
 
    location / {
        proxy_pass http://test;
        proxy_set_header Host $host:$server_port;
    }
}

2.1.3 、ip_hash
위의 두 가지 방식 모두 문제 가 있 습 니 다. 바로 다음 요청 이 올 때 다른 서버 에 요청 할 수 있 습 니 다. 프로그램 이 상태 가 없 을 때 (예 를 들 어 서버 에서 session 으로 데 이 터 를 저장 하 는 것) 이 아 닐 때 큰 문제 가 있 습 니 다.예 를 들 어 로그 인 정 보 를 session 에 저장 하면 다른 서버 로 이동 할 때 다시 로그 인 해 야 하기 때문에 한 고객 이 한 서버 만 방문 해 야 할 때 가 많 습 니 다. 그러면 iphash 됐어, iphash 의 모든 요청 은 ip 에 접근 하 는 hash 결과 에 따라 분 배 됩 니 다. 모든 방문객 이 백 엔 드 서버 에 고정 적 으로 접근 하면 session 문 제 를 해결 할 수 있 습 니 다.
upstream test {
    ip_hash;
    server localhost:8080;
    server localhost:8081;
}
server {
    listen       80;                                                         
    server_name  localhost;                                               
    client_max_body_size 1024M;
 
    location / {
        proxy_pass http://test;
        proxy_set_header Host $host:$server_port;
    }
}

3. 도 메 인 문제
웹 개발 분야 에 서 는 전후 단 분리 모델 을 자주 사용한다.이러한 모드 에서 전단 과 백 엔 드 는 각각 독립 된 웹 프로그램 이다. 예 를 들 어 백 엔 드 는 자바 프로그램 이 고 전단 은 React 또는 Vue 응용 이다.각자 독립 된 웹 앱 이 서로 방문 할 때 반드시 크로스 필드 문제 가 존재 합 니 다.크로스 필드 문 제 를 해결 하 는 데 는 일반적으로 두 가지 사고 가 있다.
CORS: 백 엔 드 서버 에 HTTP 응답 헤드 를 설정 하고 접근 할 도 메 인 이름 을 Access - Control - Allow - Origin 에 추가 합 니 다.jsonp: 백 엔 드 를 요청 에 따라 json 데 이 터 를 구성 하고 되 돌려 줍 니 다. 전단 은 jsonp 로 도 메 인 을 뛰 어 넘 습 니 다.Nginx 는 CORS 에 대해 크로스 도 메 인 솔 루 션 을 제공 합 니 다. 예 를 들 어 전단 백 엔 드 에 크로스 도 메 인 이 존재 할 때 전단 과 백 엔 드 가 http 를 사용 하여 상호작용 을 하면 요청 이 거 부 됩 니 다.이 때 는 백 스테이지 서비스 응답 헤드 를 설정 하 는 방식 으로 해결 할 수 있다.
server {
    listen 8080;
 
    server_name localhost;
 
	location / {
	
	    add_header 'Access-Control-Allow-Origin' '$http_origin';
	    add_header 'Access-Control-Allow-Credentials' 'true';
	    add_header 'Access-Control-Allow-Methods' 'POST, GET, OPTIONS, DELETE, PUT';
	    add_header 'Access-Control-Allow-Headers' 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
	
	    #  OPTIONS  ,set response header   204  
	    if ($request_method = 'OPTIONS') {
	            return 204;
	    }
	
	    proxy_set_header X-Real-IP $remote_addr;
	    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
	
	    proxy_pass http://test;
	}
}

좋은 웹페이지 즐겨찾기