NGINX загружает DOM, но возвращает 502 для изображений и активов

Я создаю пользовательскую страницу размером 50x.html, но не могу загрузить ресурсы из моего usr/share/nginx/html каталог. Я думаю, что проблема заключается в моих исходных настройках для обратного прокси-сервера для моего приложения. Как мне избавиться от upstream: "http://127.0.0.1:1234" только при обслуживании моего статического файла nginx из usr/share/nginx/html (то есть, когда обратный прокси-сервер не работает), но во всех других настройках используется восходящий канал (например, как моя конфигурация уже настроена прямо сейчас)?

Журнал ошибок Nginx:

2016/07/22 16:10:06 [error] 24000#0: *94 connect() failed (111: Connection refused) while connecting to upstream, client: <<client-ip-here>>, server: foo.com, request: "GET /img-1024.png HTTP/1.1", upstream: "http://127.0.0.1:1234/img-1024.png", host: "foo.com", referrer: "https://foo.com/logo.png"

nginx.conf:

upstream api {
    server 127.0.0.1:1234;
}

...

error_page 501 502 503 /500.html;

location = /500.html {
    root /usr/share/nginx/html;
}

...

Я пытался использовать try_files: try_files $uri $uri/ или в каком-то варианте безрезультатно.

Спасибо

2 ответа

Решение

Подход состоит в том, чтобы обслуживать статические файлы во внешнем интерфейсе и только через прокси, если они не существуют. Вы можете развернуть страницы ошибок и ресурсы на этом сервере. Избегайте конфликтов каталогов между интерфейсом и бэкэндом.

Например:

root /usr/share/nginx/html;

location / {
    try_files $uri @proxy;
}

location @proxy {
    proxy_pass http://api;
}

Смотрите этот документ для деталей.

Вы правы - nginx не может отличить запрос ресурсов страницы ошибок от обычных запросов.

Вы должны либо изменить ресурсы, чтобы использовать уникальный путь, по которому можно выполнить сопоставление местоположения (возможно, что-то вроде /500/logo.png) или использовать внешнюю службу для размещения ресурсов (S3 и т. п.) и загрузить ее оттуда.

Для совпадения местоположения это будет выглядеть примерно так:

location /500 {
    root /usr/share/nginx/html;
}
Другие вопросы по тегам