nginx设置重定向跳转后ip:[端口]/abc变成ip/abc而报错404

news2024/9/30 21:34:04

nginx设置重定向跳转后  ip:[端口]/abc  变成  ip/abc  而报错404

nginx配置:

    server {
        listen    80;
        server_name  _;
        client_max_body_size 300m;
        absolute_redirect off;


        location / {
            root     html;
            index  index.html index.htm;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header Host $host;
        }

    ## abc目录
        location /abc/ {
        if (-d $request_filename) {
           rewrite [^/]$ $scheme://$http_host$uri/ permanent;
        }
            proxy_pass http://localhost:8088/; 
            ##由于规定了流量出口必须是80,所以得在80的server上代理出8088端口的abc项目
            proxy_set_header Host $host:$server_port;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header REMOTE-HOST $remote_addr;
            proxy_http_version 1.1;
        proxy_read_timeout   3600s;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
            add_header X-Cache $upstream_cache_status;
        add_header Cache-Control no-cache;

        }

 

server {
        listen       8088;
        server_name  _;
        add_header Access-Control-Allow-Origin *;
        add_header Access-Control-Allow-Headers X-Requested-With;
        add_header Access-Control-Allow-Methods GET,POST,OPTIONS;
        charset utf-8;
        location / {
            root /opt/abc/;
            index  index.html index.htm;
            autoindex_exact_size off;
            autoindex_localtime on;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header Host $host:$server_port;

        }
        }

本地测试项目是否能正常访问:

http://192.168.1.22:8088 正常访问

http://192.168.1.22/abc 正常访问

当我需要将192.168.1.22:8088映射到外网ip:[port] 进行外网访问时报错。

假设外网ip=122.23.43.21

路由分配:122.23.43.21:5566  指向内网  --> 192.168.1.22:8088

也就是说,当我访问 122.23.43.21:5566/abc 时 可访问http://192.168.1.22:8088 项目

但是当我使用外网地址访问项目时:

http://122.23.43.21:5566/abc/    项目正常访问

http://122.23.43.21:5566/abc 项目由 

http://122.23.43.21:5566/abc   重定向为 http://122.23.43.21/abc/   而导致报错404

也就是说在nginx.conf里,nginx把所有的ip:[port]都会自动跳转成ip:80 也就是默认重定向后是80端口,而外网ip的80端口是没有作映射的,所以404

此时我们需要知道,重定向错误,必定出在nginx上。所以需要从server里下手

在反向代理中添加 absolute_redirect off; 

 server {
        listen       8088;
        server_name  _;
        add_header Access-Control-Allow-Origin *;
        add_header Access-Control-Allow-Headers X-Requested-With;
        add_header Access-Control-Allow-Methods GET,POST,OPTIONS;
        charset utf-8;
        location / {
            root /home/web/zhuhai-forest-resources-management/;
        index  index.html index.htm;
            autoindex off; ##防止ip:[port]/test 重定向请求后变成 ip/test而导致404
            autoindex_exact_size off;
            autoindex_localtime on;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header Host $host:$server_port;

        }
        }

即可成功访问

参考如下文章:

nginx重定向导致端口消失无法正常访问

场景

访问路径带端口http://ip:端口/login,回车后端口消失http://ip/login无法正常访问

解决方法

nginx配置中中加一句:

新版本nginx(≥1.11.8)

absolute_redirect off;

旧版本nginx(<1.11.8)

port_in_redirect off;

番外:

1. 关于nginx自动跳转

站点目录结构:

根目录:/var/wwwroot/test/

当访问地址为 http://www.test.com/abc 时,因为nginx未找到abc这个文件,而是找到了abc目录,自动在地址后面加上了斜杠,所以自动发生 301 跳转到 http://www.test.com/abc/

2. nginx自动跳转相关的3个配置

Nginx中存在一三个跳转的相关配置:

1. absolute_redirect

Syntax:	absolute_redirect on | off;Default:	absolute_redirect on;Context:	http, server, locationThis directive appeared in version 1.11.8.If disabled, redirects issued by nginx will be relative.See also server_name_in_redirect and port_in_redirect directives.

默认为开启。

2. server_name_in_redirect

Syntax:	server_name_in_redirect on | off;Default:	server_name_in_redirect off;Context:	http, server, locationEnables or disables the useof the primary server name, specified by the server_name directive, in absolute redirects issued by nginx. When the useof the primary server name is disabled, the name from the “Host” request header field is used. If this field isnotpresent, the IP addressof the server is used.The use of a port in redirects is controlled by the port_in_redirect directive.

默认关闭

3. port_in_redirect

Syntax:	port_in_redirect on | off;Default:	port_in_redirect on;Context:	http, server, locationEnables or disables specifying the port in absolute redirects issued by nginx.The use of the primary server name in redirects is controlled by the server_name_in_redirect directive.

默认开启。

3. 举例

访问地址为:http://192.168.1.232/abc

Nginx情况一:

server {    listen 80;    server_name test.com;    absolute_redirect off; // 关闭了它,不管 server_name_in_redirect, port_in_redirect 怎么设置都没有用    server_name_in_redirect on;    port_in_redirect on;}

发生 301 跳转,跳转后的地址为:http://192.168.1.232/abc/

官方说是使用 请求头中的 Host 字段,作为url跳转后host部分

Nginx情况二:

server {    listen 80;    server_name test.com;    absolute_redirect on; // 默认为on, Nginx配置中没有这个字段其实值是on, server_name_in_redirect, port_in_redirect 会根据配置起作用    server_name_in_redirect on; // 发生跳转时使用 server 中配置的域名    port_in_redirect on; // 发生跳转时使用 server 中配置的端口}

发生 301 跳转,跳转后的地址为:http://test.com/abc/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/348585.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【nodejs-04】黑马nodejs学习笔记04-MySQL简介及安装

文章目录1.数据库的基本概念1.1什么是数据库1.2 常见的数据库及分类1.3 传统型数据库的数据组织结构2.安装并配置MySQL2.1 了解需要安装哪些MySQL相关的软件2.2 MySQL 在 Mac 环境下的安装2.3 MySQL 在 Windows 环境下的安装1.数据库的基本概念 1.1什么是数据库 数据库&#x…

JavaWeb学习

文章目录Tomcat 详解1 Tomcat 安装2 默认端口号3 面试题4 编写与发布一个网站Http 详解1 http 请求2 http 响应3 面试题Tomcat 详解 1 Tomcat 安装 进入Tomcat官网下载压缩包:https://tomcat.apache.org/ 将压缩包解压即可直接使用 启动Tomcat:bin目录下startup.b…

【软件测试】如何在测试团队中工作游刃有余?你的测试技巧......

目录:导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜)前言 在测试团队中&#…

基于数据库实现分布式锁

分布式锁概述 前言 我们的系统都是分布式部署的,日常开发中,秒杀下单、抢购商品等等业务场景,为了防⽌库存超卖,都需要用到分布式锁。 分布式锁其实就是,控制分布式系统不同进程共同访问共享资源的一种锁的实现。如…

xshell6运行报错:由于找不到mfc110u.dll、MSVCR110.dll无法继续执行代码

今天给大家分享一下我刚装完系统遇到得问题,由于新盟的罗建雨【胡巴】老师帮我给电脑加了固态,又重装了系统,因此电脑里面得所有软件需要重装,在我重装的过程中遇到了一个小问题给大家分享一下,如果大家以后遇到也方便解决。 问题: 安装Xshell时电脑系统报错:“由于找…

一、微服务架构介绍

目录 一、微服务架构介绍 二、出现和发展 三、传统开发模式和微服务的区别 四、微服务的具体特征 五、SOA和微服务的区别 1、SOA喜欢重用,微服务喜欢重写 2、SOA喜欢水平服务,微服务喜欢垂直服务 3、SOA喜欢自上而下,微服务喜欢自下…

为什么项目的时间跟踪管理很重要 ?

项目通常被分解为需要完成的任务,以实现项目目标。时间跟踪可以帮助你了解每项任务需要多长时间,从而使你更准确地估计未来的项目。 除此以外,跟踪项目时间还有以下令人难以置信的好处: 1、提高生产力 通过记录在每项任务上花…

项目经理为什么要做时间管理?

对于时间的管理,有人做不到,有人不知道,对每一个成功的人来说,时间管理是很重要的一环。 对于项目经理而言,由于项目经理每天要在项目上花费大量的时间,所以个人时间比较少,因此项目经理就需要安…

小半年被裁掉30多人,大厂“开猿节流”太狠了

今年9月,我前同事的小公司辞退了30多个程序员,当然包括做测试的他。 近3月过去了,大部分人都找不到合适工作。大家聊起时都在感慨这两年好多行业都不景气。 这次暂停了大部分业务,团队里最终只留下4个比较厉害的程序员合并到另外…

内网渗透(二十九)之Windows协议认证和密码抓取-Windows-2012R2之后抓取密码的方式和抓取密码的防范措施

系列文章第一章节之基础知识篇 内网渗透(一)之基础知识-内网渗透介绍和概述 内网渗透(二)之基础知识-工作组介绍 内网渗透(三)之基础知识-域环境的介绍和优点 内网渗透(四)之基础知识-搭建域环境 内网渗透(五)之基础知识-Active Directory活动目录介绍和使用 内网渗透(六)之基…

Jdk19 动态编译 Java源码为 Class 文件

动态编译 Java 源码为 Class一.背景1.Jdk 版本2.需求二.Java 源码动态编译实现1.Maven 依赖2.源码包装类3.Java 文件对象封装类4.文件管理器封装类5.类加载器6.类编译器三.动态编译测试1.普通测试类2.接口实现类3.测试四.用动态编译 Class 替换 SpringBoot 的 Bean(…

Hexo博客搭建部署GitHub

Hexo博客 Hexo是一个简洁的静态博客页面,使用markdown渲染文件,在本地生产静态文件后可以部署到GitHub上,这样不需要占用自己的域名和服务器,其实我在很早之前就换用了hexo,原来的博客在csdn,oceansec.blo…

康耐视智能相机Insight-选择型号方式

一:了解仿真中每种型号。 1.首先需要知道每种仿真代表的是多少万像素的相机,然后根据具体的分辨率去选择相应的型号,具体型号如下。 IS2000 30万相机 分辨率:640480 IS5000 30万相机 分辨率:640480 IS5001 130万相机 分…

[数据结构] 深入理解什么是跳表及其模拟实现

跳表定义优化实现基本框架定义跳表结点实现基础结构构造函数实现基本操作查找操作插入数据删除某结点打印跳表跳表与平衡搜索树和哈希表的对比定义 每相邻两个节点升高一层,增加一个指针,让指针指向下下个节点;上面每一层链表的节点个数&…

Xshell 7 连接云服务器的步骤和出现的错误

一、工具准备云服务器Xshell 7二、使用 Xshell 7 连接数据库三、新建会话属性后,没有自动弹出 SSH 用户名要求输入四、SSH 用户身份验证不能输入 Password五、Xshell 连接 centos 7 服务器 报错提示 “ssh服务拒绝了密码,请再试一次“,但是密…

信息安全工程

信息安全工程信息安全工程信息安全工程概述信息安全工程理论基础支撑信息安全工程的理论基础质量管理基本概念信息安全工程原理ISSE活动中支持认证和认可的活动信息安全工程监理模型信息安全工程能力评估SSE-CMM(系统安全工程能力成熟度模型)SSE-CMM 的安…

已解决SyntaxError: EOL while scanning string literal

已解决SyntaxError: EOL while scanning string literal 文章目录报错问题报错翻译报错原因解决方法联系博主免费帮忙解决报错报错问题 粉丝群里面的一个小伙伴遇到问题跑来私信我,想用eval函数转换字符串类型的字典,但是发生了报错(当时他心…

全网最牛最全面的自动化平台从0到1地一步步搭建

来到新的公司有半年多了,由于业务和人员的极速扩张,整个局面处于百废待兴阶段,有太多方方面面的事情要做,前五个月基本上都是在给各式各样的需求进行支援,最近的两个月多月才比较固定做技术域的事情。所在组主要是做一…

前端学习第一阶段:第六章 HTML和CSS3

6-1 HTML5 01-HTML5CSS3提高导读 02-HTML5提高-新增语义化标签 03-HTML5-新增视频标签 04-HTML5新增音频标签 05-HTML5新增input表单 06-HTML5新增表单属性 6-2 CSS3 07-CSS3新增属性选择器(上) 08-CSS3新增属性选择器(下) 09-CSS…

C语言(指针,数组和函数)

目录 一.指针和数组 1.指向数组 2.数组下标和指针解引用的相等性 3.*和优先级问题 二..函数,数组和指针 1.声明数组形参 2.使用const保护地址数据 3.指针和多维数组 4.指向多维数组的指针 5.函数和多维数组 一.指针和数组 在前面的章节里面我们已经说过了…