You need to enable JavaScript to run this app. Nginx反向代理后邮件服务器无法获取客户端真实IP该如何配置
优惠活动
大模型
产品
解决方案
定价
更多

Nginx反向代理后邮件服务器无法获取客户端真实IP该如何配置

问题根因

Nginx反向代理转发请求时默认不会传递客户端原始IP,后端服务接收到的请求来源就是Nginx的内网IP,所以日志中只会记录Nginx的地址。

第一步:修改Nginx反向代理配置

在现有location块中增加透传真实IP的请求头配置,修改后的完整配置如下:

server {
    listen 8443 ssl http2;
    server_name mail.domain.com;

    location / {
        proxy_set_header Host $host;
        # 新增透传真实IP配置
        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_pass https://<internal ip>/;
        client_max_body_size 0;
        proxy_connect_timeout 3600;
        proxy_send_timeout 3600;
        proxy_read_timeout 3600;
        send_timeout 3600;
    }
}

修改完成后执行nginx -s reload重载配置生效。

第二步:配置后端邮件服务信任Nginx代理IP

仅修改Nginx侧配置不会生效,必须让后端服务信任Nginx的内网IP,才会读取请求头里的真实IP替换日志里的来源IP,以下是常见服务的配置参考:

  • 如果后端是Webmail服务(跑在Nginx上):
    在后端Web服务的http块中添加如下配置,将192.168.1.10替换为你实际的Nginx本地IP:
    set_real_ip_from 192.168.1.10;
    real_ip_header X-Forwarded-For;
    real_ip_recursive on;
    
  • 如果后端是Postfix SMTP服务:
    编辑main.cf,添加如下配置:
    proxy_protocol = yes
    mynetworks = 127.0.0.0/8 [::1]/128 192.168.1.10/32 # 替换为Nginx的IP
    
  • 如果后端是Dovecot IMAP/POP3服务:
    编辑dovecot.conf,添加如下配置:
    trusted_proxies = 192.168.1.10 # 替换为Nginx的IP
    login_trusted_networks = 192.168.1.10
    
验证效果

所有配置修改完成后,重载对应服务,再查看邮件服务的错误日志,即可看到真实的客户端IP,后续自动封禁策略直接基于日志中的真实IP配置即可。

内容的提问来源于stack exchange,提问作者vespino

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.16 04:24:04