type
status
slug
summary
tags
category
icon
password
new update day
Property
Oct 22, 2023 01:31 PM
created days
Last edited time
Oct 22, 2023 01:31 PM

nginx+wordpress-docker镜像获取真实IP

因为想偷懒以及维护的方面、所以就将我的博客 docker 化了、采用了 nginx 在前、apache 在后的架构。在完成了构建以及启动之后、我发现 WP 统计 这个插件获取不到真实的用户IP、导致访问的IP全是 docker 容器的IP。让人好生郁闷。

获取真实IP的方法

nginx 获取真实IP的方法

因为我是使用 nginx 将用户的请求反向代理回送至后端的 wordpress 镜像的,所以最先是拿它下手的,话不多说放配置文件。
nginx 虚拟主机配置文件

测试

经过测试发现、wordpress 还是无法正常获取到真实IP。按道理来说、已经配置成功了。不知道细心的你发现没有那就是、wordpress 镜像默认是使用 apache 做 web 服务器 的所以现在的情况是、与后端之间存在了两层代理,即 一级代理 nginx;二级代理 apache、之所以后端获取不到是因为还未在 apache 上进行相关配置、将真实IP传递到 REMOTE_ADDR 变量中(wordpress 统计插件默认取REMOTE_ADDR变量的值。
  • 测试结果:

配置 apache 以获取用户真实IP

经过多方搜集尝试,了解到 apache2.4提供了自带的remoteip模块可以实现获取真实ip。
/etc/apache2/mods-available 文件夹内的 remoteip.load 复制到 /etc/apache2/mods-enabled/ 文件目录下,并新建配置文件 remoteip.conf
注意:因为考虑到容器大小、所以镜像内并没有集成编辑器、需要临时安装、而且容器一旦删除、已经安装的软件也会没有、不过咱们现在只是做个测试、可以直接安装进行更改测试。
  • remoteip.load
  • remoteip.conf
  • 测试结果

修改 docker-compose.yaml 配置文件

1. 查看相关配置文件的路径

2. 查看已启用模块配置文件夹

从下面可以看出启用模块的方式就是创建一个链接、将 mods-available 内的文件链接至 mods-enabled 文件夹、所以我们若想启用 remoteip 模块、只需将 remoteip.conf remoteip.load 文件放入即可。

3. 修改 docker-compose.yaml 文件、挂载相应文件

  1. 在宿主机上创建相应文件
  • remoteip.load
  • remoteip.conf
  1. 修改 wordpress 服务的相关配置项
  1. 重建容器
  1. 测试
可以看出文件已经挂载成功
  • 测试正常、收工!
nginx 主配置文件 nginx.conf 学习resolv.conf 理解