Дано:
nginx на фронтэнде в качестве балансировщика.
jetty на бэкэнде.
Пользователи должны приходить на sub.domain.ru.
И в строке браузера должно везде оставаться sub.domain.ru.
Однако к jetty уже должны приходить запросы вида domain.ru/sub/
Пока что допёр до такой конфигурации.
Для domain.ru отправляем запрос на прямую на бэкэнд
А для m.domain.ru переписываем поле заголовка Host в domain.ru, а запрос отправляем к бэкэнду переписывая URI как /m/{запрос}
И вроде бы даже все работает. Но дело в том, что в приложении все URL к статике прописаны как /public/mobile. Соответственно при заходе на m.domain.ru они преобразовываются в mobile.ru/m/public/mobile, и сервер их не находит. Написал workaround, но что-то он не работает. Не пойму что я делаю не так.
Может быть есть вообще более изящное решение этой проблемы?
server {
listen 80;
server_name m.domain.ru;
root /path/to/jetty/webapps/;
# все запросы к m.domain.ru переписываем отправляем к jetty как localhost:8080/m/, а поле заголовка Host переписываем на domain.ru
location / {
proxy_pass http://127.0.0.1:8080/m$request_uri;
proxy_set_header Host domain.ru;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_cache off;
proxy_redirect off;
}
#но делаем исключение для статики
location /public/mobile {
proxy_pass http://localhost:8080/;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host domain.ru;
proxy_cache off;
proxy_redirect off;
}
}
server {
listen 80;
server_name domain.ru;
root /path/to/jetty/webapps/;
location / {
proxy_pass http://localhost:8080/;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_cache off;
proxy_redirect off;
}
}