2015-11-04 116 views
1

我正在使用cloudfront設置cdn。我的雲端分佈的起源是我的aws負載平衡器(ELB)。當我向雲端請求而不是獲取雲端地址(cdn.mysite.com/images/image.jpg)時,它將被重定向到https://www.alio.com/images/image.jpg。我想通過我的nginx.conf爲什麼會這樣做:Cloudfront Nginx重寫導致問題

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:// $ host $ request_uri?常駐;更改網址(當我刪除重寫我得到的CDN網址)。我有這個重寫,以確保對我的網站的所有請求都是https。如果有辦法做,而不是重寫301重定向,或者如果我檢測到它是雲前臺撥打ELB的電話,那麼不要重寫?

回答

3

您是否將CloudFront配置爲白名單主機頭?

對於每個行爲>轉發標題>選擇'白名單'>從列表中選擇'主機'並點擊添加。

此設置可確保主機頭(cdn.mysite.com)包含在返回原點的請求中(因此請確保已將cdn.mysite.com添加到您的server_name指令中)。

如果您只希望通過TLS訪問您的站點,那麼使用HTTP Strict Transport Security標頭也可能值得考慮。添加以下內容到您的配置應該這樣做:

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 ... ; 
    .... 
} 

不應該使問題更加複雜:-)