Как обслуживать подкаталог приложения (127.0.0.1:8000/app-subdirectory) из корневого URL-адреса?

Я запутался, как это сделать. Кажется, что большинство в сети хотят обслуживать подкаталог (example.com/my-subdirectory) для различных корней приложения.

Я хочу, чтобы example.com/foo был прозрачно проксирован до 127.0.0.1/my-subdirectory/foo.

Есть указатели?

Я пробовал почти все комбинации proxy_pass и proxy_redirect:(

Я чувствую, что это очень близко

201      rewrite /(.*) /my-subdirectory/$1 break;
202      proxy_pass http://127.0.0.1:8000;
203      proxy_redirect off;
205      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

Но, к сожалению, это переписывает URL-адрес в браузере тоже.

Обновить

Я обнаружил, что прокси-сервер работает, но мое приложение перенаправляется на HTTPS, делая большую часть моей отладки бесполезной. Я бы изменил настройку в nginx и нашел бы запутанный вывод, циклы перенаправления и т. Д., Поскольку nginx проходил через правила listen 443.

Теперь, когда я отключил как можно больше перенаправлений в своем приложении, все возвращается к здравому смыслу.

Спасибо всем за отрицательные отзывы - я не думаю, что мой вопрос был особенно недостойным, и я задаю вопросы только тогда, когда я потратил по крайней мере 5 часов, работая над проблемой без конца.

1 ответ

Решение

Вам не нужно ничего переписывать, если вы просто хотите передать все в свое приложение. Попробуйте что-нибудь вместе

location / {
  proxy_pass http://127.0.0.1:8000/my-subdirectory/;
  proxy_redirect off;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

Чтобы ваш браузер был перенаправлен на правильный хост (если ваше приложение этого не делает), вы должны использовать

proxy_redirect default;

вместо этого, который должен быть эквивалентен

proxy_redirect http://127.0.0.1:8000/my-subdirectory/ /;

в твоем случае. Проверьте

http://wiki.nginx.org/HttpProxyModule

Другие вопросы по тегам