找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 470|回复: 0

Nginx反代Docker里面的Flask如何获取访客IP

[复制链接]

28

主题

1

回帖

148

积分

管理员

积分
148
发表于 2024-6-22 23:25:01 | 显示全部楼层 |阅读模式



项目方案:Nginx在Docker中正确获取访问者的IP
引言
在使用Docker容器部署Web应用时,经常需要使用Nginx作为反向代理服务器。然而,由于容器网络的特性,Nginx默认情况下只能获得容器内部的IP地址,无法正确获取访问者的真实IP地址。本文将介绍一种在Docker中正确获取访问者IP的解决方案,并提供相关的代码示例。

解决方案
步骤一:配置Nginx
在Nginx的配置文件中,需要对proxy_set_header指令进行设置,将X-Real-IP和X-Forwarded-For的值传递给后端服务器。这样后端服务器就能获取到访问者的真实IP地址。

以下是一个示例的Nginx配置文件:

  1. server {
  2.     listen 80;
  3.     server_name example.com;

  4.     location / {
  5.         proxy_pass http://backend;
  6.         proxy_set_header Host $host;
  7.         proxy_set_header X-Real-IP $remote_addr;
  8.         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  9.     }

  10.     # 其他配置...
  11. }

  12. upstream backend {
  13.     server backend_server:8080;
  14. }
复制代码
  1. docker run -d --name nginx-container --network=host nginx-image
复制代码
  1. from flask import Flask, request

  2. app = Flask(__name__)

  3. @app.route('/')
  4. def index():
  5.     visitor_ip = request.headers.get('X-Real-IP') or request.headers.get('X-Forwarded-For') or request.remote_addr
  6.     return f"Hello, your IP address is {visitor_ip}"

  7. if __name__ == '__main__':
  8.     app.run(host='0.0.0.0', port=8080)
复制代码
  1. erDiagram
  2.     Nginx --|> Docker
  3.     Docker --|> Host
  4.     Nginx --|> Backend Server
  5.     Backend Server --|> Flask App
  6.     Backend Server --|> Visitor IP
复制代码

原文链接:Nginx在Docker中如何正确获得访问者的IP_mob64ca12e4594b的技术博客_51CTO博客









您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|整天BBB

GMT+8, 2025-1-10 18:54 , Processed in 0.156423 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表