当前位置: 首页 > wzjs >正文

做网站申请域名的流程建设网站公司

做网站申请域名的流程,建设网站公司,帮非法集资公司做网站违法吗,巨量引擎广告投放平台代理通过在 OpenResty 的配置文件中定义不同的 location 块,将匹配特定 URL 路径的请求转发到不同的后端 FastAPI 应用(即使它们运行在不同的端口或甚至是不同的服务器/容器上)。 核心思路: 多个 FastAPI 应用实例: 你的每…

通过在 OpenResty 的配置文件中定义不同的 location 块,将匹配特定 URL 路径的请求转发到不同的后端 FastAPI 应用(即使它们运行在不同的端口或甚至是不同的服务器/容器上)。

核心思路:

  1. 多个 FastAPI 应用实例:

    • 你的每个 FastAPI 应用(例如 “Tool App”, “ServiceB App”)会独立运行,监听在各自的端口上。
    • 例如:
      • Tool App 运行在 127.0.0.1:8001 (或 Docker 容器 tool_app_container:8001)
      • ServiceB App 运行在 127.0.0.1:8002 (或 Docker 容器 serviceb_app_container:8002)
  2. OpenResty 配置:

    • 在 OpenResty 的 server 配置块中,为每个你想映射的 URL 路径创建一个 location 块。
    • 在每个 location 块内部,使用 proxy_pass 指令将请求转发到对应的 FastAPI 应用的地址和端口。

OpenResty 配置示例

假设你有以下需求:

  • XXX.com/tool/ 下的所有请求 -> Tool App (监听在 8001 端口)
  • XXX.com/serviceB/ 下的所有请求 -> ServiceB App (监听在 8002 端口)
  • XXX.com/static/ -> 静态文件
  • XXX.com/ -> 前端单页应用 (SPA) 或其他默认 FastAPI 应用 (监听在 8000 端口)
# /usr/local/openresty/nginx/conf/nginx.conf 或 /etc/nginx/conf.d/your-site.conf# 为每个 FastAPI 应用定义上游服务器组 (推荐,方便管理和扩展)
upstream fastapi_default_app {server 127.0.0.1:8000; # 或者 Docker 服务名:端口,例如 default_fastapi_service:8000# server unix:/path/to/default_app.sock;
}upstream fastapi_tool_app {server 127.0.0.1:8001; # 或者 Docker 服务名:端口,例如 tool_fastapi_service:8001# server unix:/path/to/tool_app.sock;
}upstream fastapi_serviceb_app {server 127.0.0.1:8002; # 或者 Docker 服务名:端口,例如 serviceb_fastapi_service:8002# server unix:/path/to/serviceb_app.sock;
}server {listen 80;server_name XXX.com; # 替换为你的域名# 通用的代理头部设置,可以在 server 级别或 http 级别设置proxy_http_version 1.1; # 推荐,支持 keepaliveproxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;proxy_set_header Upgrade $http_upgrade; # 用于 WebSocketproxy_set_header Connection "upgrade";    # 用于 WebSocket# 静态文件location /static/ {alias /path/to/your/project/static/;expires 30d;add_header Cache-Control public;}# 路由到 Tool Applocation /tool/ { # 注意末尾的斜杠# proxy_pass 指令末尾的斜杠很重要,它会影响路径如何传递给后端# 当 location 和 proxy_pass 末尾都有斜杠时,location 匹配的路径前缀会被移除# 例如:XXX.com/tool/myaction -> 后端收到 /myactionproxy_pass http://fastapi_tool_app/;}# 路由到 ServiceB Applocation /serviceB/ {proxy_pass http://fastapi_serviceb_app/;}# 如果有其他特定路径# location /another-path/ {#     proxy_pass http://another_backend_service/;# }# 默认的 FastAPI 应用或前端 SPAlocation / {# 如果是 FastAPI 应用作为默认# proxy_pass http://fastapi_default_app;# 如果是前端 SPAroot /path/to/your/frontend/dist;try_files $uri $uri/ /index.html;}# Lua 脚本可以在这些 location 块内或 server 块级别使用# access_by_lua_block { ... }
}

关于 proxy_pass 和路径重写的重要说明:

  • location /path/ (带斜杠) 和 proxy_pass http://backend/ (带斜杠):
    当请求 XXX.com/path/subpath 时,proxy_pass 会将 /path/ 从请求 URI 中移除,然后将 /subpath 附加到 http://backend/ 后面,所以后端收到的是 /subpath。这通常是你想要的行为,因为后端应用不需要关心外部的 /path/ 前缀。

  • location /path/ (带斜杠) 和 proxy_pass http://backend (不带斜杠):
    当请求 XXX.com/path/subpath 时,整个原始请求 URI (/path/subpath) 会被附加到 http://backend 后面,后端收到的是 /path/subpath

  • location /path (不带斜杠) 和 proxy_pass http://backend (不带斜杠):
    当请求 XXX.com/path/subpath 时,后端收到的是 /path/subpath

选择哪种方式取决于你的 FastAPI 应用是如何配置路由的。通常推荐第一种方式(location /prefix/proxy_pass http://backend/),这样 FastAPI 应用内部的路由可以从根路径 / 开始定义,而不需要包含 /prefix

FastAPI 应用端的考虑:

如果 OpenResty 在转发时没有移除路径前缀(例如,location /tool/ 转发后,FastAPI 仍然收到 /tool/myaction),那么你的 FastAPI 路由需要包含这个前缀:

# tool_app.py
from fastapi import FastAPIapp = FastAPI() # 默认情况下,FastAPI 不知道它被代理在 /tool/ 之下@app.get("/tool/items/{item_id}") # 路由包含 /tool
async def read_tool_item(item_id: int):return {"item_id": item_id, "app": "Tool App"}

如果 OpenResty 在转发时移除了路径前缀(例如,使用 location /tool/ { proxy_pass http://backend/; }),那么 FastAPI 应用内部的路由就可以从根路径开始定义:

# tool_app.py
from fastapi import FastAPI# 如果希望 FastAPI 生成的 URL (例如在 OpenAPI 文档中) 包含 /tool 前缀
# 即使它在运行时不知道这个前缀,可以使用 root_path
# app = FastAPI(root_path="/tool") # 这样 OpenAPI 文档和重定向会正确
app = FastAPI() # 或者不设置 root_path,如果不需要它自动处理前缀@app.get("/items/{item_id}") # 路由从 / 开始,因为 /tool/ 已被 OpenResty 处理
async def read_item(item_id: int):return {"item_id": item_id, "app": "Tool App"}

在多数情况下,让代理(OpenResty)处理路径前缀的剥离,使后端应用(FastAPI)保持简单,是一个更好的做法。如果FastAPI需要生成包含此前缀的URL(例如在OpenAPI文档或重定向中),可以使用FastAPI(root_path="/yourprefix")

使用 Docker Compose 管理多个 FastAPI 服务和 OpenResty

这是一个简化的 docker-compose.yml 示例,展示了如何组织:

version: '3.8'services:fastapi_default:build: ./path_to_default_fastapi_appcontainer_name: fastapi_default_container# command: gunicorn -w 2 -k uvicorn.workers.UvicornWorker main:app -b 0.0.0.0:8000expose:- "8000"networks:- web_internal_networkfastapi_tool:build: ./path_to_tool_fastapi_appcontainer_name: fastapi_tool_container# command: gunicorn -w 2 -k uvicorn.workers.UvicornWorker main:app -b 0.0.0.0:8001expose: # 假设它在容器内监听 8001- "8001" # 注意:这里是容器内部端口,OpenResty会通过服务名和这个端口访问networks:- web_internal_networkfastapi_serviceb:build: ./path_to_serviceb_fastapi_appcontainer_name: fastapi_serviceb_container# command: gunicorn -w 2 -k uvicorn.workers.UvicornWorker main:app -b 0.0.0.0:8002expose:- "8002"networks:- web_internal_networkopenresty:image: openresty/openresty:alpine # 或者你自定义的 OpenResty 镜像container_name: openresty_proxy_containerports:- "80:80"- "443:443"volumes:- ./openresty_configs/nginx.conf:/usr/local/openresty/nginx/conf/nginx.conf:ro- ./openresty_configs/conf.d/:/etc/nginx/conf.d/:ro- ./static_files/:/var/www/static/:ro# - /path/to/ssl_certs/:/etc/ssl/certs/:rodepends_on:- fastapi_default- fastapi_tool- fastapi_servicebnetworks:- web_internal_networknetworks:web_internal_network:driver: bridge

在上述 Docker Compose 配置中,OpenResty 的 nginx.confconf.d/your-site.conf 文件中的 upstreamproxy_pass 指令应该使用 Docker 的服务名:

# 在 OpenResty 的配置文件中
upstream fastapi_default_app {server fastapi_default:8000; # 服务名:容器内端口
}upstream fastapi_tool_app {server fastapi_tool:8001; # 服务名:容器内端口
}upstream fastapi_serviceb_app {server fastapi_serviceb:8002; # 服务名:容器内端口
}# ... 然后在 location 块中使用这些 upstream
location /tool/ {proxy_pass http://fastapi_tool_app/;
}
# ...
http://www.dtcms.com/wzjs/135396.html

相关文章:

  • 网上哪个网站做的系统好用吗培训seo哪家学校好
  • 提升网站权重吗免费写文案神器
  • 专做投放广告网站注册网站域名
  • 徐汇区网站建设推一手新闻发稿平台
  • 那些外贸网站个人可以做做广告的怎么找客户
  • 清远网站开发公司seo从零开始到精通200讲解
  • 潜江网站建设批发软文媒体发稿平台
  • 网站建设入门2022新闻大事件摘抄
  • 群晖可以做网站服务器今日国内新闻大事20条
  • 新乡微网站建设seo一个月工资一般多少
  • vs2017建设网站线下推广的渠道和方法
  • 微信订阅号 网站开发常州网站建设优化
  • wordpress占用cpu过高aso优化运营
  • 合肥网站推广培训微信广告推广价格表
  • 哪种网站语言最好云南省最新疫情情况
  • 绿色在线网站模板下载三只松鼠软文范例500字
  • 常用的网页编辑工具有哪些seo网站推广如何做
  • 网站建设与开发做什么成人职业技术培训学校
  • 企业网站建设方案 ppt搜狗站长平台验证网站
  • 简单的网站代码网站快速排名优化报价
  • 后台模板链接前台网站网站怎么制作教程
  • 微信建立免费网站免费刷推广链接的软件
  • 湖南手机版建站系统哪个好可口可乐营销策划方案
  • wordpress category name南京seo优化培训
  • 网站开发中所需要的绘图工具微信推广平台
  • 做网站如何导入信用卡付款低价刷粉网站推广
  • 攀枝花网站建设兼职seo在线培训
  • 制作网站制作网站建设的新闻投稿平台
  • 工作人员否认陈道明演庆余年2搜索引擎优化心得体会
  • 南宁网站建设哪家好公司广告推广