geo 지시문은 ngx_http_geo_module 모듈에서 제공됩니다. --without-http_geo_module을 수동으로 구성하지 않는 한 기본적으로 nginx는 이 모듈을 로드합니다.
ngx_http_geo_module 모듈은 클라이언트 IP 주소에 따라 값이 달라지는 변수를 만드는 데 사용할 수 있습니다.
geo 명령
구문: geo [$address] $variable { ... }
기본값: —
구성 섹션: http
정의는 지정된 변수에서 클라이언트의 IP 주소를 가져옵니다. 기본적으로 nginx는 $remote_addr 변수에서 클라이언트 IP 주소를 가져오지만 다른 변수에서도 가져올 수 있습니다. 예:
geo $remote_addr $geo { default 0; 127.0.0.1 1; } geo $arg_ttlsa_com $geo { default 0; 127.0.0.1 1; }
이 변수의 값이 합법적인 IP 주소를 나타내지 않으면 nginx는 "255.255.255.255" 주소를 사용합니다.
nginx는 cidr 또는 주소 세그먼트를 통해 주소를 설명하고 다음 매개변수를 지원합니다.
delete: 지정된 네트워크 삭제
클라이언트 주소가 정의된 주소와 일치할 수 없는 경우 nginx는 기본값을 사용합니다. CIDR은 "0.0.0.0/0"을 사용하여 기본값을 대체할 수 있습니다.
include: 주소와 값을 정의하는 파일을 포함하며 여러 개를 포함할 수 있습니다.
프록시: 신뢰할 수 있는 주소를 정의합니다. 요청이 신뢰할 수 있는 주소에서 오면 nginx는 "X-Forwarded-For" 헤더를 사용하여 주소 정보를 얻습니다. 일반 주소와 비교하여 신뢰할 수 있는 주소는 순차적으로 감지됩니다.
proxy_recursive: 재귀 주소 검색을 활성화합니다. 재귀적 조회가 꺼진 경우 nginx는 클라이언트 주소가 신뢰할 수 있는 주소와 일치할 때 원래 클라이언트 주소 대신 "x-forwarded-for"의 마지막 주소를 사용합니다. 재귀 검색이 활성화된 경우 클라이언트 주소가 신뢰할 수 있는 주소와 일치하면 nginx는 신뢰할 수 있는 주소와 일치하지 않는 "x-forwarded-for"의 마지막 주소를 사용하여 원래 클라이언트 주소를 대체합니다.
범위: 주소 세그먼트 형식으로 주소를 정의합니다. 이 매개변수는 먼저 배치되어야 합니다. 주소 라이브러리의 로딩 속도를 높이려면 주소를 오름차순으로 정의해야 합니다.
geo $country { default zz; include conf/geo.conf; delete 127.0.0.0/16; proxy 192.168.100.0/24; proxy 2001:0db8::/32; 127.0.0.0/24 us; 127.0.0.1/32 ru; 10.1.0.0/16 ru; 192.168.1.0/24 uk; }
vim conf/geo.conf
10.2.0.0/16 ru; 192.168.2.0/24 ru;
주소 세그먼트 예:
geo $country { ranges; default zz; 127.0.0.0-127.0.0.0 us; 127.0.0.1-127.0.0.1 ru; 127.0.0.1-127.0.0.255 us; 10.1.0.0-10.1.255.255 ru; 192.168.1.0-192.168.1.255 uk; }
geo 명령은 주로 IP를 기반으로 변수에 값을 할당합니다. 따라서 지역 블록에서는 IP 또는 네트워크 세그먼트만 정의할 수 있으며, 그렇지 않으면 오류가 보고됩니다.
geo 모듈은 전역 로드 밸런싱을 구현합니다.
server1 : 192.168.6.101
server2 : 192.168.6.102
server3 : 192.168.6.121
테스트 머신 1 ip: 192.168.6.2
테스트 머신 2 ip: 192.168.6.8
테스트 머신 3 ip: 192.168.6.189
1. 각 서버에 nginx를 컴파일하고 설치하세요. 더 이상 말하지 않겠습니다!
서버1,서버2 구성은 바꾸지 않았습니다~ 홈페이지만 바꿨는데 테스트에 도움이 되네요!
server1:
shell $> cd /usr/local/nginx/html shell $> rm index.html shell $> echo "192.168.6.101" > index.html
server2:
shell $> cd /usr/local/nginx/html shell $> rm index.html shell $> echo "192.168.6.102" > index.html
서비스 업
shell $> /usr/local/nginx/sbin/nginx
2. server3`
shell $> cd /usr/local/nginx/conf/ shell $> vim nginx.conf
worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; geo $geo { default default; 192.168.6.189/32 uk; 192.168.6.8/32 us; #这里的子网码是 32 是因为,我是单网段测试,如果你有vlan,你可以是24 例如 # 192.168.0.0/24 tw } upstream uk.server { server 192.168.6.101; } upstream us.server { server 192.168.6.102; } upstream default.server { server 192.168.6.121:8080; } sendfile on; keepalive_timeout 65; server { listen 80; server_name 192.168.6.121; index index.html index.htm; root html; location / { proxy_redirect off; 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_pass http://$geo.server$request_uri; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } server { listen 8080; server_name 192.168.6.121; location / { root html; index index.html index.htm; } } }
3의 구성을 수정하고 테스트 머신 1개에서 브라우저를 엽니다.
를 입력합니다. http://192.168.6.121
그러면
이 표시됩니다. 테스트 머신 1의 IP 주소는 192.168.6.2이기 때문에 nginx 구성에 따르면 그가 server3 포트 8080에 액세스하는 것이 분명합니다! server1 server2의 index.html을 수정했기 때문이죠
테스트기 2에서 브라우저 열기 ~
http://192.168.6.121
표시
테스트기 3에서 브라우저 열기 ~
http :/ 입력 /192.168.6.121
테스트기3의 IP는 192.168.6.189
디스플레이:
분명히 로드밸런싱이 중요한 역할을 합니다~~~
이렇게 하면 3개의 서버를 서로 다른 IDC 전산실에 배치할 수 있습니다. 그런 다음 데이터를 동기화하면 됩니다~ 스마트 DNS는 방문하는 IP에 따라 파싱할 때 상대방의 DNS 주소를 파싱하여 상대방 서버와 일치시키는 경우도 있기 때문에 DNS로 인한 수고를 덜 수 있다는 장점이 있습니다. 그가 사용하는 Telecom DNS는 그를 Telecom 서버인 nginx에 직접 연결하고 액세스 IP를 기반으로 서버를 연결합니다. 괜찮아
위 내용은 Nginx의 geo 모듈 및 이를 사용하여 로드 밸런싱을 구성하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!