Loading
0

Nginx反向代理、缓存、负载均衡服务器构建

这个模块并不合适不支持 Cookie 或手动禁用了cookie的浏览器,此时默认sticky就会切换成RR。它不能与ip_hash同时使用。

upstream backend {
server 192.168.31.141:80 weight=1;
server 192.168.31.250:80 weight=1;
sticky;
}

配置起来超级简单,一般来说一个sticky指令就够了。
相关信息可以查看官方文档https://bitbucket.org/nginx-goodies/nginx-sticky-module-ng
4、load-balance其它调度方案:
这里顺带介绍一下nginx的负载均衡模块支持的其它调度算法:
轮询(默认) :每个请求按时间顺序逐一分配到不同的后端服务器,如果后端某台服务器宕机,故障系统被自动剔除,使用户访问不受影响。Weight 指定轮询权值,Weight值越大,分配到的访问机率越高,主要用于后端每个服务器性能不均的情况下。
ip_hash :每个请求按访问IP的hash结果分配,这样来自同一个IP的访客固定访问一个后端服务器,有效解决了动态网页存在的session共享问题。当然如果这个节点不可用了,会发到下个节点,而此时没有session同步的话就注销掉了。
least_conn :请求被发送到当前活跃连接最少的realserver上。会考虑weight的值。
url_hash :此方法按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,可以进一步提高后端缓存服务器的效率。Nginx本身是不支持url_hash的,如果需要使用这种调度算法,必须安装Nginx 的hash软件包nginx_upstream_hash。
fair :这是比上面两个更加智能的负载均衡算法。此种算法可以依据页面大小和加载时间长短智能地进行负载均衡,也就是根据后端服务器的响应时间来分配请求,响应时间短的优先分配。Nginx本身是不支持fair的,如果需要使用这种调度算法,必须下载Nginx的upstream_fair模块。
5、负载均衡与健康检查:
严格来说,nginx自带是没有针对负载均衡后端节点的健康检查的,但是可以通过默认自带的ngx_http_proxy_module模块和ngx_http_upstream_module模块中的相关指令来完成当后端节点出现故障时,自动切换到下一个节点来提供访问。

upstream backend {
sticky;
server 192.168.31.141:80 weight=1max_fails=2fail_timeout=10s;
server 192.168.31.250:80 weight=1max_fails=2fail_timeout=10s;
}
server {
……
location / {
proxy_pass http://backend;
}
……
}

weight :轮询权值也是可以用在ip_hash的,默认值为1
max_fails :允许请求失败的次数,默认为1。当超过最大次数时,返回proxy_next_upstream模块定义的错误。
fail_timeout :有两层含义,一是在10s 时间内最多容许2 次失败;二是在经历了 2 次失败以后,10s时间内不分配请求到这台服务器。
6、nginx的proxy缓存使用:
缓存也就是将js、css、image等静态文件从后端服务器缓存到nginx指定的缓存目录下,既可以减轻后端服务器负担,也可以加快访问速度,但这样缓存及时清理成为了一个问题,所以需要ngx_cache_purge这个模块来在过期时间未到之前,手动清理缓存。proxy模块中常用的指令是proxy_pass和proxy_cache.
nginx的web缓存功能的主要是由proxy_cache、fastcgi_cache指令集和相关指令集完成,proxy_cache指令负责反向代理缓存后端服务器的静态内容,fastcgi_cache主要用来处理FastCGI动态进程缓存。

http {
   #$upstream_cache_status 记录缓存命中率
log_format  main  '$remote_addr - $remote_user [$time_local]"$request" '
                      '$status $body_bytes_sent"$http_referer" '
                     '"$http_user_agent" "$http_x_forwarded_for"'
'"$upstream_cache_status"';
access_log  logs/access.log  main;
proxy_buffering on;  #代理的时候,开启或关闭缓冲后端服务器的响应
proxy_temp_path /usr/local/nginx1.10/proxy_temp;
proxy_cache_path /usr/local/nginx1.10/proxy_cache levels=1:2keys_zone=my-cache:100minactive=600mmax_size=2g;
server {
listen       80;
server_name  localhost;
root  html;
index index.php index.html index.htm;
       #ngx_cache_purge 实现缓存清除
location ~ /purge(/.*) {
allow 127.0.0.1;
allow 192.168.31.0/24;
deny all;
proxy_cache_purge my-cache$host$1$is_args$args;
       }
location ~.*\.(gif|jpg?www.myhack58.com|png?www.myhack58.com|html|htm|css|js|ico|swf|pdf)(.*) {
proxy_pass  http://backend;
proxy_redirect off;
proxy_set_header Host$host;
proxy_set_headerX-Real-IP $remote_addr;
proxy_set_headerX-Forwarded-For $proxy_add_x_forwarded_for;
proxy_ignore_headersSet-Cookie;
proxy_hide_header Set-Cookie;
proxy_next_upstreamerror timeout invalid_header http_500 http_502 http_503 http_504;
proxy_cache my-cache;
add_header Nginx-Cache$upstream_cache_status;
proxy_cache_valid 200304 301 302 8h;
proxy_cache_valid 4041m;
proxy_cache_valid any1d;
proxy_cache_key$host$uri$is_args$args;
expires 30d;
       }

相关选项说明:
proxy_buffering on; 代理的时候,开启或关闭缓冲后端服务器的响应。当开启缓冲时,nginx尽可能快地从被代理的服务器接收响应,再将它存入缓冲区中。
proxy_temp_path:缓存临时目录。后端的响应并不直接返回客户端,而是先写到一个临时文件中,然后被rename一下当做缓存放在proxy_cache_path。0.8.9版本以后允许temp和cache两个目录在不同文件系统上(分区),然而为了减少性能损失还是建议把它们设成一个文件系统上。

分页阅读: 1 2 3 4 5 6
【声明】:8090安全小组门户(https://www.8090-sec.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们:邮箱hack@ddos.kim,我们会在最短的时间内进行处理。