Как показать (содержимое) поддомен в виде пути / подпапки с помощью nginx - PullRequest
0 голосов
/ 08 декабря 2018

У меня есть 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.

Я даже не знаю правильный термин для этого .. Прокси?Маскировка?

1 Ответ

0 голосов
/ 08 декабря 2018

То, что вам нужно, называется обратным проксированием.Попробуйте эту конфигурацию:

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.В любом случае вам нужно будет явно указать имя вашего внутреннего сервера api с помощью директивы proxy_set_header.Вы можете использовать свой локальный сервер имен в качестве параметра директивы resolver, если он у вас есть, или использовать что-то внешнее, например, общедоступный DNS Google (8.8.8.8) или DNS, предоставленный вам вашим провайдером.

...