文章目录
【后端】Nginx+lua+OpenResty高性能实践
参考: https://blog.csdn.net/u010837612/article/details/123275026
1. 问题
在k8s
中使用nginx
作为后端接口反向代理,大概配置如下:
location /api {
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_pass http://api-server-svc:8080/;
}
其中api-server-svc
是后端服务的serviceName
这个配置会有两个问题:
1.要求
api-server-svc
这个service
要先创建,否则nginx启动时会因为无法解析api-server-svc
而启动失败
2.·nginx·服役期间,如果后端服务重启
(这里指的容器重新创建,并非更新镜像,因为更新镜像ip不会变动,还是原来容器的),svc
ip改变了,代理会失败,因为nginx缓存了旧ip
2.解决办法
修改nginx
配置如下:
# dns设置缓存时间5s,解决问题2
resolver kube-dns.kube-system.svc.cluster.local valid=300s;
# 使用变量方式,解决问题1
set $apiserver api-server-svc.xxx.svc.cluster.local;
location /api {
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
rewrite /api/(.*) /$1 break;
proxy_pass http://$apiserver:8080;
}
set $apiserver api-server-svc.xxx.svc.cluster.local;
中域名一定要写全域名,不能简写成api-server-svc
。
之前之所以可以简写,因为容器/etc/resolv.conf
中有配置了search
,