nginx 설정 웹 소켓 부하 균형

3420 단어 Lnmp
nginx 세 션 유지
1.IP_hash
           http 에서 다음 설정 을 추가 하여 nginx 가 정상 적 인 http 요청 을 처리 할 수 있 도록 합 니 다. 일반적인 상황 에서 개발 자 는 개발 과정 에서 websocket 의 세 션 상태 session 을 집합 을 통 해 메모리 에 관리 하고 다 중 노드 분포 식 상황 에서 IP 를 사용 할 수 있 습 니 다.HASH 부하 정책 을 부하 하여 session 의 일치 하지 않 는 문 제 를 해결 합 니 다.
ip_hash         ,                     ,         。
http{
  map $http_upgrade $connection_upgrade {
    default upgrade;
    ''      close;
  }
  upstream websocket {
    ip_hash;
    server 172.17.15.86:8723 weight=2; 
    server 172.17.15.85:8723 weight=2;
  }

ip_hash 는 간단 하고 사용 하기 쉽 지만 다음 과 같은 문제 가 있 습 니 다. 백 엔 드 서버 가 다운 되면 session 을 잃 어 버 립 니 다.같은 랜 에서 온 클 라 이언 트 는 같은 백 엔 드 서버 로 전송 되 어 부하 불 균형 을 초래 할 수 있 습 니 다.CDN 네트워크 에는 적용 되 지 않 으 며, 전단 에 에이전트 가 있 는 경우 에는 적용 되 지 않 습 니 다.
다음 설정 은 server 컨 텍스트 에 추 가 됩 니 다. location 은 websocket 연결 에 사용 되 는 path 를 말 합 니 다.
server {
    listen       80;
    server_name localhost;
    access_log /var/log/nginx/yourdomain.log;
    location / {
      proxy_pass http://websocket;
      proxy_read_timeout 300s;
      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_http_version 1.1;
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection $connection_upgrade;
        }
    }
}

가장 중요 한 것 은 역방향 프 록 시 설정 에 다음 과 같은 두 줄 을 추가 하 는 것 입 니 다. 다른 부분 은 일반적인 HTTP 역방향 프 록 시 와 차이 가 없습니다.
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;

이 안의 관건 적 인 부분 은 HTTP 요청 에 다음 과 같은 머리 가 많아 졌 다 는 것 이다.
Upgrade: websocket
Connection: Upgrade

이 두 필드 는 서버 업그레이드 요청 프로 토 콜 을 웹 소켓 으로 표시 합 니 다.서버 가 요청 을 처리 한 후 다음 메시지 에 응답 합 니 다. \ # 상태 코드 는 101 입 니 다.
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: upgrade

클 라 이언 트 에 게 프로 토 콜 을 성공 적 으로 전환 하여 Websocket 프로 토 콜 로 업그레이드 하 였 음 을 알려 줍 니 다.악수 에 성공 하면 서버 측 과 클 라 이언 트 는 캐릭터 가 대등 하고 일반적인 Socket 처럼 양 방향 으로 통신 할 수 있다.HTTP 의 상호작용 을 하지 않 고 웹 소켓 의 데이터 프레임 프로 토 콜 을 시작 하여 데이터 교환 을 실현 합 니 다.
맵 명령 을 사용 하면 변 수 를 새로운 변수 로 조합 할 수 있 습 니 다. 클 라 이언 트 가 보 내 는 연결 에 Upgrade 헤드 가 있 는 지 여부 에 따라 원본 사이트 에 Connection 헤드 를 전달 할 지 여 부 를 결정 합 니 다. 이렇게 하 는 방법 은 upgrade 를 직접 전달 하 는 것 보다 더욱 우아 합 니 다.
기본적으로 연결 은 데이터 전송 60 초 후 닫 힙 니 다. proxyread_timeout 매개 변 수 는 이 시간 을 연장 하거나 원본 사이트 에서 정기 적 으로 ping 프레임 을 보 내 연결 을 유지 하고 연결 이 아직 사용 되 고 있 는 지 확인 할 수 있 습 니 다.
2. sticky_cookie_insert
         sticky 사용cookie_insert 에서 세 션 친연 관 계 를 사용 하면 같은 클 라 이언 트 의 요청 이 같은 서버 에 전 달 됩 니 다.와 iphash 의 다른 점 은 IP 를 바탕 으로 클 라 이언 트 를 판단 하 는 것 이 아니 라 쿠키 를 바탕 으로 판단 하 는 것 이다.따라서 상기 ip 를 피 할 수 있 습 니 다.hash 에서 같은 랜 에서 온 클 라 이언 트 와 전단 에이전트 가 부하 불 균형 을 초래 하 는 상황.
문법:
upstream backend {
    server backend1.example.com;
    server backend2.example.com;
    sticky_cookie_insert srv_id expires=1h domain=3evip.cn path=/;
}

설명: expires: 브 라 우 저 에서 쿠키 를 유지 하 는 시간 domain 설정: 쿠키 를 정의 하 는 도 메 인 path: 쿠키 를 위 한 경로 정의
백 엔 드 서버 자체 가 관련 메커니즘 을 통 해 session 동기 화 를 유지 합 니 다. 예 를 들 어 데이터베이스, redis, memcached 등 을 사용 하여 session 복 제 를 합 니 다.
참고:
https://blog.csdn.net/bigtree_3721/article/details/80906133
https://blog.csdn.net/weixin_34368949/article/details/92445435

좋은 웹페이지 즐겨찾기