nginx:排除子文件夹进行 SSL 加密

nginx:排除子文件夹进行 SSL 加密

我已经像这样设置了我的 nginx 服务器:

server {
   listen 443;
   ssl on;
   ssl_certificate /etc/ssl/certs/example.com.crt;
   ssl_certificate_key     /etc/ssl/private/example.com.key;
   server_name example.com;
   ... other things down here..
}

如何从 SSL 中排除目录?例如,在 /static/tour 下,我有一个解释 Web 应用程序的游览,无需对其进行加密。

操作系统:Ubuntu 10.04

答案1

我认为您要么想要设置另一个服务器配置来监听端口 80,指向同一个文档根目录(并确保应用程序根据访问的 URL 强制使用 SSL 或非 SSL,这样用户就不能直接从 HTTPS 中删除“S”),或者使用如下方法:http://ariejan.net/2011/10/22/automatically-switch-between-ssl-and-non-ssl-with-nginx-unicorn-rails

答案2

这是不可能的。SSL 请求是加密的,这意味着服务器在解密请求之前甚至无法知道 URI 是什么样子。没有办法告诉客户端它应该使用非 SSL 协议发送对某个子目录的请求。

正如 Demelziraptor 所说,您可以设置两个虚拟主机,一个在端口 443 上使用 SSL,另一个在端口 80 上不使用 SSL。

您可以轻松设置重写规则,以便/static/tourSSL 虚拟主机上的任何请求都会导致重定向到非 SSL 虚拟主机上的同一页面,反之亦然,非 SSL 虚拟主机上的同一页面会重定向回 SSL 虚拟主机。

相关内容