Flask Nginx代理修复重复标题

问题描述

我有一个装有Nginx和Gunicorn的Flask服务器。我阅读了this,并设置了nginx来设置这些标头,并修复了werkzeug中间件代理。现在,flask中的标头具有正确的ip地址以及主机和内容。除了1个小问题。标头显示为重复,并以逗号分隔。这是我在打印request.headers时看到的内容。

Host: site.com,site.com
X-Real-Ip: 12.345.67.898,12.345.67.898
X-Forwarded-For: 12.345.67.898,12.345.67.898
X-Forwarded-Proto: https,https

这些标头是nginx覆盖的标头。为什么它们都重复。它们重复并用逗号分开。如何解决此问题? 我已经在示例中完成了nginx配置和werkzeug中间件代理修复。 这或多或少是我的nginx配置。

server {
    # dont worry about ssl,certbot handles that
    listen 80 default_server;
    listen [::]:80 default_server;
    server_name site.com www.site.com;
    
    location / {
        include proxy_params;
        proxy_pass http://unix:/path/to/site.sock;
        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;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

解决方法

Richard Smith解决了这个问题。那就是include proxy_params;行。我cat /etc/nginc/proxy_params,它包含已经包含的确切proxy_set_header行。基本上,它将那些标题设置两次。我必须删除include proxy_params行或删除手动proxy_set_header行。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...