您现在的位置是:首页 > 正文

用nginx反向代理Jenkins遇到的testForReverseProxySetup问题

2024-02-01 01:15:44阅读 2

又一次开始了Jenkins征程,其实以前我就遇到了这个问题,如图

你说你报这个错误鬼知道是为什么,当然了,我们也不能太苛求,Jenkins怎么可能知道具体是什么问题呢?算啦,我们自己去看Jenkins的日志吧,我发现

WARNING: http://jenkins.tangxuyang.cn/manage vs. http:

然后又结合chrome的F12,如下

就是这个请求没有正确的返回让Jenkins认为反向代理有问题,我也不知道这个会不会有什么影响,但是作为一个处女座,总归是看不得这种错误的。其实此时我已经不知道怎么搞了。因为我完全不知道Jenkins的原理。我就把不能正常返回的url贴到chrome中访问一下,得到如下的错误:

跟上面Jenkins日志是一致的。不过此时我还是不了解是啥意思。知道我尝试改了url中的后面的一点东西,我发现报的错有变化,vs.后面的内容随着变了。至此我猜测,Jenkins是用传过去的值跟http://jenkins.tangxuyang.cn/manage比较,好吧其实看到vs.也能想到是比较,算我笨吧。以下是url

http://jenkins.tangxuyang.cn/administrativeMonitor/hudson.diagnosis.ReverseProxySetupMonitor/testForReverseProxySetup/http%3A%2F%2Fjenkins.tangxuyang.cn%2Fmanage/

我们可以看到最后面一部分http%3A%2F%2Fjenkins.tangxuyang.cn%2Fmanage/,其实就是http://jenkins.tangxuyang.cn/manage,这是浏览器中把冒号:和斜杠/转义了,但是Jenkins只接收到了http:,后面的统统没收到,我的天呀!

起初我觉得是Jenkins的问题,我在网上也确实搜到了有人跟我遇到一样的问题,不过他们是IIS下的。当然了,他们只是在Jenkins官网提了Bug并没有人解决。我又继续找。找不到。

后来我萌发了一个想法,我想看看Nginx究竟转发的是哪个地址,因此我写了一个简单的node程序,用来暂时替换Jenkins,就是为了打印出Nginx转发的地址

var express = require('express');
var app = new express();
app.get('*', function(req,res){
    console.log(req.url);
    res.end(req.url);
});
app.listen(8080);

让人抓狂的事情发生了,http://jenkins.tangxuyang.cn/administrativeMonitor/hudson.diagnosis.ReverseProxySetupMonitor/testForReverseProxySetup/http:/jenkins.tangxuyang.cn/manage/,这是Nginx转发后的url,仔细看发现最后一部分变成了http:/jenkins.tangxuyang.cn/manage,http://变成了http:/,少了个斜杠,这是什么鬼。果然是Nginx惹的祸。我又做了一些尝试,发现Nginx会把url中(不含querystring部分)多个斜杠合并成一个,比如http://www.baidu.com//hello//world,到nginx那边就变成了http://www.baidu.com/hello/world。在网上找了好久都没有解决方案。在要绝望的时候,我搜到了这个https://stackoverflow.com/questions/4320774/nginx-how-to-keep-double-slashes-in-urls/11918103#11918103

上面说配置一下merge_slash off就好了,这样就不会合并slash了。我做了尝试,然而并不行,就在我要放弃的时候,我在该文章底下的评论里发下了一个不起眼的回复,我天原来大神在底下,请看

我抱着试试的心态,把转发的地址后面的斜杠去掉了,然后真的就好了!!我啥也不想说了,只能说自己Nginx是二把刀!

在这里感谢方案提供者,虽然他也不一定能看懂中文,也不一定知道帮助了我。

总结下来就是把Nginx中转发的配置中最后的斜杠干掉,就这么简单。我折腾了一下午,酸爽:(

注:为了让大家能看清楚,我把没有隐去我的服务器地址,请大家放过它,不要攻击

如果有帮到你,请给我点个赞^_^

网站文章

  • 为什么在vue3中每个页面都需要引用ref,reactive的问题

    为什么在vue3中每个页面都需要引用ref,reactive的问题

    在 Vue 3 中,对响应式数据的追踪和更新机制进行了优化,使得响应式数据的更新更加高效。,而不是自动引入,是因为 Vue 3 中引入了 Tree Shaking 机制,这种机制可以对无用的代码进行剪...

    2024-02-01 01:15:37
  • 使用 kind 1 分钟启动一个本地 k8s 开发集群

    使用 kind 1 分钟启动一个本地 k8s 开发集群

    使用 kind 1 分钟启动一个本地 k8s 开发集群kind 简介Github 地址:https://github.com/kubernetes-sigs/kindkind 是一个快速启动 kube...

    2024-02-01 01:15:33
  • 【python】时间处理函数以及文件操作

    1. 时间函数模块(库)-使用流程:先导入,再引用1:导入 方式一:import 模块名 引用:模块名.函数名() 方式二:from 模块名 import 函数名/变量/类 ...

    2024-02-01 01:15:05
  • 宝塔部署来客电商时,出现“open_basedir restriction in effect”错误解决方案 出现如下错误:

    宝塔部署来客电商时,出现“open_basedir restriction in effect”错误解决方案 出现如下错误:

    宝塔部署来客电商时,出现“open_basedir restriction in effect”错误解决方案Application/LKT/webapp/_compile

    2024-02-01 01:14:59
  • 国外黑客站点收集

    著名的黑客站点 国外黑客安全 http://www.deadly.org/ 大量关于OpenBSD的资料文档教程 国外黑客安全 http://www.guninski.com/ 安全专家Guninsk...

    2024-02-01 01:14:51
  • C++ 动态开辟二维数组的的方法

    近日写到一个程序,用到了要动态开辟二维数组,一想,自己就会两种。一者:用new在堆上开辟;二者:用vector开辟。技巧没有多少,但是确实是折腾了我半天!首先,大家去网上搜一下,动态开辟二维数组的文章特别多,再加上我这篇就更多了,我本不想写这篇博文的。但看了网上各位“大虾”“大牛”写的,觉得还是有必要写一下!给各位讲清楚点,以防被网上质量残次不齐的文章误导了。 写...

    2024-02-01 01:14:44
  • jmeter结果合并_JMeter:生成多维度的HTML报告

    作者:wang.lan摘要:本篇文章主要讲解jmeter性能测试工具在生成测试报告方面一直有所欠缺,但是JMeter在3.0以后解决了这个问题.JMeter3.0以后引入了Dashboard Repo...

    2024-02-01 01:14:15
  • HystrixRPC保护的原理,HystrixCommand命令的执行方法

    HystrixRPC保护的原理,HystrixCommand命令的执行方法

    HystrixCommand命令的执行方法 前面讲到,独立使用HystrixCommand命令主要有以下两个步骤: (1)继承HystrixCommand类,将正常的业务逻辑实现在继承的run方法中,...

    2024-02-01 01:14:09
  • SpringBoot配置

    SpringBoot配置

    配置文件分类Spring boot是基于约定的,所以很多配置都有默认值,但如果想使用自己的配置替换默认配置的话,就可以使用application.properties或者 application.ym...

    2024-02-01 01:14:00
  • 【设计模式】桥接模式

    【设计模式】桥接模式

    设计模式大总结 桥梁模式是对象的结构模式。又称为柄体(Handle and Body)模式或接口(Interface)模式。桥梁模式的用意是“将抽象化(Abstraction)与实现化(Implementation)脱耦,使得二者可以独立地变化”。一。简解桥接模式顾名思义,是在两个模块间搭的一个桥,这两个模块就是抽象化和实现 抽象由抽象类或者接口声明的,作为一类类的抽象 实现则是继承抽象类或者

    2024-02-01 01:13:32