방법 1: 로드 밸런싱 가중치를 조정하여
로드 밸런싱은 기존 네트워크 구조를 기반으로 구축되어 네트워크 장비 및 서버의 대역폭을 확장하고 처리량을 늘리며 네트워크 데이터를 향상시키는 저렴하고 효과적이며 투명한 방법을 제공합니다. 처리 기능을 제공하여 네트워크 유연성과 가용성을 향상시킵니다.
로드 밸런싱, 영어 이름은 로드 밸런싱입니다. 이는 작업을 완료하기 위해 웹 서버, FTP 서버, 엔터프라이즈 키 애플리케이션 서버 및 기타 미션 크리티컬 서버 등과 같은 여러 운영 단위에 실행을 할당하는 것을 의미합니다. 과제를 함께 합니다.
간단한 구성은 다음과 같습니다.
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['server_port']==5280?"tts1":"tts2"; setcookie("tts_version_id", $cookievalue, time()+3600, "/"); } ?>에서 쿠키를 생성하세요
위 내용은 Nginx가 그레이스케일 게시를 구현하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!