Nginx反向代理到转发的ip地址不工作

Nginx反向代理到转发的ip地址不工作,nginx,nginx-reverse-proxy,yesod,Nginx,Nginx Reverse Proxy,Yesod,我已经将nginx设置为Yesod的反向代理。/var/log/nginx/access.log中的IP地址是客户端的真实IP地址 123.123.123.123 - - [09/Oct/2020:07:11:16 +0000] "GET / HTTP/1.1" 200 ... 但是Yesod在日志中显示的IP地址是127.0.0.1,来自nginx 127.0.0.1 - - [09/Oct/2020:07:11:16 +0000] "GET / HTTP/1.

我已经将nginx设置为Yesod的反向代理。
/var/log/nginx/access.log
中的IP地址是客户端的真实IP地址

123.123.123.123 - - [09/Oct/2020:07:11:16 +0000] "GET / HTTP/1.1" 200 ...
但是Yesod在日志中显示的IP地址是127.0.0.1,来自nginx

127.0.0.1 - - [09/Oct/2020:07:11:16 +0000] "GET / HTTP/1.0" 200 - "https://...
以下是我的nginx配置:

... 
server {

        server_name example.com;

        location / { 

            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header Host $http_host;
            proxy_set_header X-NginX-Proxy true;

            proxy_pass http://127.0.0.1:3000; # Reverse proxy to your Yesod app 
        }   

    listen [::]:443 ssl ipv6only=on; # managed by Certbot
    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

}
...
我重新启动了nginx和yesod二进制文件。但Yesod列出的IP仍然是127.0.0.1

我犯了什么配置错误

或者我需要编辑YesSOD二进制文件的日志代码吗


感谢善良的读者

答案是Yesod有一个使用转发IP头的配置选项

我通过阅读包含以下内容的
src/Settings.hs
找到它:

data AppSettings = AppSettings
    { appStaticDir              :: String
    -- ^ Directory from which to serve static files.
    , appDatabaseConf           :: PostgresConf
    -- ^ Configuration settings for accessing the database.
    , appRoot                   :: Maybe Text
    -- ^ Base for all generated URLs. If @Nothing@, determined
    -- from the request headers.
    , appHost                   :: HostPreference
    -- ^ Host/interface the server should bind to.
    , appPort                   :: Int
    -- ^ Port to listen on
    , appIpFromHeader           :: Bool
    -- ^ Get the IP address from the header when logging. Useful when sitting
    -- behind a reverse proxy.
...
因此,您需要编辑包含以下行的
config/settings.yaml

...
ip-from-header: "_env:YESOD_IP_FROM_HEADER:false" 
...
或者,您也可以更改运行此命令的环境变量
export YESOD\u IP\u FROM\u HEADER=true

这就解决了问题