Nginx 动静分离(代理Tomcat,Jetty)

来源:互联网 发布:cg织梦 编辑:程序博客网 时间:2024/05/16 11:17

Nginx 实现动静分离


Nginx是一款很强大的前端HTTP服务器,具有很优秀的并发性,在生产环境中搭配其他后端服务器使用,代理转发http请求给其他的后端服务器,同时具有高效的静态处理能力,可以用于均衡静态处理能力不是很高效的后端服务器的负载压力;

在典型的部署JavaWeb应用的时候,常常会用Nginx+Tomcat/Jetty/Jboss的组合,nginx来作为前端服务器抗并发(nginx比apache httpd的并发负载更加强大,而且配置方便),Tomcat/Jetty/Jboss作为Servlet容器,他们在处理静态文件效率上,远不如 nginx;

一般由nginx处理并发的http请求,如果该请求返回的响应是静态文件(html,htm,css,js,图片等),则直接由nginx处理,如果是动态文件(jsp,jspx,do,wsdl)等,则将该请求转发给Servlet容器Tomcat、Jetty等进行处理;

以Nginx+Tomcat实现动静分离为例,以下是一个简单的配置步骤:

示例说明:
nginx根目录为/nginx,端口为80,tomcat根目录为/tomcat,端口为8080;
nginx代理的请求域名"www.assad.site"
绑定的Tomcat的web app根目录为/tomcat/webapps/testapp
Tomcat和nginx位于同一个服务器上;

1)Nginx配置
vim 修改 /nginx/conf/nginx.conf,引入所有vhost的配置信息,类似如下;
在 /nginx/conf/vhsot/ 下创建一个文件 test.assad.site.conf,并编辑文本:
1
upstream testapp {         #设置一个upstream
2
    server 127.0.0.1:8080;
3
}
4
server {
5
    listen 80;                         #监听的系统端口
6
    server_name www.assad.site;      #代理转发的原始URL
7
    charset utf-8;                     #字符编码
8
9
    root /tomcat/webapps/testapp;            # 相应webapp的根目录
10
    index index.html index.htm index.jsp      #起始页
11
    
12
    error_page 404 /errpage/404.html;         # http错误页路径
13
    error_page 500 502 503 504 /errpage/50x.html;
14
    
15
    location ~ \.(jsp|jspx|do|wsdl)$ {                 #动态请求由tomcat处理
16
        proxy_pass http://testapp;           #代理转发到upstream,
17
        proxy_set_header Host $http_host;
18
        proxy_set_header X-Real-IP $remote_addr;
19
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
20
        
21
    } 
22
    location ~ \.(html|htm|js|htm|png|gif|jpg|jpeg)$ {   #静态请求由nginx处理
23
       root /tomcat/webapps/testapp;           #指定静态请求的根目录
24
   }
25
  
26
}
27

2)Tomcat配置
在 Tomcat 的 server.xml 中的 Server/Service/Engine/ 节点下,添加以下<Host>节点:
1
<Host name="www.assad.site"  appBase="/tomcat/webapps/testapp"  unpackWARs="true" autoDeploy="true">
2
    <Context path="" docBase="/tomcat/webapps/testapp" debug="0" reloadable="true" />
3
    <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" 
4
           prefix="localhost_access_log." suffix=".txt" 
5
           pattern="%h %l %u %t &quot;%r&quot; %s %b" />
6
</Host>

3)重启Tomcat,Nginx服务
之后便可以直接通过 http://www.assad.site 访问testapp了(代理前是使用 http://主机IP:8080/testapp  访问)

注意:
※ 以上步骤完成后,如果访问域名返回403页面,很有可能是nginx没有访问/tomcat/webapps/testapp的权限,此时只要将该目录添加到nginx所在用户就好(nginx一般归属www www用户中),详见:http://blog.csdn.net/al_assad/article/details/76562355;