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

Почему использование nginx в качестве обратного прокси нарушает локальные ссылки?

Я только что настроил nginx в качестве обратного прокси, поэтому некоторые сайты, обслуживаемые из коробки, обслуживаются непосредственно им, а другие перенаправляются на сервер Node.js.

Однако сайт, обслуживаемый Node.js, отображается без CSS или изображений, поэтому я предполагаю, что ссылки каким-то образом не работают, но не знаю почему.

Ниже приведен единственный файл в / etc / nginx / sites-enabled:

server {

    listen   80; ## listen for ipv4
    listen   [::]:80 default ipv6only=on; ## listen for ipv6

    server_name  dev.my.site;

    access_log  /var/log/nginx/localhost.access.log;

    location / {
            root   /var/www;
            index  index.html index.htm;
    }

    location /myNodeSite {
            proxy_pass http://127.0.0.1:8080/;
            proxy_redirect off;
            proxy_set_header Host $host;
    }
}

Я думал, что, возможно, он пытается найти их в / var / www из-за первой записи, но удаление этого, похоже, не помогает.

Без дополнительных деталей это всего лишь предположение, но в вашем интерфейсе вы сделали свой node.js доступным по адресу /myNodeSite. Если ваш сайт node.js возвращает что-то вроде этого:

<img src="/images/myimage.png"/>

Клиент запросит /images/myimage.png...который не буду перенаправляйтесь на ваш сайт node.js, поскольку он не начинается с /myNodeSite. Есть несколько решений:

  • Сообщите своим приложениям node.js о префиксе, который вы используете во внешнем интерфейсе, чтобы они генерировали соответствующие ссылки. Всегда генерировать ссылки с помощью какой-то функции, которая учитывает это, а не статически кодировать ссылки.
  • Реализуйте какую-то функцию перезаписи на интерфейсе. Я не знаю nginx, но для Apache есть mod_proxy_html.

Вы также можете использовать исключительно относительные ссылки (без ведущих /) на вашем сайте node.js, но это подразумевает очень плоский макет сайта, и его легко сломать.