转发客户端的请求标头

问题描述 投票:2回答:2

我有两个用于nginx的docker镜像,用于接收来自客户端的请求,请求包含客户端的IP地址User-Agent。另一个图像是一个asp.net应用程序,用于接收来自nginx的客户端信息请求。我的问题是收到的请求包含nginx信息而不是客户端信息。 nginx docker图像的配置如下所示。

    server {
access_log /var/log/nginx/access-default.log;
error_log /var/log/nginx/error-default.log;

   listen 80;
    location / {
        proxy_pass http://172.18.0.2:5000;
        proxy_http_version 1.1;
        proxy_set_header Host $host;
        proxy_set_header Origin $http_origin;
        proxy_set_header User-Agent $http_user_agent;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection keep-alive;
        proxy_cache_bypass $http_upgrade;
    }
}
docker nginx asp.net-core
2个回答
2
投票

您的配置是正确的。我认为你的asp.net核心应用程序中的问题。请检查以下内容:

要接收IP地址:

var ipAddress = context.Connection.RemoteIpAddress;

要接收用户代理:

var userAgent = context.Request.Headers["User-Agent"];


1
投票

这是我通过nginx成功将请求传递给asp.net核心应用程序的miminal配置:

    location / {
        proxy_pass http://myhost.com;
        proxy_buffering off;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }

与http和websockets配合得很好。我用它作为软件负载均衡器仿真。

© www.soinside.com 2019 - 2024. All rights reserved.