>  기사  >  운영 및 유지보수  >  Nginx가 그레이스케일 게시를 구현하는 방법은 무엇입니까?

Nginx가 그레이스케일 게시를 구현하는 방법은 무엇입니까?

PHPz
PHPz앞으로
2023-05-19 23:10:052764검색

방법 1: 로드 밸런싱 가중치를 조정하여

로드 밸런싱은 기존 네트워크 구조를 기반으로 구축되어 네트워크 장비 및 서버의 대역폭을 확장하고 처리량을 늘리며 네트워크 데이터를 향상시키는 저렴하고 효과적이며 투명한 방법을 제공합니다. 처리 기능을 제공하여 네트워크 유연성과 가용성을 향상시킵니다.

                  로드 밸런싱, 영어 이름은 로드 밸런싱입니다. 이는 작업을 완료하기 위해 웹 서버, FTP 서버, 엔터프라이즈 키 애플리케이션 서버 및 기타 미션 크리티컬 서버 등과 같은 여러 운영 단위에 실행을 할당하는 것을 의미합니다. 과제를 함께 합니다.

Nginx가 그레이스케일 게시를 구현하는 방법은 무엇입니까?

간단한 구성은 다음과 같습니다.

http { 
  upstream cluster { 
    ip_hash; #如果你的系统中没有使用第三方缓存管理工具 ,建议使用此方式
    server 192.168.1.210:80 weight=5; 
    server 192.168.1.211:80 weight=3; 
    server 192.168.1.212:80 weight=1; 
  } 
  
  server { 
    listen 80; 
 
  location / { 
  
  proxy_next_upstream   error timeout;
  proxy_redirect     off;
  proxy_set_header    host $host;
  #proxy_set_header    x-real-ip $remote_addr;
  proxy_set_header    x-real-ip $http_x_forwarded_for;
  proxy_set_header    x-forwarded-for $proxy_add_x_forwarded_for;
  client_max_body_size  100m;
  client_body_buffer_size 256k;
  proxy_connect_timeout  180;
  proxy_send_timeout   180;
  proxy_read_timeout   180;
  proxy_buffer_size    8k;
  proxy_buffers      8 64k;
  proxy_busy_buffers_size 128k;
  proxy_temp_file_write_size 128k;
  proxy_pass http://cluster; 
    } 
  } 
}

이 그레이스케일 게시 방법은 가중치를 통해 구현되지만 이 방법은 노드의 동작을 수정하는 데에만 적합하며 애플리케이션이 정확히 동일해야 합니다. 효과는 노드가 증가하거나 삭제 후 로드 용량 조정의 궁극적인 목표는 트래픽 균형을 유지하는 것입니다.

방법 2. nginx+lua를 사용하여 웹 프로젝트의 그레이스케일 게시 달성

location / {
 content_by_lua '
      myip = ngx.req.get_headers()["x-real-ip"]
      if myip == nil then
        myip = ngx.req.get_headers()["x_forwarded_for"]
      end
      if myip == nil then
        myip = ngx.var.remote_addr
      end
      if myip == "公司出口ip" then
        ngx.exec("@client")
      else
        ngx.exec("@client_test")
      end
    ';
} 

location @client{
  proxy_next_upstream   error timeout;
  proxy_redirect     off;
  proxy_set_header    host $host;
  #proxy_set_header    x-real-ip $remote_addr;
  proxy_set_header    x-real-ip $http_x_forwarded_for;
  proxy_set_header    x-forwarded-for $proxy_add_x_forwarded_for;
  client_max_body_size  100m;
  client_body_buffer_size 256k;
  proxy_connect_timeout  180;
  proxy_send_timeout   180;
  proxy_read_timeout   180;
  proxy_buffer_size    8k;
  proxy_buffers      8 64k;
  proxy_busy_buffers_size 128k;
  proxy_temp_file_write_size 128k;
  proxy_pass http://client;

}
location @client_test{
  proxy_next_upstream   error timeout;
  proxy_redirect     off;
  proxy_set_header    host $host;
  #proxy_set_header    x-real-ip $remote_addr;
  proxy_set_header    x-real-ip $http_x_forwarded_for;
  proxy_set_header    x-forwarded-for $proxy_add_x_forwarded_for;
  client_max_body_size  100m;
  client_body_buffer_size 256k;
  proxy_connect_timeout  180;
  proxy_send_timeout   180;
  proxy_read_timeout   180;
  proxy_buffer_size    8k;
  proxy_buffers      8 64k;
  proxy_busy_buffers_size 128k;
  proxy_temp_file_write_size 128k;
  proxy_pass http://client_test;
}

nginx+lua 모듈을 사용하기 때문에 이 방법은 많은 시나리오에 적합하고 매우 강력하지만 문제는 Lua 구문을 많이 배워야 합니다.

방법 3. http 헤더 정보를 사용하여 판단 + 가중치(grayscale 값)

HTTP 요청 전송 과정에서 user-agent, 호스트, 리퍼러, 쿠키 및 기타 정보가 자동으로 가져옵니다. IP 주소 세그먼트, 사용자 에이전트, 쿠키 정보 등만 결정하면 됩니다. 여기서는 쿠키를 예로 들어 보겠습니다.

물론 여기서 해결해야 할 두 가지 문제는 다음과 같습니다.

1 정적 페이지를 처음 방문하면 쿠키가 생성되지 않을 수 있습니다.

2 코드를 통해 경로를 동적으로 설정해야 합니다.

3 가중치를 통해 회색조 값을 제어합니다.

예제를 사용하여 위의 문제 ②와 ③을 해결하기 위해

upstream tts_v6 {
    server 192.168.3.81:5280 max_fails=1 fail_timeout=60;
}
upstream tts_v7 {
    server 192.168.3.81:5380 max_fails=1 fail_timeout=60;
}
upstream default {  #通过upstream default + weight节点控制权重
    server 192.168.3.81:5280 max_fails=1 fail_timeout=60 weight=5;
    server 192.168.3.81:5380 max_fails=1 fail_timeout=60 weight=1;
}
server {
    listen 80;
    server_name test.taotaosou.com;
    access_log logs/test.taotaosou.com.log main buffer=32k;
    #match cookie
    set $group "default";
    if ($http_cookie ~* "tts_version_id=tts1"){ #动态控制路由
        set $group tts_v6;
    }
    if ($http_cookie ~* "tts_version_id=tts2"){
        set $group tts_v7;
    }
    location / {            
        proxy_pass http://$group;
        proxy_set_header  host       $host;
        proxy_set_header  x-real-ip    $remote_addr;
        proxy_set_header  x-forwarded-for $proxy_add_x_forwarded_for;
        index index.html index.htm;
    }
 }

문제 ①의 경우 인덱스 페이지의 스크립트를 통해 동적 페이지에 액세스할 수 있습니다.

예:

<script src="https://test.taotaosou.com/cookieinfo.php" /><script>

또한 다음을 결정해야 합니다. cookieinfo.php

<?php

if(!session_id())
{
 session_start();
}
if(!isset($_cookie["tts_version_id"]))
{
 $cookievalue = $_server[&#39;server_port&#39;]==5280?"tts1":"tts2";
 setcookie("tts_version_id", $cookievalue, time()+3600, "/");
}
?>
에서 쿠키를 생성하세요

위 내용은 Nginx가 그레이스케일 게시를 구현하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제