Nginx 로드 밸런싱을 수행할 때 업스트림에서 ip_hash를 설정할 수 있습니다. 각 요청은 액세스 IP의 해시 결과에 따라 할당되고 백엔드 서버에 매핑됩니다. down 서버 연결이 끊어진 후 다시 요청하면 다른 일반 서버에 대한 접근이 다시 수정되어 세션이 유지됩니다. 한 가지 문제는 동일한 IP 클라이언트가 고정된 백엔드 서버에 접속하기 때문에 부하 불균형이 발생할 수 있다는 점이다. 다음은 ip_hash의 세션 지속성 형식입니다.
백엔드 서버가 모두 정상적으로 실행되고 있다는 가정입니다.
在Nginx代理服务器(负载均衡服务器)中配置:===========================================upstream test { ip_hash; server 10.20.151.112:80; server 10.20.151.113:80;}
이 결과가 반환되는 이유가 궁금하신 분은 제 Nginx 로드 밸런싱 구현 블로그에서 구체적인 구성과 동작을 확인하실 수 있습니다. 따라서 ip_hash를 사용할 때 세션 지속성이 달성된다는 것을 보는 것은 어렵지 않습니다. 즉, 클라이언트는 백엔드 서버 112에 대한 고정 액세스 권한을 갖게 되며(이 서버가 다운되지 않는 한) 다른 서버로 돌아가지 않습니다. 백엔드 서버는 페이지가 다시 새로 고쳐지더라도 콘텐츠입니다(참고: 실제 프로덕션에서는 백엔드 서버가 요청 클라이언트에 반환하는 콘텐츠가 동일하며 이는 단지 테스트 효과를 위한 것입니다).
정기적으로 접속하는 서버가 다운되었다고 가정
이 방법은 사용자가 다른 서버에 할당되었을 때 사용자의 세션을 쿠키에 저장하는 것입니다. 먼저 사용자의 세션이 서버에 있는지 확인합니다. 그렇지 않은 경우 먼저 쿠키의 sessoin을 서버에 저장하여 세션을 유지합니다. 쿠키 저장에는 보안 위험이 있습니다. 해커가 쿠키를 훔쳐 관련 정보를 얻을 수 있습니다. 이런 방식으로 세션 지속성을 얻으려면 Sticky_cookie_insert 모듈을 추가해야 합니다. ip_hash와의 차이점은 IP를 기반으로 클라이언트를 판단하지 않고 쿠키를 기반으로 한다는 것입니다.
sticky 모듈 추가(yum을 사용하여 설치한 Nginx)
yum install -y pcre* openssl* gcc gcc-c++ make --安装编译环境 wget https://bitbucket.org/nginx-goodies/nginx-sticky-module-ng/get/08a395c66e42.zip --下载sticky模块 nginx -v --查看Nginx版本,因为要下载和yum安装nginx对应版本的源码包 wget http://nginx.org/download/nginx-1.18.0.tar.gz yum install -y unzip --安装解压工具 unzip 08a395c66e42.zip --解压模块包 mv nginx-goodies-nginx-sticky-module-ng-08a395c66e42/ nginx-sticky-module-ng/ --改名 tar xzvf nginx-1.18.0.tar.gz -C /usr/local/ --解压nginx的源码包 cd /usr/local/nginx-1.18.0/ nginx -V --查看yum安装nginx所有模块 ====================================================================================== ./configure --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -fPIC' --with-ld-opt='-Wl,-z,relro -Wl,-z,now -pie' --add-module=/root/nginx-sticky-module-ng ====================================================================================== make && make install Nginx -V --再次查看Nginx模块,添加成功
프록시 서버 구성(로드 밸런싱 서버)
vim upstream.conf --在子配置文件conf.d中创建upstream.conf ===================================================================================== upstream qfedu { server 192.168.198.143; server 192.168.198.145; sticky; }
vim proxy.conf ----在子配置文件conf.d中创建proxy.conf ===================================================================================== server { listen 80; server_name localhost; location / { proxy_pass http://testweb; } }
nginx -t --检查配置文件语法是否有错 nginx -s reload --重新加载配置文件
http://10.20.151.240/
방문위 내용은 Nginx가 세션 지속성을 구현하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!