>  기사  >  운영 및 유지보수  >  Nginx의 geo 모듈 및 이를 사용하여 로드 밸런싱을 구성하는 방법

Nginx의 geo 모듈 및 이를 사용하여 로드 밸런싱을 구성하는 방법

PHPz
PHPz앞으로
2023-05-26 19:32:282162검색

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
그러면

Nginx의 geo 모듈 및 이를 사용하여 로드 밸런싱을 구성하는 방법

이 표시됩니다. 테스트 머신 1의 IP 주소는 192.168.6.2이기 때문에 nginx 구성에 따르면 그가 server3 포트 8080에 액세스하는 것이 분명합니다! server1 server2의 index.html을 수정했기 때문이죠

테스트기 2에서 브라우저 열기 ~
http://192.168.6.121
표시

Nginx의 geo 모듈 및 이를 사용하여 로드 밸런싱을 구성하는 방법

테스트기 3에서 브라우저 열기 ~
http :/ 입력 /192.168.6.121
테스트기3의 IP는 192.168.6.189
디스플레이:

Nginx의 geo 모듈 및 이를 사용하여 로드 밸런싱을 구성하는 방법

분명히 로드밸런싱이 중요한 역할을 합니다~~~
이렇게 하면 3개의 서버를 서로 다른 IDC 전산실에 배치할 수 있습니다. 그런 다음 데이터를 동기화하면 됩니다~ 스마트 DNS는 방문하는 IP에 따라 파싱할 때 상대방의 DNS 주소를 파싱하여 상대방 서버와 일치시키는 경우도 있기 때문에 DNS로 인한 수고를 덜 수 있다는 장점이 있습니다. 그가 사용하는 Telecom DNS는 그를 Telecom 서버인 nginx에 직접 연결하고 액세스 IP를 기반으로 서버를 연결합니다. 괜찮아

위 내용은 Nginx의 geo 모듈 및 이를 사용하여 로드 밸런싱을 구성하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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