如何传递真实IP到Apache后端?

Apache

1 前言

一个问题,一篇文章,一出故事。
本章需要实现前端反向代理(Nginx)的服务器需要传递客户端IP真实地址至后端的应用程序服务器(Apache+PHP)。

2 最佳实践

2.1 环境信息

前端代理:
HostName = any.cmdschool.org
IPAddress = 10.168.0.1[0,1] Aplication = nginx 1.10.2
如需搭建反向代理请参阅如下章节,

如何部署反向代理服务器Nginx?

后端应用:
HostName = any.cmdschool.org
IPAddress = any
Aplication = Apache 2.4.46 + PHP 7.4.3
如需搭建Apache PHP环境请参阅以下章节,

如何编译安装Apache+PHP7.4.3?

2.2 配置Nginx前端代理

2.2.1 增加代理头设置

vim /etc/nginx/conf.d/www.cmdschool.org.conf

加入如下配置,

server {
    #...
    location / {
        #...
        proxy_set_header         X-Real-IP        $remote_addr;
        proxy_set_header         X-Forwarded-For  $proxy_add_x_forwarded_for;
        #...
    }
    #...
}

2.2.2 重载服务使配置生效

systemctl reload nginx.service

2.3 配置Apache后端服务器

2.3.1 修改配置启用模块

vim /etc/httpd/httpd.conf

启用如下配置加载模块,

LoadModule remoteip_module modules/mod_remoteip.so

然后,可使用如下命令确认模块已经启用,

httpd -M | grep remoteip

可见如下显示,

remoteip_module (shared)

另外,可使用如下命令确认模块的位置,

find /usr/ -name \*mod_remoteip.so\*

一般显示如下,

/usr/local/apache2/modules/mod_remoteip.so

2.3.2 加入代理所需的配置

vim /etc/httpd/conf.d/www.cmdschool.conf

加入如下配置,

<VirtualHost *:443>
  #...
  RemoteIPHeader X-Forwarded-For
  RemoteIPInternalProxy 10.168.0.10/32
  RemoteIPInternalProxy 10.168.0.11/32
  #...
</VirtualHost>

加入配置后,我们建议使用如下命令验证配置语法,

httpd -t

2.3.3 重载服务使配置生效

systemctl reload httpd.service

参阅文档
===========================

官方配置文档
—————-
https://httpd.apache.org/docs/current/mod/mod_remoteip.html

配置范例
————
https://www.123admin.com/how-to-get-remote-ip-on-apahce/
https://gist.github.com/patrocle/43f688e8cfef1a48c66f22825e9e0678

apache命令使用
————-
https://www.tecmint.com/check-apache-modules-enabled/

没有评论

发表评论

Nginx
如何解决Nginx代理传大文件不同步问题?

1 前言 一个问题,一篇文章,一出故事。 笔者生产环境遇到用户透过反向代理上传大文件提示用户已经完成 …

Nginx
如何实现Nginx根据路径分配代理?

1 前言 一个问题,一篇文章,一出故事。 笔者生产环境遇到需要根据URI路径选择走哪个代理服务器的案 …

Nginx
如何实现Nginx返回字符串或变量值?

1 前言 一个问题,一篇文章,一出故事。 笔者测试环境中经常需要返回Nginx变量的具体值,于是整理 …