В моем домене у меня есть поддомен для приложений Meteor, например
http://meteor.example.com/
Под этим я хотел бы поместить отдельные приложения с URI для каждого. Скажите приложение Meteor Чат должен иметь этот 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;
}
}
Это приемлемый способ сделать это? Я уверен, что эту часть конфигурации можно как-то переписать, чтобы также учесть другие приложения Meteor в том же домене, но я не эксперт в конфигурации NginX. Небольшая помощь, пожалуйста?
К сожалению, единственное разумное решение - исправить приложение, чтобы оно генерировало правильные URL-адреса. Все другие решения вызовут небольшие проблемы.