2

我的 Django 应用程序有以下 Nginx 配置:

upstream api {
    server localhost:8000;
}

server {
    listen 80;

    location / {
        proxy_pass http://api;
        proxy_redirect off;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

    location /staticfiles {
        alias /app/static/;
    }
}

我将此配置基于此处的教程。经过一番研究,似乎设置Host标头允许 Django API 确定原始客户端的 IP 地址(而不是代理的 IP 地址)。

X-Forwarded-For标题的意义何在?我在 nginx 日志中看到一个名为的字段$http_x_forwarded_for,但我不确定它是否相关。

4

1 回答 1

4

来自Mozilla 文档

( X-Forwarded-ForXFF) 标头是一个事实上的标准标头,用于识别通过 HTTP 代理或负载平衡器连接到 Web 服务器的客户端的原始 IP 地址。当客户端和服务器之间的流量被截获时,服务器访问日志仅包含代理或负载均衡器的 IP 地址。要查看客户端的原始 IP 地址,X-Forwarded-For请使用请求标头。

事实上,我认为你误解了Host标题。我的理解是,它将是 nginx 服务器的 IP。

于 2020-04-08T02:09:53.807 回答