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

proxy_pass CDN файл в NGINX, но получил неверный запрос 502

Я использую S3 для хранения XML-файла и использую CloudFront для распространения этого файла. Я хочу использовать nginx proxy_pass, чтобы найти этот файл без изменения моего доменного имени. например www.mydomain.com/filename.xml URL-адрес S3 для этого файла: https://s3-ap-southeast-2.amazonaws.com/bucketname/bucket-sub-name/filename.xml URL-адрес CDN: https://dev.example.com/filename.xml Если я напишу конфигурацию nginx, как показано ниже, она будет работать нормально.

if($request_uri = "/filename.xml") {
    rewrite .* /bucketname/bucket-sub-name$request_uri break;
    proxy_pass https://s3-ap-southeast-2.amazonaws.com;
}

Но если я изменил конфигурацию nginx, как показано ниже, это дало мне 502 плохих шлюза.

if($request_uri = "/filename.xml"){
    proxy_pass https://dev.example.com$request_uri;
}

или

if($request_uri = "/filename.xml"){
    proxy_pass https://s3-ap-southeast-2.amazonaws.com/bucketname/bucket-sub-name$request_uri;
}

Кто-нибудь может объяснить, почему первая работает, а вторая и третья части не работают? Это потому, что в конфигурации CDN что-то не так? Возможно ли, что proxu_pass URL напрямую?

Обе if и rewrite директивы являются частью ngx_http_rewrite_module модуль и поведение, которое вы получаете, сильно различаются в зависимости от окружающих их инструкций. Это хорошая идея избегать if когда ты можешь. В вашем случае вы, вероятно, можете использовать вложенные locations...

Ваша вторая и третья части, вероятно, не работают, потому что они указывают точные URL-адреса без перезаписи, и эти URL-адреса не правы. Если URL-адреса неверны, вы можете проверить это в error_log Nginx или также с помощью отладочной версии двоичного файла nginx (nginx-debug) и переключение журнал ошибок из Nginx в debug.