Docker Nginx 获取用户真实IP

1. 概述

在使用 Docker 部署 Nginx 时,我们有时候需要获取用户的真实 IP 地址。因为在 Docker 环境中,Nginx 默认只会获取到容器 IP,而不是用户的真实 IP。本文将向你介绍如何通过几个简单的步骤来实现 Docker Nginx 获取用户真实 IP 的功能。

2. 实现步骤

下面是实现 Docker Nginx 获取用户真实 IP 的步骤:

步骤 描述
1. 创建一个网络 创建一个自定义的 Docker 网络,用于连接 Nginx 容器和获取真实 IP 的服务。
2. 创建获取真实 IP 的服务 创建一个获取真实 IP 的服务,这个服务将会运行在与 Nginx 容器相同的网络中。
3. 配置 Nginx 配置 Nginx,使其能够将 X-Real-IP 头部信息传递给获取真实 IP 的服务。
4. 修改 Nginx Dockerfile 修改 Nginx 的 Dockerfile,使其能够使用我们创建的网络。
5. 构建和运行 Nginx 容器 构建和运行 Nginx 容器,并连接到我们创建的网络。

下面我们将详细介绍每个步骤需要做的事情以及相应的代码。

3. 创建一个网络

我们首先需要创建一个自定义的 Docker 网络,用于连接 Nginx 容器和获取真实 IP 的服务。可以使用以下命令创建网络:

docker network create mynetwork

4. 创建获取真实 IP 的服务

接下来,我们需要创建一个获取真实 IP 的服务。这个服务将会运行在与 Nginx 容器相同的网络中,以便能够获取到用户的真实 IP 地址。

FROM alpine:3.14
RUN apk update && apk add --no-cache curl
CMD exec curl --silent 

上面的代码使用 Alpine Linux 作为基础镜像,并安装了 curl。当容器启动时,它将执行一个 curl 命令来获取主机的公共 IP 地址,并将结果输出。

5. 配置 Nginx

我们需要修改 Nginx 的配置文件,使其能够将 X-Real-IP 头部信息传递给获取真实 IP 的服务。

在 Nginx 的配置文件中添加以下代码:

location / {
    proxy_set_header X-Real-IP $remote_addr;
    proxy_pass http://real-ip-service;
}

上面的代码将会将用户的真实 IP 地址通过 X-Real-IP 头部信息传递给名为 real-ip-service 的 upstream。

6. 修改 Nginx Dockerfile

为了使 Nginx 容器能够使用我们创建的网络,我们需要修改 Nginx 的 Dockerfile。

在 Dockerfile 中添加以下代码:

FROM nginx:latest
COPY nginx.conf /etc/nginx/nginx.conf

上面的代码将会将我们修改后的 Nginx 配置文件复制到容器中。

7. 构建和运行 Nginx 容器

现在我们可以构建和运行 Nginx 容器,并连接到我们创建的网络。

docker build -t mynginx .
docker run -d --name mynginx --network mynetwork -p 80:80 mynginx

上面的代码将会构建一个名为 mynginx 的镜像,并在 mynetwork 网络中运行一个名为 mynginx 的容器,将容器的 80 端口映射到主机的 80 端口。

8. 结论

通过以上步骤,我们成功实现了 Docker Nginx 获取用户真实 IP 的功能。现在,当用户请求 Nginx 时,Nginx 将会将用户的真实 IP 地址通过 X-Real-IP 头部信息传递给获取真实 IP 的服务,从而我们能够获取到用户的真实 IP 地址。

希望本文对你有所帮助!