![当使用 Nginx 作为 SSL 代理时,如何避免使用 try_files 指令出现混合内容问题?](https://linux22.com/image/660335/%E5%BD%93%E4%BD%BF%E7%94%A8%20Nginx%20%E4%BD%9C%E4%B8%BA%20SSL%20%E4%BB%A3%E7%90%86%E6%97%B6%EF%BC%8C%E5%A6%82%E4%BD%95%E9%81%BF%E5%85%8D%E4%BD%BF%E7%94%A8%20try_files%20%E6%8C%87%E4%BB%A4%E5%87%BA%E7%8E%B0%E6%B7%B7%E5%90%88%E5%86%85%E5%AE%B9%E9%97%AE%E9%A2%98%EF%BC%9F.png)
我正在使用 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