django - 如何使用 nginx 将子域(的内容)显示为路径/子文件夹
问题描述
我有 2 个网站:
- api.example.com(一个 Django 应用程序)
- example.com(Ghost 的博客)
这是我当前为我的博客设置的 nginx(根域)
server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;
server_name example.com
root /usr/share/nginx/html;
index index.html index.htm;
# this was created by ghost one click deploy on DigitalOcean
location / {
proxy_pass http://localhost:2369;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_buffering off;
}
我正在努力做到这一点,以便我可以去example.com/api
查看 的内容api.example.com
,但没有被重定向,并且地址栏中的 url 应该显示example.com/api
。
我什至不知道这个的正确术语.. 代理?掩蔽?
解决方案
您需要的称为反向代理。试试这个配置:
server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;
server_name example.com;
resolver <some_name_server_ip_here>;
root /usr/share/nginx/html;
index index.html index.htm;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_buffering off;
location / {
proxy_set_header Host $http_host;
proxy_pass http://localhost:2369;
}
location /api {
proxy_set_header Host api.example.com;
proxy_pass http://api.example.com;
}
}
如果您api.example.com
使用域名指定支持,则需要在配置中添加resolver
指令server
。或者您可以使用 IP 地址指定它而不使用resolver
指令。无论如何,您需要使用proxy_set_header
指令明确指定您的 api 后端服务器名称。如果您有本地名称服务器,则可以使用本地名称服务器作为resolver
指令参数,或者使用外部名称服务器,例如 Google 公共 DNS (8.8.8.8) 或 ISP 为您提供的 DNS。
推荐阅读
- visual-studio-2017 - 是
和 标签应该适用于 C# 代码片段? - php - laravel 中的数组合并
- asp.net-core - Add Web API To .Net Core Console Application
- c# - String to 7-bit ASCII
- python - 我想知道如何计算图像中颜色的百分比
- jasper-reports - 贾斯珀报告| 我想将列详细信息中的行添加到列页脚,页脚不应该是浮动碧玉报告
- android - CoordinatorLayout里面的NestedScrollView滚动问题
- javascript - ckEditor 拖放到其他容器
- html - 在 Angular 6 中调用函数后,类型脚本变量未在 html 中更新
- c++ - 给定有向无环图的 dfs 排序,枚举从根到叶的所有路径