日常踩坑记录。
如果你也遇到了可以尝试修改下看能否改善你的问题。
nginx 旧配置 # Nexus maven 私有仓库location /nexus {proxy_pass http://192.168.128.168:89/nexus;}
访问页面
虽然不影响使用,但是logo 小图标你都不显示,看着不舒服。解决它
经过面向百度谷歌后,排查发现应该还是nginx配置的问题。
具体是,出于nginx的路由路径 /nexus/ 在路由匹配成功之后还会继续往下寻找匹配规则(在上面的配置中找不到)以及在路径中末尾【/】的原因,静态资源的请求地址无法被nginx有效识别,直接导致反向代理失败了,所有的二级地址都没有被代理成功。
解决方法则是修改路由路径的匹配规则(加上往下匹配的通配符 ^~ 即可):
# Nexus Maven 私有仓库location ^~ /nexus {proxy_pass http://192.168.128.168:89/nexus;}
#因为就自家开发同学使用,其余访问头之类设置就没有设置了。
访问效果:
附ChatGPT的解释:
location ^~ /nexus
与location /nexus
的区别在于匹配规则。
location ^~ /nexus
的匹配规则是前缀匹配,即以/nexus
开头的 URI 都会被匹配到。而
location /nexus
的匹配规则是通用匹配,会匹配所有以/nexus
结尾的 URI,包括以/nexus
结尾的 URI。如果您使用了
location /nexus
,可能会发生这种情况:当请求
http://example.com/nexus/
时,Nginx 会将该请求转发到http://192.168.128.168:89/nexus/
,但是,当浏览器请求该页面中的静态资源时,浏览器会将请求发送到
http://example.com/nexus/resource.png
,而不是http://example.com/nexus/nexus/resource.png
。这就导致了404错误。
而使用
location ^~ /nexus
,可以确保所有以/nexus
开头的请求都被正确地转发到了Nexus服务器,包括静态资源的请求。因此,这可能是您遇到的问题的解决方案之一。需要注意的是,使用
location ^~ /nexus
的时候,如果您在Nexus服务器上有一个子目录,例如http://192.168.128.168:89/nexus/app/
,并且该目录下有一个文件resource.png
,则该文件应该使用http://example.com/nexus/app/resource.png
来访问,而不是http://example.com/nexus/resource.png
。因为location ^~ /nexus
仅匹配以/nexus
开头的请求,而不匹配/nexus
后面的其他内容。