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

Другие вопросы по тегам