proxy_pass из поддомена с подстановочными символами через NGINX - PullRequest
0 голосов
/ 21 февраля 2020

Я пытаюсь показать пользователям, посещающим субдомен подстановочного знака, подпапку: ab c .example.com -> example.com/xyz

Этот NGINX код блока сервера работает:

server {
   # server name with regexp
   server_name ~^(?<sub>[^.]+)\.example\.com$;
   # this server catches all requests to xxxx.example.com
   # and put "xxxx" to $sub variable
   location / {
        # finally we want to request different URI from remote server
        proxy_pass http://localhost:8000;
        # proxy_redirect will rewrite Location: header from backend
        # or you can leave proxy_redirect off;
        proxy_redirect http://localhost:8000 http://$sub.localhost:8000;
   }
[certbot code]
}

(найдено в вопросе 5249883 ).

Но при замене значения proxy_pass "https://localhost: 8000 " на "https:localhost: 8000 / xyz ", я получаю эти ошибки и пустую страницу:

Uncaught SyntaxError: Unexpected token '<'

как в socket.io.js, так и в общем виде. js.

Приложение, которое я запускаю на примере. ком построен с React / Gatsby. example.com/demo работает.

РЕДАКТИРОВАТЬ: Я поставил неправильные сообщения об ошибках, эти ошибки появились, когда я попытался что-то другое.

1 Ответ

1 голос
/ 24 февраля 2020

Проблема заключалась в том (как я теперь понимаю), что Гэтсби размещает скрипты по адресу example.com/[script-address] и, используя NGINX proxy_pass, адрес скрипта также изменяется на example.com/[subfolder]/ [script-address].

Решением этой проблемы является установка значения "path-prefix" в gatsby.config, как описано здесь: Документация Gatsby .

С выполняя это, я устанавливаю префикс для своего полного приложения, что на самом деле не то, что я хочу делать, поскольку основное приложение по-прежнему размещается на example.com, я хочу, чтобы субдомены передавались только на некоторые подстраницы. (Субдомены создаются пользователем и обслуживаются динамически основным приложением). Удивительно, но оба (основное приложение и субдомены) работают после изменения префикса пути.

Это, похоже, работает только для производственной сборки (вы должны передать флаг при сборке), так что в настоящее время я все еще не уверен что делать при разработке.

Если у вас есть идея, как я могу решить эту проблему лучше, пожалуйста, напишите мне:)

Спасибо Ивану и Ричарду за то, что поставили меня на правильный путь!

РЕДАКТИРОВАТЬ: лучше использовать префикс с активом: https://www.gatsbyjs.org/docs/asset-prefix/ Это все еще уродливо, и я думаю, что есть способ решить эту проблему с помощью NGINX. Я до сих пор не могу использовать эту сборку для разработки.

РЕДАКТИРОВАТЬ 2: После того, как я уже 3 дня возился с этим, я снова попытался найти похожий вопрос и мне повезло: https://serverfault.com/questions/840654/nginx-map-subdomain-to-a-subdirectory-on-proxied-server Я изменил свой код на:

    location    / {
    proxy_pass http://localhost:8000/xyz$uri/;
    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_redirect off;

   }

и он наконец-то работает:)

...