首页 > 解决方案 > 如何使用 nginx 将子域(的内容)显示为路径/子文件夹

问题描述

我有 2 个网站:

这是我当前为我的博客设置的 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

我什至不知道这个的正确术语.. 代理?掩蔽?

标签: djangonginxdevopsghost-blog

解决方案


您需要的称为反向代理。试试这个配置:

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。


推荐阅读