Маршрут nginx к облачному фронту (к S3)

Я пытаюсь серверировать статический сайт через Cloudfront (и S3). У меня включена корзина S3 my-bucket со статическим хостингом веб-сайтов. NGINX маршрутизирует трафик на основе пути. местоположение /, /beta/, /static/app/ переходит в облако, поэтому я создал Исходное доменное имя и путь и Идентификатор происхождения для

my-bucket.s3.amazonaws.com/beta = S3-my-bucket/beta
my-bucket.s3.amazonaws.com/admin = S3-my-bucket/admin
my-bucket.s3.amazonaws.com = S3-my-bucket

И сопоставил поведение с
/бета -> S3-мое-ведро/бета
/admin -> S3-мое ведро/admin
По умолчанию (*) -> S3-мое-ведро

У меня следующая конфигурация Nginx

server {
    listen         80 default_server;
    server_name    localhost;
    keepalive_timeout 70;
    gzip on;
    gzip_disable "msie6";
    gzip_vary on;
    gzip_proxied any;
    gzip_comp_level 6;
    gzip_buffers 16 8k;
    gzip_http_version 1.1;
    gzip_types text/plain text/css application/json application/x-javascript application/javascript text/xml application/xml application/xml+rss text/javascript;

    location / {
         proxy_pass http://XXXXXX.cloudfront.net;
         proxy_set_header Host $host;
    }

    location /beta/ {
        proxy_pass http://XXXXXX.cloudfront.net/beta/;
    }

    location /static/app/ {
        rewrite ^/static/app/(.*)$ /$1 break;
        proxy_pass http://XXXXXX.cloudfront.net;
    }
}

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

403 ERROR
The request could not be satisfied.
Bad request. 
Generated by cloudfront (CloudFront)
Request ID: 3yYfFbg1ObQ4B-3oco1HYWK46CWh7E8XZOBVl_sdQ6rKMZ4JYZ_KeQ==

Но если я укажу конфигурацию Nginx на URL-адрес моей корзины proxy_pass http://my-bucket.s3-website-us-west-2.amazonaws.com вот так

server {
    listen         80 default_server;
    server_name    localhost;
    keepalive_timeout 70;
    gzip on;
    gzip_disable "msie6";
    gzip_vary on;
    gzip_proxied any;
    gzip_comp_level 6;
    gzip_buffers 16 8k;
    gzip_http_version 1.1;
    gzip_types text/plain text/css application/json application/x-javascript application/javascript text/xml application/xml application/xml+rss text/javascript;

    location / {
         proxy_pass http://my-bucket.s3-website-us-west-2.amazonaws.com/;
    }

    location /beta/ {
        proxy_pass http://my-bucket.s3-website-us-west-2.amazonaws.com/beta/;
    }

    location /static/app/ {
        rewrite ^/static/app/(.*)$ /$1 break;
        proxy_pass http://my-bucket.s3-website-us-west-2.amazonaws.com;
    }
}

все работает как положено.

Что мне нужно изменить, чтобы он работал через облачный фронт?

Удаление proxy_set_header Host $host;, вероятно, исправит ошибку, поэтому, пожалуйста, подтвердите это... но есть более серьезная проблема с вашей настройкой... Nginx → CloudFront → S3 не имеет смысла для меня в этом приложении, если только вы не используете CloudFront по той причине, что ведро находится в другом регионе AWS, чем Nginx, и даже в этом случае обоснование довольно мягкое. По какой причине вы делаете это таким образом?

Michael - sqlbot 07.03.2019 03:30

CloudFront только для кеширования, никаких других причин. Без изменения основного URL-адреса proxy_set_header Host $host; на URL-адрес облачного интерфейса.

roy 07.03.2019 15:44

У вас есть proxy_pass http://, но CloudFront настроен на перенаправление HTTP на HTTPS. Измените на proxy_pass https://... или настройте CloudFront с политикой протокола просмотра: HTTP и HTTPS в каждом поведении кэша.

Michael - sqlbot 07.03.2019 17:39

CloudFront не выполняет никакого значимого кэширования для вас в этой настройке. С DNS → Nginx → CloudFront → S3 каждый запрос по-прежнему обслуживается через ваш сервер Nginx, и CloudFront не кэширует контент рядом с браузеры — он кэширует только контент рядом с сервером Nginx, который в любом случае предположительно находится рядом с корзиной, поэтому ничего не получается. . Настройка, которую вы, вероятно, хотите, это DNS → CloudFront → { Nginx или S3 }, где поведение кэша CloudFront сопоставляет пути для корзин и для сервера Nginx и выбирает цель. Таким образом, CloudFront может кэшировать рядом со средством просмотра, которое всегда связывается с ним первый.

Michael - sqlbot 07.03.2019 17:47
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
1
4
3 947
0

Другие вопросы по теме