【问题标题】:How to show (the contents of) a subdomain as a path/subfolder with nginx如何使用 nginx 将子域(的内容)显示为路径/子文件夹
【发布时间】:2018-12-07 23:36:09
【问题描述】:
我有 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。
我什至不知道这个的正确术语.. 代理?掩蔽?
【问题讨论】:
标签:
django
nginx
devops
ghost-blog
【解决方案1】:
您需要的称为反向代理。试试这个配置:
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。