我正在使用 Nginx 充当 docker 容器内的 SSL 代理,监听端口 443。该代理正常工作,并正确地将流量路由到端口 80 上上游的另一个 Nginx 实例(位于另一个容器内)。
我遇到了混合内容问题,我不确定正确的解决方法是什么:
针对文件夹的请求(但没有尾随斜杠)如:https://example.com/mediafiles/bar
被正确路由到第二个 NginX 实例。
但是它得到了一个 301 到 http url(响应头):
$ curl -IL https://example.com/mediafiles/bar
HTTP/1.1 301 Moved Permanently
Server: nginx
Date: Mon, 15 Jun 2015 15:16:29 GMT
Content-Type: text/html
Content-Length: 178
Connection: keep-alive
Location: http://example.com/mediafiles/bar/
X-UA-Compatible: IE=Edge,chrome=1
HTTP/1.1 301 Moved Permanently
Server: nginx
Date: Mon, 15 Jun 2015 15:16:29 GMT
Content-Type: text/html
Content-Length: 178
Connection: keep-alive
Location: https://example.com/mediafiles/bar/
HTTP/1.1 200 OK
Server: nginx
Date: Mon, 15 Jun 2015 15:16:29 GMT
Content-Type: text/html; charset=utf-8
Content-Length: 1786
Connection: keep-alive
Vary: Accept-Encoding
Last-Modified: Wed, 18 Mar 2015 23:09:35 GMT
Vary: Accept-Encoding
ETag: "550a05af-6fa"
Accept-Ranges: bytes
X-UA-Compatible: IE=Edge,chrome=1
可能是由这个常见的 try_files 配置引起的(编辑:显然它没有发出重定向)。
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ /index.php?$args;
}
我在这里发布了完整的上游配置:https://gist.github.com/mgcrea/f149d0481ad1fa1c2207
相关代理配置如下:https://gist.github.com/mgcrea/26ef92026a20ccc22226
此 301 到 http 资源触发混合内容错误:
混合内容:位于 'https://example.com“已通过 HTTPS 加载,但请求了不安全的资源”http://example.com/mediafiles/bar/'。此请求已被阻止;内容必须通过 HTTPS 提供。
有任何想法吗?
似乎是相关的:https://stackoverflow.com/questions/15555428/nginx-causes-301-redirect-if-theres-no-trailing-slash