无需修改Flask代码,实现localhost:5000/some_path重定向至localhost:5000
无需修改Flask代码实现路径重定向的方案
方案一:添加Nginx反向代理(完全不改动API代码)
在你的docker-compose中新增一个Nginx服务作为流量入口,负责将/some_path的请求重定向或转发到API的根路径,全程无需触碰Flask代码。
- 先创建
nginx.conf配置文件,内容如下:
server { listen 80; location /some_path { # 永久重定向到根路径,自动保留原请求的查询参数 return 301 $scheme://$host/; # 若需要静默转发(不改变浏览器地址栏),替换为以下配置: # proxy_pass http://my-api:5000/; # proxy_set_header Host $host; # proxy_set_header X-Real-IP $remote_addr; } location / { proxy_pass http://my-api:5000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } }
- 修改
docker-compose.yml,添加Nginx服务并调整API的端口暴露方式:
# Use root/example as user/password credentials version: "3.1" services: my-db: image: mariadb restart: always environment: MARIADB_ROOT_PASSWORD: example ports: - 3306:3306 volumes: - ./0_schema.sql:/docker-entrypoint-initdb.d/0_schema.sql - ./1_data.sql:/docker-entrypoint-initdb.d/1_data.sql adminer: image: adminer restart: always environment: ADMINER_DEFAULT_SERVER: my-db ports: - 8080:8080 my-api: build: ../my-awesome-api/ # 仅在容器内部暴露端口,不再直接对外 expose: - 5000 nginx: image: nginx:alpine restart: always ports: - 5000:80 volumes: - ./nginx.conf:/etc/nginx/conf.d/default.conf depends_on: - my-api
配置完成后,外部应用访问localhost:5000/some_path时,Nginx会自动完成重定向/转发,完全不影响原有API的正常运行。
方案二:使用WSGI中间件(无需修改API业务逻辑)
如果不想新增Nginx服务,可以给Flask应用添加一个WSGI中间件,仅需新增启动脚本、不改动原有API路由:
- 创建
wsgi.py文件:
from my_awesome_api import app # 导入你的Flask应用实例 class PathRewriteMiddleware: def __init__(self, app): self.app = app def __call__(self, environ, start_response): # 匹配/some_path开头的路径并重写为根路径 if environ['PATH_INFO'].startswith('/some_path'): environ['PATH_INFO'] = '/' return self.app(environ, start_response) app.wsgi_app = PathRewriteMiddleware(app.wsgi_app) if __name__ == '__main__': app.run(host='0.0.0.0', port=5000)
- 修改API的Dockerfile,将启动命令改为运行这个
wsgi.py文件即可。
内容的提问来源于stack exchange,提问作者Gabriel Muñumel
相关产品推荐
相关产品推荐

