首页 > 解决方案 > NGINX:将特定的 http URL 重定向到内部端口,其他所有内容都被提升到 https / 443

问题描述

可悲的是nginx -从未回答过禁用特定 URL 的 HTTPS 重定向,但由于该问题已有一年多的历史,我将尝试改写一下我的问题。

有一个 nginx 服务器,可以很好地提升传入端口 443 的所有内容。最近收到一个请求,要求将特定的 http(非 443)url/路径 proxy_passed 传递到内部服务器端口,该端口上有一些 C 代码在该端口上侦听。

我目前的想法是:

   server {
     listen  80;

     location /controller {
       proxy_pass       http://127.0.0.1:8068;
     }
 
     if ($ssl_protocol = "") {
       rewrite ^ https://$host$request_uri? permanent;    # Redirect all non-SSL traffic to SSL.
     }
   }

   server {
     listen  443;
     ...etc
   

但正如您可以想象的那样,这仅在我注释掉 if() 块时才有效。nginx 是否有可靠的 if-else 块或类似的东西来完成我需要的东西?(我听说在 nginx 配置中的 if 解析支持是...... iffy)

我在 https 服务器块下有位置重定向,例如 /api,被 proxy_passed 到侦听端口 3000 的节点应用程序,所以我知道这很好用。

任何指针将不胜感激。

标签: nginxredirecthttps

解决方案


感谢上述评论中的 Richard Smith。答案是(引用):

“你有if ($ssl_protocol = "")一个只监听 80 端口的服务器块,所以条件总是为真。

而不是 if 块,尝试:location / { return 301 https://$host$request_uri; }

一旦解决了浏览器缓存问题(即:关闭),它就可以完美运行。


推荐阅读