nginx - 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 的节点应用程序,所以我知道这很好用。
任何指针将不胜感激。
解决方案
感谢上述评论中的 Richard Smith。答案是(引用):
“你有if ($ssl_protocol = "")
一个只监听 80 端口的服务器块,所以条件总是为真。
而不是 if 块,尝试:location / { return 301 https://$host$request_uri; }
“
一旦解决了浏览器缓存问题(即:关闭),它就可以完美运行。
推荐阅读
- javascript - 应用程序状态,以及未使用 redux 映射到 props 的操作
- python - 有没有办法在 wxpython(或 wxpython.richtext)中仅在一个方向上缩放字体
- mysql - Laravel 默认用户迁移
- python-3.x - 二维数组的sklearn线性回归
- python - 从 pandas 数据框中获取随机样本,但每个值只有一个
- android - 即使应用程序“中断”,SetRepeating() 方法 Android [Xamarin.Forms] 中的动态间隔
- javascript - 将数组设置为 null 然后在 useEffect React 中更新它
- python - 使用 virtualenv 时如何指定我的机器上未安装的 python 版本?
- sass - 如何使用未定义数量的参数来匹配映射中的键并将它们添加为属性?
- android - 使用我的计时器在 ViewModel 中获取数据(在 kotlin 中)