Назад | Перейти на главную страницу

NginX перезаписывает и абсолютные пути к ресурсам

В моем домене у меня есть поддомен для приложений 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-адреса. Все другие решения вызовут небольшие проблемы.