Мы разместили некоторые 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, что именно этот запрос должен быть обработан здесь, и он не должен искать другие возможные подходящие местоположения.