|
项目方案:Nginx在Docker中正确获取访问者的IP
引言
在使用Docker容器部署Web应用时,经常需要使用Nginx作为反向代理服务器。然而,由于容器网络的特性,Nginx默认情况下只能获得容器内部的IP地址,无法正确获取访问者的真实IP地址。本文将介绍一种在Docker中正确获取访问者IP的解决方案,并提供相关的代码示例。
解决方案
步骤一:配置Nginx
在Nginx的配置文件中,需要对proxy_set_header指令进行设置,将X-Real-IP和X-Forwarded-For的值传递给后端服务器。这样后端服务器就能获取到访问者的真实IP地址。
以下是一个示例的Nginx配置文件:
- server {
- listen 80;
- server_name example.com;
- location / {
- proxy_pass http://backend;
- proxy_set_header Host $host;
- proxy_set_header X-Real-IP $remote_addr;
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
- }
- # 其他配置...
- }
- upstream backend {
- server backend_server:8080;
- }
复制代码- docker run -d --name nginx-container --network=host nginx-image
复制代码- from flask import Flask, request
- app = Flask(__name__)
- @app.route('/')
- def index():
- visitor_ip = request.headers.get('X-Real-IP') or request.headers.get('X-Forwarded-For') or request.remote_addr
- return f"Hello, your IP address is {visitor_ip}"
- if __name__ == '__main__':
- app.run(host='0.0.0.0', port=8080)
复制代码- erDiagram
- Nginx --|> Docker
- Docker --|> Host
- Nginx --|> Backend Server
- Backend Server --|> Flask App
- Backend Server --|> Visitor IP
复制代码
原文链接:Nginx在Docker中如何正确获得访问者的IP_mob64ca12e4594b的技术博客_51CTO博客
|
|