无法获取firewalld转发后的原始ip

我现在有一个场景:
有两台服务器:服务器A和服务器B,都有公网ip。服务器A对外提供web服务(https)。服务器B什么也没装。

现在因为复杂的网络环境,服务器A在某些地区延迟比较高,现在想通过在延迟高的地区部署一台新的服务器,也就是服务器B,通过服务器B把流量转发到服务器A。

我通过在服务器B上的以下操作,实现了流量转发

$ sudo firewall-cmd --zone=public --permanent --add-masquerade

$ sudo firewall-cmd --add-port=443/tcp --permanent
$ sudo firewall-cmd --add-port=443/udp --permanent

$ sudo firewall-cmd --zone=public --permanent --add-forward-port=port=443:proto=tcp:toaddr=服务器B:toport=443 --permanent

但是我发现一个问题,就是,服务器A上的nginx日志中,访问的ip现在全变成了服务器B的ip,请问有办法解决么?

是的,有办法解决。

您可以在服务器B上配置一个HTTP代理,将请求从服务器B代理到服务器A,并在代理过程中保留客户端的真实IP地址。您可以使用Nginx或其他代理服务器软件,例如HAProxy或Apache,实现这一点。

在Nginx配置文件中,您可以使用以下配置:

server {
    listen 443;
    server_name <服务器B的域名>;

    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $host;
    proxy_set_header X-Nginx-Proxy true;

    location / {
        proxy_pass https://服务器A地址;
    }
}

配置完后,请重新加载Nginx配置文件,然后检查Nginx日志是否已经记录了客户端的真实IP地址。

其实,有两个方法,
第一个,就是将服务器B搭建成 nginx,nginx来做代理,记录访问记录,
第二个,就是你说的,用firewalld去解决,之后 ,你可以开启日志记录来记录规则的命中情况,详情你可以查看这博文来参考:https://www.cnblogs.com/heer22/p/16160752.html