nginx反向代理如何支持网址自动添加斜线

 更新时间:2024年05月14日 15:28:20   作者:爱忽悠的唐唐  
这篇文章主要介绍了nginx反向代理如何支持网址自动添加斜线问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

脚本之家 / 编程助手:解决程序员“几乎”所有问题!
脚本之家官方知识库 → 点击立即使用

一、背景

我们在访问nginx代理下的项目前端页面时

当请求URL后面没有 / 

nginx目录中如果没有对应的文件

就会自动进行 301 并加上 / 

二、问题

通过lua+nginx进行proxy_pass+upstream负载后,带二级目录的页面访问路径出错,无法解析。

例如访问 https://xxx.com.cn/admin (未带/ ) 时会跳转至 http://safes-normal:8092/admin/ ,301后的地址出错。

原有配置如下:

三、解决方案

第一步:解决重定向域名问题

在location处添加

1
2
proxy_set_header Host h o s t : host: host:proxy_port;
proxy_set_header X-Forwarded-For $remote_addr;

例如

原因:

当URL 指向一个目录并且在最后没有包含“/”时,Nginx 内部会自动的做一个 301 重定向,由于我们的nginx中的server_name_in_redirect 值为 off ,故URL 重定向为: 原 URL 中的域名 + 目录名 + /。

而我们没设置proxy_set_header Host 时,浏览器直接访问 nginx,获取到的 Host 是 proxy_pass 后面的值,即 safes-normal。

故浏览器跳转成了 http://safes-normal:8092/admin/。

当我们设置了proxy_set_header Host h o s t : host: host:proxy_port后,再访问 https://xxx.com.cn/admin ,此时会发现浏览器会301至https://xxx.com.cn:8092/admin/,这样也会导致访问失败,因为我们希望得到的结果是:

https://xxx.com.cn/admin 重定向为 https://xxx.com.cn/admin/

第二步:解决重定向后的端口问题

查阅资料发现nginx中有 port_in_redirect 配置

如果port_in_redirect为off 时,那么始终按照默认的端口;如果该指令打开,那么将会返回当前正在监听的端口。

由于port_in_redirect默认为on,所以导致我们重定向的时候,带了server中的端口8092,如果希望nginx在301重定向时不带端口,设置port_in_redirect为off 即可

修改配置:

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

蓄力AI

微信公众号搜索 “ 脚本之家 ” ,选择关注

程序猿的那些事、送书等活动等着你

原文链接:https://blog.csdn.net/weixin_37221852/article/details/125317701

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权/违法违规/事实不符,请将相关资料发送至 reterry123@163.com 进行投诉反馈,一经查实,立即处理!

相关文章

  • 关于nginx 反向代理 URL替换方案

    关于nginx 反向代理 URL替换方案

    这篇文章主要介绍了nginx 反向代理 URL替换方案,本文给大家代理两种方法一种是直接替换location匹配部分,第二种是使用nginx 的rewrite 模块,本文给大家介绍的非常详细,需要的朋友可以参考下
    2022-03-03
  • CentOS 7下编译安装Nginx 1.11.10教程

    CentOS 7下编译安装Nginx 1.11.10教程

    这篇文章主要介绍了在CentOS 7下编译安装Nginx 1.11.10的方法,文中给出了详细的安装步骤,相信对大家具有一定的参考价值,需要的朋友们下面来一起看看吧。
    2017-03-03
  • Nginx 禁止直接访问目录或文件的操作方法

    Nginx 禁止直接访问目录或文件的操作方法

    Nginx 默认是不允许列出整个目录的,那么需要这样的功能怎么操作呢,下面小编给大家介绍下Nginx 禁止直接访问目录或文件的方法,需要的朋友可以参考下
    2022-10-10
  • nginx配置ssl实现https访问(小白文)

    nginx配置ssl实现https访问(小白文)

    安全起见,需要将之前的http接口访问变成https访问,所以需要配置SSL证书,本文主要介绍了nginx配置ssl实现https访问,具有一定的参考价值,感兴趣的可以了解一下
    2023-09-09
  • 详解用Nginx搭建CDN服务器方法(图文)

    详解用Nginx搭建CDN服务器方法(图文)

    这篇文章主要介绍了详解用Nginx搭建CDN服务器方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-06-06
  • Nginx限制某个IP同一时间段的访问次数和请求数示例代码

    Nginx限制某个IP同一时间段的访问次数和请求数示例代码

    nginx可以通过ngx_http_limit_conn_module和ngx_http_limit_req_module配置来限制ip在同一时间段的访问次数.具体示例代码大家参考下本文
    2017-08-08
  • Nginx自定义访问日志的配置方式

    Nginx自定义访问日志的配置方式

    Nginx日志主要分为两种:访问日志和错误日志。访问日志主要记录客户端访问Nginx的每一个请求,格式可以自定义。下面这篇文章主要给大家介绍了Nginx自定义访问日志的配置方式,需要的朋友可以参考学习,下面来一起看看吧。
    2017-05-05
  • Nginx实现前后端分离

    Nginx实现前后端分离

    本篇文章是小编整理的关于Nginx实现前后端分离的详细代码,如果你对此有需要,可以参考测试下。
    2018-02-02
  • 通过Nginx定义Header头信息的实现步骤

    通过Nginx定义Header头信息的实现步骤

    本文主要介绍了通过Nginx定义Header头信息的实现步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-04-04
  • 使用Nginx让网站快速置灰的方法

    使用Nginx让网站快速置灰的方法

    这篇文章主要介绍了使用Nginx让网站快速置灰的方法,首先是查看当前编译的版本是否支持http_sub_module模块,如果不支持需要重新编译增加此模块,具体配置方法参考下本文
    2023-11-11

最新评论