编程技术分享平台

网站首页 > 技术教程 正文

nginx+lua灰度发布(加注解)(nginx lvs)

xnh888 2024-09-08 10:56:44 技术教程 44 ℃ 0 评论

nginx配置

#A配置,用于用户正常访问

upstream www.test.cn {

server 192.168.1.100:9000;

server 192.168.1.100:9000;

}

#B配置,用于灰度访问,只有111.222.1.100访问的请求才会到这个节点上

upstream www.test.cn_huidu {

server 192.168.1.100:9000;

server 192.168.1.100:9000;

}

#配置访问的域名

server {

listen 80;

server_name www.test.cn;

charset utf-8;

location ~ ^/webticket/WEB-INF/{

deny all;

}

#O通过lua匹配访问规则

location / {

#通过"content_by_lua"这个指令,可以由lua直接确定nginx响应页面的正文

content_by_lua '

#通过X-Real-IP方式将获取到的ip赋值给myIP,X-Real-IP一般只记录真实发出请求的客户端IP

myIP = ngx.req.get_headers()["X-Real-IP"]

#如果X-Real-IP方式获取的到ip不存在话,则执行下面的X-Forwarded-For方式

if myIP == nil then

#通过X-Forwarded-For方式将获取到的ip赋值给myIP,X-Forwarded-For是用于记录代理信息的,每经过一级代理(匿名代理除外),代理服务器都会把这次请求的来源IP追加在X-Forwarded-For中

myIP = ngx.req.get_headers()["x_forwarded_for"]

end

#如果X-Forwarded-For方式获取的到ip也不存在话,则直接使用remote_addr地址

if myIP == nil then

myIP = ngx.var.remote_addr

end

#判断上面赋值的myIP是"111.222.1.100"的话,则匹配到下面的B "www.test.cn_huidu"项

if myIP == "111.222.1.100" then

ngx.exec("@www.test.cn_huidu")

#否则请求转发到A "www.test.cn_huidu"项

else

ngx.exec("@www.test.cn")

end

';

}

#A配置对应的upstream www.test.cn项

location @www.test.cn{

proxy_pass http://www.test.cn;

proxy_connect_timeout 60s;

proxy_read_timeout 5400s;

proxy_send_timeout 5400s;

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;

index index.html index.htm index.jsp;

}

#B配置对应的upstream www.test.cn_huidu项

location @www.test.cn_huidu{

proxy_pass http://www.test.cn_huidu;

proxy_connect_timeout 60s;

proxy_read_timeout 5400s;

proxy_send_timeout 5400s;

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;

index index.html index.htm index.jsp;

}

error_page 500 502 503 504 /50x.html;

location = /50x.html {

root html;

}

}

补充

X-Forwarded-For、X-Real-IP、remote_addr区别:

X-Forwarded-For:是用于记录代理信息的,每经过一级代理(匿名代理除外),代理服务器都会把这次请求的来源IP追加在X-Forwarded-For中。

X-Real-IP:一般只记录真实发出请求的客户端IP。

remote_addr:remote_addr代表客户端的IP,但它的值不是由客户端提供的,而是服务端根据客户端的ip指定的,当你的浏览器访问某个网站时,假设中间没有任何代理,那么网站的web服务器(Nginx,Apache等)就会把remote_addr设为你的机器IP,如果你用了某个代理,那么你的浏览器会先访问这个代理,然后再由这个代理转发到网站,这样web服务器就会把remote_addr设为这台代理机器的IP。

欢迎关注:悬钟Mr

https://www.toutiao.com/c/user/5844231468/#mid=1634198915259405

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表