Ошибки NGINX proxy_pass 5xx, показывающие HTML-файл, размещенный на S3 + CloudFront - PullRequest
0 голосов
/ 08 октября 2018

Я борюсь за свою конфигурацию nginx 1.4.6, потому что я не могу прокси передать ошибки 5xx и 4xx, устанавливая html-файл, размещенный в корзине S3, используя вместо этого адрес CDN вместо адреса прямой корзины.Я хочу сделать это так, чтобы, если я изменил источник дистрибутива, мне не пришлось вручную изменять все мои конфигурации nginx на всех моих серверах.

соответствующая часть моей рабочей конфигурации:

error_page 400 404 @error;
error_page 502 503 @maintenance;

location @maintenance {
      rewrite ^(.*)$ /mybucket/error_pages/under_construction.html break;
                    proxy_pass https://s3-eu-west-1.amazonaws.com;
}

location @error {
      rewrite ^(.*)$ /mybucket/error_pages/under_construction.html break;
                    proxy_pass https://s3-eu-west-1.amazonaws.com;
}

но, как вы видите, мне пришлось прокси-сервер, используя URL-адрес моего сегмента S3.https://s3-eu-west-1.amazonaws.com

Затем я создал дистрибутив CloudFront, источником которого является контейнер S3 mybucket с CNAME mybucket.mywebsite.com.

Затем я попытался изменить конфигурацию следующим образом:

error_page 400 404 @error;
error_page 502 503 @maintenance;

location @maintenance {
      rewrite ^(.*)$ /error_pages/under_construction.html break;
                    proxy_pass https://mybucket.mywebsite.com;
}

location @error {
      rewrite ^(.*)$ /error_pages/under_construction.html break;
                    proxy_pass https://mybucket.mywebsite.com;
}

но это не работает, и я не понимаю, почему.

Есть предложения по этому поводу?Это реально сделать?

Спасибо, Симона

1 Ответ

0 голосов
/ 09 октября 2018

Наконец-то я нашел решение.

Я добавил proxy_ssl_server_name on; в контексте сервера (так как он включен глобально, поскольку я использую его в нескольких частях моей конфигурации), чтобы разрешить передачу имени сервера черезРасширение индикации имени сервера TLS (SNI, RFC 6066) при установлении соединения с прокси-сервером HTTPS.Это необходимо, потому что целью прокси является дистрибутив CloudFront с перенаправлением http на https и SSL.

К сожалению, эта опция была введена с nginx 1.7.0, поэтому мне также пришлось обновить мою версию nginx до последней (1.14 вв моем случае), добавив nginx ppa.

Однажды установив эту конфигурацию, вы сможете без проблем использовать этот синтаксис.

error_page 400 404 @error;
error_page 502 503 @maintenance;

location @maintenance {
      rewrite ^(.*)$ /error_pages/under_construction.html break;
                    proxy_pass https://mybucket.mywebsite.com;
}

location @error {
      rewrite ^(.*)$ /error_pages/under_construction.html break;
                    proxy_pass https://mybucket.mywebsite.com;
}

Надеюсь, что он может помочь другим.

Simone

...