当前位置:论坛首页 > Linux面板 > 求助

【已解答】Nginx经常性出现反代失效

发表在 Linux面板2021-4-28 11:22 [复制链接] 9 6756

我是从oneinstack转到宝塔的,目前使用的是7.5.2免费版。
主要使用nginx反代动态域名地址,动态域名IP约2、3天会更换一次。
经近几个月的测试使用,发现经常性在nginx状态显示运行正常且动态域名网址也正常的情况下,因反代失效导致站点打不开。
目前的处理办法是重启nginx服务恢复正常,但该问题经常性出现,很是困扰,望能协助排查解决,不胜感激!
使用道具 举报 只看该作者 回复
发表于 2021-4-28 16:00:05 | 显示全部楼层
可能是nginx机制的问题,这样写的话  proxy_pass 域名 ,只会在启动时候进行dns解析一次,后期域名更换了ip的话,是不会更新解析的,可以设置下解析服务器和dns缓存时间,然后把域名放到变量内,应该能解决问题
参考写法:
  1. resolver 8.8.8.8 valid=30s;

  2. set $proxy_host "http://example.com";

  3. location / {
  4.     proxy_pass $proxy_host;
  5. }
复制代码
使用道具 举报 回复 支持 反对
发表于 2021-8-4 15:27:12 | 显示全部楼层
本帖最后由 shanyh 于 2021-8-4 15:37 编辑
宝塔用户_aohsaw 发表于 2021-4-28 16:00
可能是nginx机制的问题,这样写的话  proxy_pass 域名 ,只会在启动时候进行dns解析一次,后期域名更换了ip ...

如下多个代理目录按该方法如何转换写法??
  1. #PROXY-START/
  2. location  ~* \.(gif|png|jpg|css|js|woff|woff2)$
  3. {
  4.     proxy_pass http://example.com;
  5. }
  6. location /
  7. {
  8.     proxy_pass http://example.com;
  9. }
  10. location /admin
  11. {
  12.     proxy_pass http://example.com/admin;
  13. }
  14. location /member
  15. {
  16.     proxy_pass http://example.com/member;
  17. }
  18. #PROXY-END/
复制代码


使用道具 举报 回复 支持 反对
发表于 2021-8-4 17:56:56 | 显示全部楼层
shanyh 发表于 2021-8-4 15:27
如下多个代理目录按该方法如何转换写法??

您好,建议您去掉 location /  的这个全局反代配置,然后使用面板上---网站---反向代理---高级功能----代理目录
开启目录代理.png
使用道具 举报 回复 支持 反对
发表于 2021-8-4 23:36:48 | 显示全部楼层
大炮运维V587 发表于 2021-8-4 17:56
您好,建议您去掉 location /  的这个全局反代配置,然后使用面板上---网站---反向代理---高级功能----代 ...

原配置写法如下,访问也正常,但有个问题:salo.vicp.net为动态域名,nginx只能解析一次,一但IP发生变化,nginx反代就会失效,需要手动重启ng才能恢复。
  1. #PROXY-START/
  2. location  ~* \.(gif|png|jpg|css|js|woff|woff2)$
  3. {
  4.     proxy_pass http://salo.vicp.net:8090;
  5.     proxy_set_header Host $host;
  6.     proxy_set_header X-Real-IP $remote_addr;
  7.     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  8.     proxy_set_header REMOTE-HOST $remote_addr;
  9.     expires 12h;
  10. }
  11. location /
  12. {
  13.     proxy_pass http://salo.vicp.net:8090;
  14.     proxy_set_header Host $host;
  15.     proxy_set_header X-Real-IP $remote_addr;
  16.     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  17.     proxy_set_header REMOTE-HOST $remote_addr;
  18.    
  19.     add_header X-Cache $upstream_cache_status;
  20.    
  21.     #Set Nginx Cache
  22.    
  23.             add_header Cache-Control no-cache;
  24. }
  25. location /admin
  26. {
  27.    proxy_pass http://salo.vicp.net:8090/admin/;
  28. }
  29. location /member
  30. {
  31.    proxy_pass http://salo.vicp.net:8090/member/;
  32. }
  33. #PROXY-END/
复制代码
使用道具 举报 回复 支持 反对
发表于 2021-8-4 23:41:27 | 显示全部楼层
大炮运维V587 发表于 2021-8-4 17:56
您好,建议您去掉 location /  的这个全局反代配置,然后使用面板上---网站---反向代理---高级功能----代 ...

若按如下更改,可以解决动态域名的问题,根目录反代也正常,但两个二级目录的反代会提示“重定向次数过多”而无法打开页面。
  1. #PROXY-START/
  2. resolver 8.8.8.8 valid=30s;
  3. set $qh_ddns salo.vicp.net;
  4. location  ~* \.(gif|png|jpg|css|js|woff|woff2)$
  5. {
  6.     proxy_pass http://$qh_ddns:8090;
  7.     proxy_set_header Host $host;
  8.     proxy_set_header X-Real-IP $remote_addr;
  9.     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  10.     proxy_set_header REMOTE-HOST $remote_addr;
  11.     expires 12h;
  12. }
  13. location /
  14. {
  15.    proxy_pass http://$qh_ddns:8090;
  16.     proxy_set_header Host $host;
  17.     proxy_set_header X-Real-IP $remote_addr;
  18.     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  19.     proxy_set_header REMOTE-HOST $remote_addr;
  20.    
  21.     add_header X-Cache $upstream_cache_status;
  22.    
  23.     #Set Nginx Cache
  24.    
  25.             add_header Cache-Control no-cache;
  26. }
  27. location /admin
  28. {
  29.     proxy_pass http://$qh_ddns:8090/admin/;
  30. }
  31. location /member
  32. {
  33.     proxy_pass http://$qh_ddns:8090/member/;
  34. }
  35. #PROXY-END/
复制代码
使用道具 举报 回复 支持 反对
发表于 2021-8-4 23:43:56 | 显示全部楼层
大炮运维V587 发表于 2021-8-4 17:56
您好,建议您去掉 location /  的这个全局反代配置,然后使用面板上---网站---反向代理---高级功能----代 ...

我需要做“/”、“/admin”、“/member”,这三个路径的反代,同时还需要解决动态域名的IP变动解析问题,故寻求助,谢谢!
使用道具 举报 回复 支持 反对
发表于 2021-8-5 00:28:31 | 显示全部楼层
shanyh 发表于 2021-8-4 23:41
若按如下更改,可以解决动态域名的问题,根目录反代也正常,但两个二级目录的反代会提示“重定向次数过多 ...

若按此写法不加“/admin”和“/member”二级目录反代的话,则访问 https://vr.qhser.cn/admin 跳转为 https://vr.qhser.cn:8090/admin打不开页面,但用https://vr.qhser.cn/admin/地址则正常跳转为https://vr.qhser.cn/admin/login,也就是说若不写二级目录反代访问地址末尾不带斜杠“/”的话跳转会携带原始端口而造成打不开页面。
使用道具 举报 回复 支持 反对
发表于 2023-5-8 10:52:47 | 显示全部楼层
试试在计划任务里加一个nginx重启的命令?
使用道具 举报 回复 支持 反对
发表于 2023-5-29 13:05:12 | 显示全部楼层
if ! curl -I  反代的域名 >/dev/null 2>&1; then
    systemctl restart nginx
fi

添加shell的计划任务,不知道这样行不行?
就是设置每一分钟ping一下自己的反代域名。发现不通的话自动重启nginx。

希望大佬看看 这样是否可以?
使用道具 举报 回复 支持 反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

企业版年付运维跟进群

普通问题处理

论坛响应时间:72小时

问题处理方式:排队(仅解答)

工作时间:白班:9:00 - 18:00

紧急问题处理

论坛响应时间:10分钟

问题处理方式:1对1处理(优先)

工作时间:白班:9:00 - 18:00

工作时间:晚班:18:00 - 24:00

立即付费处理
快速回复 返回顶部 返回列表