当使用 Nginx 作为 SSL 代理时,如何避免使用 try_files 指令出现混合内容问题?

当使用 Nginx 作为 SSL 代理时,如何避免使用 try_files 指令出现混合内容问题?

我正在使用 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

相关内容