使用nginx转发服务出现静态资源访问404问题的原因与解决方法

项目上因为要集成第三方服务,因此需要使用nginx转发服务地址来保证不会出现跨域问题。

location /yanggb/ {
    proxy_pass http://127.0.0.1:2333/;
}

但是通过以上配置之后,虽然能够访问到转发后的地址,但是所有静态资源文件的请求都报404错误,导致反向代理并没有完全成功。

经过多次排查与反复尝试,最终问题还是定位在nginx的路由配置上。具体是,出于nginx的路由路径【/yanggb/】在路由匹配成功之后还会继续往下寻找匹配规则(在上面的配置中找不到)以及在路径中末尾【/】的原因,静态资源的请求地址无法被nginx有效识别,直接导致反向代理失败了,所有的二级地址都没有被代理成功。

解决方法则是修改路由路径的匹配规则(加上往下匹配的通配符【^~】)即可:

location ^~ /yanggb/ {
    proxy_pass http://127.0.0.1:2333/;
}

这样,nginx就能正常代理静态资源的访问,不会出现404请求报错了。

"大概人生里的很多事情都需要按时按量地去完成,不管是提前或是延后,都不妥当。"