NginX переписывает и абсолютные пути к ресурсам
В моем домене у меня есть поддомен для приложений Meteor, скажем
http://meteor.example.com/
Под этим я хотел бы поставить отдельные приложения, с URI для каждого. Скажем, в метеорологическом приложении Чат должен иметь следующий URL:
http://meteor.example.com/chat/
Это моя конфигурация:
location ~ /chat/(.*) {
proxy_pass http://127.0.0.1:4000/$1;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_set_header X-Forwarded-For $remote_addr;
if ($uri != /snake_meteor/) {
expires 30d;
}
}
Я следовал этому руководству, чтобы настроить его.
Теперь это частично работает. Он передает запрос приложению и возвращает правильный HTML-код для страницы, но затем начинаются проблемы. Возвращенный HTML ссылается на файлы ресурсов, такие как JS, CSS и изображения. Ссылки в HTML к сожалению на форме
<script src="/somescript.js"></script>
так что просит
http://meteor.example.com/somescript.js
Абсолютные пути...
Изменить их в приложении на самом деле не вариант. Это также не вариант размещения ресурсов в корне домена.
Что-нибудь, что я могу сделать в конфигурации NginX, чтобы заставить это работать? Или я должен сделать это каким-то другим способом, как другой уровень поддоменов?
Изменить: мой друг предложил проверить заголовок реферера. Это частично работает. Некоторые файлы извлекаются, но установка веб-сокета и некоторые другие не удаются.
Мой добавленный конфиг для этого
location / {
if ($http_referer ~ /chat/) {
rewrite ^(.*) /chat/$1 permanent;
}
}
Это приемлемый способ сделать это? Я уверен, что эту часть конфигурации можно как-то переписать, чтобы учесть и другие метеорные приложения в том же домене, но я не эксперт в конфигурации NginX. Небольшая помощь, пожалуйста?
1 ответ
К сожалению, единственное разумное решение - это исправить приложение, чтобы оно генерировало правильные URL-адреса. Все другие решения вызовут тонкие проблемы.