1.    问题根源: 当应用程序在 Docker 中运行时,Atom/RSS feed 链接变成了 127.0.0.1 的原因是因为应用程序无法正确获取主机(host)信息。这通常发生在以下情况:

2.    Docker 环境特殊性:
•    Docker 容器内部默认使用 127.0.0.1 作为本地地址
•    当应用程序在容器中运行时,如果没有正确配置转发头(Forwarded Headers),它可能会误认为自己运行在 127.0.0.1 上
3.    解决方案:
a. 确保在 appsettings.json 中正确配置 ForwardedHeaders:

"ForwardedHeaders": {
    "Enabled": true,
    "HeaderName": "X-Forwarded-Host",
    "KnownProxies": []
}

b. 在 Dockerfile 中设置环境变量(如果还没有的话):

ENV ASPNETCORE_FORWARDEDHEADERS_ENABLED=true

c. 修改应用程序配置以使用转发的头信息。在程序启动时添加:

app.UseForwardedHeaders(new ForwardedHeadersOptions
{
    ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto | ForwardedHeaders.XForwardedHost
});

4.    最佳实践:
•    使用反向代理时(如 Nginx),确保正确配置 X-Forwarded-* 头
•    在 Docker 运行环境中设置正确的主机名和端口映射
•    考虑使用环境变量覆盖配置,而不是硬编码的值

这个问题是 Docker 容器化应用程序中的一个常见问题,主要是因为容器内的网络环境与主机环境的隔离造成的。通过正确配置转发头和代理设置,可以解决这个问题。

 

在宝塔面板(BT Panel)配置反向代理时,处理 X-Forwarded-* 头非常关键,尤其是部署 .NET 应用(如 Razor Pages 项目)到 Docker 后,确保应用能正确获取客户端真实 IP 和 Host 信息。下面是具体操作步骤:
1. 宝塔面板反向代理设置
步骤一:进入网站设置
•    打开宝塔面板,进入对应网站的“设置”页面。
步骤二:添加反向代理
•    选择“反向代理”功能,点击“添加反向代理”。
步骤三:设置目标地址
•    目标 URL 填写你的 Docker 容器服务地址(如 http://127.0.0.1:5000)。
步骤四:自定义头部
•    在“高级设置”或“自定义头部”区域,添加如下头部转发规则:

X-Forwarded-For $remote_addr;
X-Forwarded-Proto $scheme;
X-Forwarded-Host $host;

如果是 Nginx,可以在反向代理的“配置文件”中添加:

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Host $host;

 

宝塔面板完整示例:

location ^~ / {
    proxy_pass http://127.0.0.1:8080;
    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;
    proxy_set_header REMOTE-HOST $remote_addr;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection $connection_upgrade;
    proxy_http_version 1.1;

    add_header X-Cache $upstream_cache_status;

    set $static_file8m3ipH9u 0;
    if ( $uri ~* "\.(gif|png|jpg|css|js|woff|woff2)$" ) {
        set $static_file8m3ipH9u 1;
        expires 1m;
    }
    if ( $static_file8m3ipH9u = 0 ) {
        add_header Cache-Control no-cache;
    }
}

宝塔面板截图