将本地多个项目打包成jar包后放在linux上执行,然后通过nginx进行代理的时候,由于原本在eclipse运行的项目请求默认都会是项目指定的端口,但是通过nginx进行代理后,请求的就变成了nginx默认的端口。例如
   请求 URL: http://192.168.159.129/fonts/fontawesome-webfont.woff?v=4.4.0,这个是项目中的一个css中引用项目中的一个文件,路由为URL:../fonts/fontawesome-webfont.woff?v=4.4.0,在原项目中会默认为该项目的端口,例如请求为http://localhost:9090/fonts/fontawesome-webfont.woff?v=4.4.0,这样就可以通过访问项目的静态文件夹中的fonts文件夹访问文件,但是通过nginx代理后,URL就变了,这种结果如何处理使得请求访问正确的资源呀???这种是通过在url开头加一个标签使得每次请求都跳转到指定Tomcat端口,如在nginx.conf中的location后面添加/resource,表明请求跳转至resource项目中,但是感觉这样比较麻烦,请问有其他比较好的方法吗????求指教!!!

解决方案 »

  1.   

    你的问题描述有点意识流啊,很混乱
    比如nginx的地址是什么,被代理的地址是什么,最后出现什么问题,完全没看出来
      

  2.   

    例如,我的项目运行在Tomcat上,端口为9090。将这个项目部署在linux上,ip为:192.168.159.129,nginx默认开放的端口是80,可以通过nginx.conf设置一个代理请求:location /resource/{proxy_pass http:127.0.0.1:9090/resource/},这样,就可以通过一个请求:http://192.168.159.129/resource/getAll跳转到指定本地请求:http://127.0.0.1:9090/resource/getAll,这样会进入某个页面,但是这个页面有一个js文件有一个ajax,url为:../selectAll,这样,如果本地就会生成一个请求,url为http://localhost:9090/selectAll,但是通过nginx代理后,就变成了http:localhost:192.168.159.129/getAll,这样请求就无法获取了。包括这个页面的url也无法按照原来的url或者src来获取相关的资源了。
      

  3.   

    一般有两种办法,将tomcat的context path 设置成resource,这样你不用改代码,前提是你的静态资源是${contextPath}/xxx这种格式,目测大概是的
    还有一种是将所有静态资源引用都弄成相对路径的
    ajax的url同理
      

  4.   

    一般有两种办法,将tomcat的context path 设置成resource,这样你不用改代码,前提是你的静态资源是${contextPath}/xxx这种格式,目测大概是的
    还有一种是将所有静态资源引用都弄成相对路径的
    ajax的url同理
    也就是说nginx代理的过程只能根据请求的url来判定具体处理请求的端口是吧?
      

  5.   

    一般有两种办法,将tomcat的context path 设置成resource,这样你不用改代码,前提是你的静态资源是${contextPath}/xxx这种格式,目测大概是的
    还有一种是将所有静态资源引用都弄成相对路径的
    ajax的url同理
    也就是说nginx代理的过程只能根据请求的url来判定具体处理请求的端口是吧?
    你的问题并不是nginx的问题,而是你进入你的页面之后,由于context path变化(代理产生的变化),而被代理的页面无法自知,当然也没啥好办法能自知,最好是写成相对路径,这样你就不需要考虑前置的代理服务器如何代理的当然你后面举的例子依然很混乱,让我不太确认你是否是我说的这种问题,比如你ajax是selectAll,后面又来了个getAll,真挺能让人产生歧义的,这个习惯不是个好习惯
      

  6.   

    一般有两种办法,将tomcat的context path 设置成resource,这样你不用改代码,前提是你的静态资源是${contextPath}/xxx这种格式,目测大概是的
    还有一种是将所有静态资源引用都弄成相对路径的
    ajax的url同理
    也就是说nginx代理的过程只能根据请求的url来判定具体处理请求的端口是吧?
    你的问题并不是nginx的问题,而是你进入你的页面之后,由于context path变化(代理产生的变化),而被代理的页面无法自知,当然也没啥好办法能自知,最好是写成相对路径,这样你就不需要考虑前置的代理服务器如何代理的当然你后面举的例子依然很混乱,让我不太确认你是否是我说的这种问题,比如你ajax是selectAll,后面又来了个getAll,真挺能让人产生歧义的,这个习惯不是个好习惯
    嗯嗯 ,我觉得大佬说的有道理,我前面没有表述清楚,其实我那个getAll请求是想进入一个页面,这个页面有一个selectAll的请求。谢谢大佬的提醒,我再按照您的思路再修改下,谢谢大佬!!!