5
回答
Nginx+Weblogic动态静态分离处理遇到的一个问题
利用AWS快速构建适用于生产的无服务器应用程序,免费试用12个月>>>   

想通过Nginx 0.87和Weblogic 9.23实现动态页面和静态页面的分离处理,遇到一个问题,请教下如何解决。

原有的应用是通过weblogic 9.23建立的一个Application,名字叫做life,context path是/life,应用的uri地址为http://192.168.10.11:7001/life/  ,应用路径是/testapp/life_test/life/web/,WEB-INF,动态页面和静态页面等全部存放在这个路径下。

nginx.conf中部分配置如下:

server {
        listen       9900;
        server_name  192.168.10.100;

location ~ *\.(htm|html|gif|jpg|jpeg|png|bmp|css|js|txt)$ {
            root /picclife/svndba/nginxtest/picclife_test/life/web/;
}
location /life/ {
            proxy_pass  http://192.168.10.11;
            proxy_set_header    X-Real-IP  $remote_addr;
            proxy_set_header    Host       $host;
            proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
            proxy_buffer_size 4k;
            proxy_buffers 4 32k;
            proxy_busy_buffers_size 64k;
            proxy_temp_file_write_size 64k;
            proxy_max_temp_file_size 100m;
}

访问http://192.168.10.100:9900/life/index.jsp 的时候页面静态内容(图片等)不能显示出来,

查看nginx logs/error.log发现有如下错误:

2012/08/12 17:11:12 [error] 30216#0: *281 open() "/testapp/life_test/life/web/life/public/js/Cookie.js" failed (2: No such file or directory), client: 10.64.100.9, server: localhost, request: "GET /life/public/js/Cookie.js HTTP/1.1", host: "192.168.10.11:9900", referrer: "http://192.168.10.11:9900/life/main.jsp"
2012/08/12 17:11:12 [error] 30216#0: *285 open() "/testapp/life_test/life/web/life/special/images/picc_logo.gif" failed (2: No such file or directory), client: 10.64.100.9, server: localhost, request: "GET /life/special/images/picc_logo.gif HTTP/1.1", host: "192.168.10.11:9900", referrer: "http://192.168.10.11:9900/life/main.jsp

日志中可以看到nginxopen静态文件失败了,失败的原因是获取静态文件的路径里多了/life这个层级,要是把/life去掉文件路径就是正确的。

刚刚接触nginx不久,还请各位朋友指导帮助下,谢谢!

举报
Repentance
发帖于5年前 5回/2K+阅
共有5个答案 最后回答: 5年前

Nginx 中的 URL 路径必须跟 WebLogic 里的路径完全匹配哦

例如访问 weblogic   的路径是 http://xxx.xxx.xxx.xxx:7001/app/life_test/life/web/

那么访问 nginx 的路径就是 http://xxx.xxx.xxx.xxx/app/life_test/life/web

这个是必须的,请遵照这个原则来配置

location ~ *\.(htm|html|gif|jpg|jpeg|png|bmp|css|js|txt)$ {
    root /picclife/svndba/nginxtest/picclife_test/life/web/;
    rewrite ^/life/(.*)$ /$1 last;
}

#看看将这个规则替换原来的规则如何。 也就是增加一个重写如何。记得要放在代理的前面。


引用来自“红薯”的答案

Nginx 中的 URL 路径必须跟 WebLogic 里的路径完全匹配哦

例如访问 weblogic   的路径是 http://xxx.xxx.xxx.xxx:7001/app/life_test/life/web/

那么访问 nginx 的路径就是 http://xxx.xxx.xxx.xxx/app/life_test/life/web

这个是必须的,请遵照这个原则来配置

红薯大哥,weblogic应用的uri地址为http://192.168.10.11:7001/life/,访问weblogic应用是通过http://192.168.10.11:7001/life/index.jsp访问的,访问nginx http://192.168.10.11:9900/life/index.jsp的时候是像您说的和weblogic路径一致进行访问的。

问题好像出在这里,静态页面和动态页面存在同样的路径下了,全部都存放在/picclife/svndba/nginxtest/picclife_test/life/web/路径下,index.jsp页面中存在如下元素<img src="/life/special/PICClife/images/pic_dot.gif" width="83" height="2">,nginx处理此元素的时候会发起GET /life/special/images/picc_logo.gif(错误日志中有体现) ,这时候nginx会使用路径{root}+/life/special/images/picc_logo.gif来获取文件,但是我的静态文件在/picclife/svndba/nginxtest/picclife_test/life/web/路径下就不再有/life目录了,直接存放着special/images/picc_logo.gif,public/js/Cookie.js等。

请教下这个问题该如何解决啊?

--- 共有 1 条评论 ---
红薯那你在静态文件配置的 root 最后再加多一个 life 呗 5年前 回复

引用来自“Repentance”的答案

引用来自“红薯”的答案

Nginx 中的 URL 路径必须跟 WebLogic 里的路径完全匹配哦

例如访问 weblogic   的路径是 http://xxx.xxx.xxx.xxx:7001/app/life_test/life/web/

那么访问 nginx 的路径就是 http://xxx.xxx.xxx.xxx/app/life_test/life/web

这个是必须的,请遵照这个原则来配置

红薯大哥,weblogic应用的uri地址为http://192.168.10.11:7001/life/,访问weblogic应用是通过http://192.168.10.11:7001/life/index.jsp访问的,访问nginx http://192.168.10.11:9900/life/index.jsp的时候是像您说的和weblogic路径一致进行访问的。

问题好像出在这里,静态页面和动态页面存在同样的路径下了,全部都存放在/picclife/svndba/nginxtest/picclife_test/life/web/路径下,index.jsp页面中存在如下元素<img src="/life/special/PICClife/images/pic_dot.gif" width="83" height="2">,nginx处理此元素的时候会发起GET /life/special/images/picc_logo.gif(错误日志中有体现) ,这时候nginx会使用路径{root}+/life/special/images/picc_logo.gif来获取文件,但是我的静态文件在/picclife/svndba/nginxtest/picclife_test/life/web/路径下就不再有/life目录了,直接存放着special/images/picc_logo.gif,public/js/Cookie.js等。

请教下这个问题该如何解决啊?

啊。。。好像我的表述不太清楚啊,不好意思。

root对应的/picclife/svndba/nginxtest/picclife_test/life/web/路径下没有life这个目录层级,换句话说也就是不存在/picclife/svndba/nginxtest/picclife_test/life/web/life/这个路径。。。如果我在nginx.conf配置文件中的root项再加一层life,那就更找不到静态文件了。。。

顶部