如何设置Nginx在单个站点上使用ssl / non-ssl作为不同的URL,但如果用户在浏览器的地址栏中inputhttps,则始终使用ssl?

我现在的nginx.conf看起来像这样:

 server { listen 80; server_name www.example.com; root /var/www/; location / { } location /users { rewrite ^ https://$http_host$request_uri? permanent; } } server { listen 443 ssl; server_name www.example.com; root /var/www/; location /users { } location / { rewrite ^ http://$http_host$request_uri? permanent; } } 

通过这种configuration,当用户在网站上浏览页面时,连接从/切换到ssl / non-ssl,对于urls以/users开始,对于所有其他urls,non-ssl为ssl。 因此,即使用户在浏览器的地址栏中明确键入了https://www.example.com/ ,结果页面也会redirect到http://www.example.com/

有没有一种方法来实现上述设置实现的ssl / non-ssl之间的自动url重写,但仍然尊重明确的ssl请求,如果https://是用户在浏览器的地址栏中显式键入?

从服务器的angular度来看,无法通过跟踪链接,抓取网站或在地址栏中input完整地址来提出请求。

当您input地址时,Web浏览器会向您的Web服务器发送HTTP请求。 如果您键入https,它将尝试连接到端口443(默认情况下),并且如果用户键入请求或请求或例如bot抓取它,则请求标头不包含信息。

你所能做的就是为某些用户代理保留SSL,并为其他用户代理redirect。