【Nginx】反向代理、动静分离、负载均衡、Rewrite、防盗链
反向代理
server { listen 8081; server_name www.fan.cn; location / { proxy_pass http://127.0.0.1:5001; } }
动静分离
动静分离可通过location对请求url进行匹配,将网站静态资源(HTML,JavaScript,CSS,img等文件)与后台应用分开部署,提高用户访问静态代码的速度,降低对后台应用访问。通常将静态资源放到nginx中,动态资源转发到tomcat服务器中。
server { listen 8083; server_name *.fan.cn; # 当url中有/static时,会和root目录路径拼接,也就时html/static目录下找文件 location /static { root html; index index.html index.htm; } location / { proxy_pass http://127.0.0.1:5001; } }
当访问http://order.fan.cn:8083/static/1.jpg
时,会去nginx中的html/staic目录找文件,当访问http://order.fan.cn:8083
,去将请求转发到http://127.0.0.1:5001
负载均衡
#定义一组服务器
upstream myServers1 { server 127.0.0.1:5000; server 127.0.0.1:5001; } server { listen 8084; server_name *.fan.cn; location / { proxy_pass http://myServers1; } }
以上配置使用轮询模式,5000、5001会交替被访问
其他负载均衡模式
- 权重模式
upstream myServers1 { server 127.0.0.1:5000 weight=1; server 127.0.0.1:5001 weight=3; }
- ip_hash
根据客户端的ip地址转发同一台服务器,可以保持会话,但是很少用这种方式去保持会话,例如我们当前正在使用wifi访问,当切换成手机信号访问时,会话就不保持了。 - least_conn
最少连接访问,优先访问连接最少的那一台服务器,这种方式也很少使用,因为连接少,可能是由于该服务器配置较低,刚开始赋予的权重较低。 - url_hash(需要第三方插件)
根据用户访问的url定向转发请求,不同的url转发到不同的服务器进行处理(定向流量转发)。 - fair(需要第三方插件)
根据后端服务器响应时间转发请求,这种方式也很少使用,因为容易造成流量倾斜,给某一台服务器压垮。
upstream参数
server
反向服务地址加端口weight
权重,默认是1,越大权重就越大max_fails
失败多少次认为主机已挂掉则,踢出 (默认配置10s,即服务器宕掉,会自动剔除)fail_timeout
踢出后重新探测时间backup
备用服务,当其他非backup的机器全部宕机或者繁忙的时候,才会启动这台机器。down
表示当前Server不参与负载
upstream myApiTest { server localhost:9001 backup; server localhost:9002 down; server localhost:9003; }
max_conns
允许最大连接数slow_start
当节点恢复,不立即加入,而是等待 slow_start 后加入服务对列。
Rewrite
掩藏真实的url以及url中可能暴露的参数,以及隐藏web使用的编程语言,提高安全性便于搜索引擎收录
server { listen 8085; server_name *.fan.cn; location / { rewrite ^/product.html$ /product/index break; proxy_pass http://127.0.0.1:5001; } }
防盗链
location ^~/images/ { valid_referers 192.168.8.102; #valid_referers 指令,配置是否允许 referer 头部以及允许哪些 referer 访问。192.168.8.102不是ip而是域名(去掉http:// 前缀) if ($invalid_referer) { # 注意这里if后要加空格 return 403; ## 返回错误码 } root /www/resources; }