www.zhblog.net

Flask redirect 重定向 ip 改变的 bug

  将flask+gunicorn+nginx从http升级到https后出现了一个奇怪的现象:程序逻辑是用户没有登录则重定向到用户登录页面。重定向使用的是 redirect(url_for('login')),然后浏览器返回的是网关页面或者路由器配置页面。通过调试发现,请求url正确,但是响应的ip变成了客户端请求的ip,不再是服务器的域名或者ip。而http升级到https使用了代理,设置几个头文件出现的这个问题。


解决办法:

1. 通过改代码,将url_for使用绝对路径:

url_for('login', _external=True) # 设置_external为True,则使用绝对路径


2. 改nginx的配置文件,经过测试发现是 proxy_set_header X-Forwarded-Host $remote_addr; 的问题:

# proxy_set_header X-Forwarded-Host $remote_addr; # 注释这行后测试通过,本人按这种方式改的
or
proxy_set_header X-Forwarded-Host $host; # 理论是可行的,未测试

展开阅读全文

评论

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 心情