m.domain.ru -> domain.ru/m на nginx (но с подковыркой)

Дано:
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 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 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 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; } }

Нет комментариев