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

Nginx: / как для статического контента, так и для прокси-приложения

Я пытаюсь настроить блок сервера nginx как сервер статического содержимого и обратный прокси. Nginx должен сначала проверить наличие статических файлов, а затем перенаправить в прокси-приложение, если файл не существует. Он настроен так:

location @backend {
    proxy_pass http://example.net;
}

location / {
    try_files $uri $uri/ @backend;
}

Однако при такой конфигурации доступ к http://example.com возвращает 403 Forbidden: похоже, что nginx пытается обслуживать статическую папку, не находит index.html и не работает без прокси example.net. Затем мне нужно явно добавить маршрут для /:

location = / {
    proxy_pass http://example.net;
}

Туда http://example.com/ правильно проксируется на http://example.net. Но такая конфигурация кажется странной: есть ли лучший способ прокси? / ?

В $uri/ пункт вызывает проблему.

Если трейлинг не нужен / для добавления к URI, представляющим статический каталог, вы можете использовать:

location / {
    try_files $uri @backend;
}

Кроме того, ваше существующее решение также работает с try_files вместо дубликата proxy_pass:

location = / {
    try_files $uri @backend;
}

Видеть этот документ для большего.