Nexus3 + Nginx 反向代理

6
我正在尝试让Nexus3在Nginx后运行。Nginx被用作反向代理和SSL终止器。通过Nginx访问/nexus路径时,我会遇到多个错误,例如“服务器无法连接”和“无法检测到所连接的节点”。直接访问Nexus UI而不通过Nginx是完美的,这让我认为错误在于Nginx。下面是Nginx配置文件内容:
location /nexus {
            proxy_pass http://localhost:8081/nexus/;
            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 X-Forwarded-Proto https;
            resolver 8.8.8.8 8.8.4.4 ipv6=off;
    }

在不通过Nginx访问Nexus UI时,URI是否包括“/nexus/”前缀? - Richard Smith
它可以在不经过Nginx的情况下工作,即通过访问http://localhost:8081/nexus/上的URL进行访问。URI包含上下文路径/nexus/。我正在使用Nginx进行SSL终止。 - Taahir Hassem
1
尝试使用proxy_pass http://localhost:8081/nexus;(不带尾部的/)来匹配location值。同时,尝试删除Host头语句。 - Richard Smith
谢谢Richard,问题已解决。请将其添加为答案,以便我可以标记为已解决。 - Taahir Hassem
1个回答

5

如果您使用 http://localhost:8081/nexus 访问该服务,它可以正常工作。

您当前的配置使用 proxy_pass 将 URI /nexus 更改为 /nexus/。通常情况下,建议在 locationproxy_pass URI 上都加上尾随的 /,或者两者都不加。

例如:

location /nexus {
    proxy_pass http://localhost:8081/nexus;
    ...
}

实际上,您根本不需要修改URI,因此可以将其完全从proxy_pass指令中删除。
以下内容应该是等效的,但更有效率:
location /nexus {
    proxy_pass http://localhost:8081;
    ...
}

默认情况下,Host头部会被设置为proxy_pass指令的值(即localhost:8081),这已经可以正常工作。您可能会发现,您的语句proxy_set_header Host $host:$server_port;是不必要的。
请参阅此文档了解详细信息。

在Nexus OSS 3.15.2-01上,我发现如果不设置Host头信息会导致400错误。我的nginx监听8888端口并代理到8081的nexus服务器。 - user1160006
你真是救星啊!!!在所有的nginx代理(proxy_pass)示例中,都强烈建议包含尾部斜杠!但出于某些原因,这对Nexus不起作用,但建议的高效选项完美地解决了问题!谢谢! - The Godfather
我花了好几个小时时间,直到找到你的答案。谢谢。 - TJ Zimmerman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接