我有一个web应用程序运行在Nginx反向代理后面的centos ec2实例上,带有SSL认证(让我们加密)。
我在URL处有一个javascript文件,例如https://example.com/static/src/js/allEnd.js
我使用CloudFront传递静态文件,并将源服务器作为HTTP ec2实例(不使用s3存储桶)。
我的源站映射到域名https://example.com,到目前为止我做了以下配置:
到目前为止,我所理解的是,第一次CloudFront将通过从我的ec2服务器获取文件来提供静态内容,然后下一次它将从CloudFront提供服务,但每次CloudFront重定向到原始服务器以获取静态文件,而在我的情况下CloudFront不提供该文件。
这是源站和CloudFront服务器的标头。
1. Origin server (https://example.com)
get https://example.com/static/src/js/allEnd.js
HTTP/2 200
server: nginx/1.12.2
date: Sun, 12 May 2019 12:27:50 GMT
content-type: application/javascript
content-length: 168435
etag: "wzsdm-1557567525-168435-283837276"
cache-control: max-age=604800, public
expires: Sun, 19 May 2019 12:27:50 GMT
strict-transport-security: max-age=15768000; includeSubdomains; preload
x-frame-options: SAMEORIGIN
x-content-type-options: nosniff
strict-transport-security: max-age=15768000
2. CloudFront with origin as https://example.com (https://cdn.example.com)
get https://cdn.example.com/static/src/js/allEnd.js
HTTP/2 301
content-type: text/html
content-length: 185
location: https://example.com/static/src/js/allEnd.js
server: nginx/1.12.2
date: Sun, 12 May 2019 09:17:40 GMT
strict-transport-security: max-age=15768000; includeSubdomains; preload
x-frame-options: SAMEORIGIN
x-content-type-options: nosniff
strict-transport-security: max-age=15768000
age: 17
x-cache: Hit from cloudfront
via: 1.1 76d9b50884e58e2463b175e34e790838.cloudfront.net (CloudFront)
x-amz-cf-id: HBbfJXbFgKQz4eYlQSpLPQAk8pxZRKuGsb6YjFu8-AJL0JwPfs8FZw==如您所见,cdn.example.com (CloudFront)重定向到源(example.com)的响应头。此外,我还混淆了应该是content-type: application/javascript的content-type:text/html
我可能配置错误的可能性有哪些?
如果你想知道更多,请随时询问。谢谢。
附言:我刚接触Nginx和AWS的配置,最重要的是缓存控制。
发布于 2019-05-13 02:30:15
您需要检查源站配置和日志文件,以了解发生这种情况的原因。
查看源站日志,原来产生301重定向响应的是源站,不是CloudFront。
请注意,来自CloudFront的响应头包括server: nginx/1.12.2。CloudFront没有添加这个。
Content-Type是按原样设置的,因为您的源服务器还返回了类似于"object has moved“或"you are redirected”之类的HTML。现代浏览器通常不会显示该消息,它们只是遵循重定向。
在任何情况下,如果源服务器返回重定向,CloudFront都不会跟随源服务器返回的重定向--它只是将重定向返回给浏览器。
对于您看到的行为,一种可能的解释是您将CloudFront中的源协议策略设置为“仅HTTPS”而不是“仅HTTPS”或“匹配查看器”,因此源尝试将连接重定向为使用HTTPS,因为它将传入连接(来自CloudFront)视为HTTPS而不是HTTPS。
另一种可能性是,您将CloudFront的缓存行为设置配置为将Host标头列入白名单,以便转发到源。
https://stackoverflow.com/questions/56099327
复制相似问题