1

Я настраиваю cdn с использованием облачного интерфейса. Моим происхождением для моего облачного распределения является мой балансировщик нагрузки aws (ELB). Когда я делаю запрос в облачный режим вместо получения URL-адреса облачного (cdn.mysite.com/images/image.jpg), он перенаправляется на https://www.alio.com/images/image.jpg. Я понял, почему он делает это из-за моей nginx.conf:Cloudfront Nginx Rewrite Causeing

server { 
    root /var/www/html/alio/public; 
    index index.php; 

    server_tokens off; 

    server_name www.alio.com; 

    location/{ 
     if ($http_x_forwarded_proto != 'https') { 
      rewrite^https://$host$request_uri? permanent; 
     } 
     try_files $uri $uri/ /index.php?$query_string; 
    } 
    location ~ \.php$ { 
     try_files $uri /index.php =404; 
     fastcgi_split_path_info ^(.+\.php)(/.+)$; 
     fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock; 
     fastcgi_index index.php; 
     fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
     include fastcgi_params; 
    } 
} 

переписывания^https: // $ хост $ REQUEST_URI? постоянный; изменяет url (когда я удаляю переписывание, я получаю URL-адрес cdn). У меня есть это переписывание, чтобы гарантировать, что все запросы на мой сайт будут https. Если есть способ сделать, а не переписывать 301 переадресацию или не переписывать, если я обнаруживаю, что это облачный режим, делающий вызов ELB?

ответ

3

Вы настроили CloudFront для белых заголовков хостов?

Для каждого поведения> Передовые заголовки> Выберите «Белый список»> Выберите «Хост» из списка и нажмите «Добавить».

Этот параметр гарантирует, что заголовок хоста (cdn.mysite.com) включен в запросы обратно в начало координат (поэтому убедитесь, что вы добавили cdn.mysite.com в свою директиву server_name).

Возможно, стоит также рассмотреть использование заголовка HTTP Strict Transport Security, если вы хотите, чтобы ваш сайт обращался только через TLS. Добавление следующего в вашу конфигурацию должно сделать это:

add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; 
+0

спасибо, это работает – gprime

0

Я вижу эти типы конструкций много. Это Апачизис, что вы должны учиться по-другому.

Http и https являются протоколами и как таковые должны обрабатываться на уровне, на котором обрабатывается протокол, а не на месте расположения документа, если только они не являются специфическими для местоположения, что в вашем случае они не являются.

Это также позволяет держать вещи в чистоте и непреднамеренно конфигурировать что-то на уровне http, который обходит логику https всегда.

Так всегда Https проста:

server { 
    listen 80; 
    return 301 https://$host$request_uri; 
} 

server { 
    listen 443 ... ; 
    .... 
} 

не должны сделать его более сложным :-)