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

Как передать URL-адрес через прокси-сервер в Nginx, где совпадение местоположения - это URL-адрес, а пропуск прокси-сервера имеет другой URL-адрес

Мы разместили некоторые xml-файлы в корзине S3 на Amazon AWS. Веб-сервер работает на Nginx. Для определенного URL-адреса, соответствующего '/super-shots.xml', Nginx должен прокси-сервер проходить через местоположение S3, которое: http://mybucket.s3.amazonaws.com/depth0/depth1/depth2/sitemap.xml

Я хочу это (Nginx Config):

location ~* /super-shots.xml {
    proxy_pass http://mybucket.s3.amazonaws.com/depth0/depth1/depth2/sitemap.xml;
}

Результат - ошибка:

nginx: [emerg] proxy_pass не может иметь часть URI в местоположении, заданном регулярным выражением, или внутри именованного местоположения, или внутри оператора if, или внутри блока limit_except

Если я не выполняю сопоставление регулярного выражения (~ * | ~), то синтаксических ошибок нет, но страница возвращает 404. Обратите внимание, что файл не существует по системному пути.

Я пробовал искать решение, но в большинстве случаев трактовал путь как совпадение. Как мне обойти это?

На данный момент я сделал прокси-проход на основе пути, который работает (см. Ниже). Но я хочу это с совпадением URL.

#Nginx Config:
location  /super-shots {
    proxy_pass http://mybucket.s3.amazonaws.com/depth0/depth1/depth2/sitemap.xml;
}

# On file system : Empty directory
mkdir $docroot/depth0/depth1/depth2/

nginx -s reload

Обновление 1: на основе комментария Алексея Тена. Образец конфигурации Nginx можно найти Вот

Вы пробовали простое?

location = /super-shots.xml {
    proxy_pass http://mybucket.s3.amazonaws.com/depth0/depth1/depth2/sitemap.xml;
}

Вам ничего не нужно в локальной файловой системе.

Ваша проблема в том, что запрос /super-shot.xml Спички location ~* \.(js|ico|...xml.... С помощью = суффикс, мы сообщаем nginx, что именно этот запрос должен быть обработан здесь, и он не должен искать другие возможные подходящие местоположения.