Nexus Repository OSS反向代理

我有一台运行在localhost:8081上的Nexus Repository OSS的Windows Server 2012 R2服务器localhost:8081 。 我使用以下规则在IIS中configuration了一个反向代理服务器:

 <?xml version="1.0" encoding="UTF-8"?> <configuration> <system.webServer> <rewrite> <rules> <rule name="ReverseProxyInboundRule1" stopProcessing="true"> <match url="(.*)" /> <action type="Rewrite" url="http://localhost:8081/{R:1}" /> </rule> </rules> <outboundRules> <preConditions> <preCondition name="ResponseIsHtml1"> <add input="{RESPONSE_CONTENT_TYPE}" pattern="^text/html" /> </preCondition> </preConditions> </outboundRules> </rewrite> </system.webServer> </configuration> 

当我从另一个系统访问该网站,并导航到nexus.mycompany.com我可以看到代理工作…主要。 所有的依赖css,js等都是localhost:8081这当然是远程机器无法解决的。

我试图添加一个出站规则希望能解决这个问题,但没有。

  <rule name="ReverseProxyOutboundRule1" preCondition="ResponseIsHtml1"> <match filterByTags="A, Form, Img" pattern="^http(s)?://localhost:8081/(.*)" /> <action type="Rewrite" value="http{R:1}://nexus.mycompany.com/{R:2}" /> </rule> 

看文档 ,我试着设置一个基本的URL。 它描述的button不在GUI中。 我发现一个堆栈溢出文章解释说,它已被移到function部分。 我通过function添加了基本的URL,但它仍然不起作用。

每次更改后我都重新启动了Windows服务。

我想要做的是有一个主机名可用的存储库,并适当加载。 我在这里错过了很明显的东西吗 有没有其他原因,为什么它使用完整的url,而不是相对的url?

在反向代理设置中,Nexus会查找各种X-Forwarded-* HTTP标头,以确定其基本URL。 只要您正确设置这些标头,它应该产生正确的URL,不需要出站规则。

诀窍是知道哪些是通过的 – 反向代理文档似乎并不特别清楚这些是什么,他们只是提供nginx和Apache样本没有太多的解释。 我怀疑nginx和Apache自动设置必要的标题,Nexus已经采用了这些。 这是一个“事实上的标准”,而不是一个正式的标准,所以当你看到跨应用程序支持标题的一致性时,它是不能保证的。

这是我在我的情况下需要的两个:

  • X-Forwarded-Host告诉Nexus客户端请求的原始主机。 这将是你的例子中的“nexus.mycompany.com”。
  • 即使Nexus本身没有运行HTTPS, X-Forwarded-Proto也可以用来告诉Nexus原始请求(即代理)是HTTPS。 如果你的代理不是HTTPS,那么你不应该需要这个。

在服务器variables部分设置标题 – 用下划线replace破折号,并在前面加上一个“HTTP_”,这样X-Forwarded-Host变为HTTP_X_Forwarded_Host

所以规则最终会看起来像这样:

 <rule name="ReverseProxyInboundRule1" stopProcessing="true"> <match url="(.*)" /> <action type="Rewrite" url="http://localhost:8081/{R:1}" /> <serverVariables> <set name="HTTP_X_Forwarded_Proto" value="https" /> <set name="HTTP_X_Forwarded_Host" value="nexus.mycompany.com" /> </serverVariables> </rule> 

再次,如果您的反向代理不是HTTPS,请取出原始的一个。

有了这些头文件,你不应该需要出站规则,正如你所说的是不能够捕捉到JavaScript文件中发生的事情。

作为一个最后的考虑,你可能要考虑在那里留下这个基本的URLfunction – 根据文档,它可以用于一些事情。