Nginx 反向代理 Tomcat


Nginx 反向代理 Tomcat

Nginx 是一個很強大的反向代理服務器,在JavaWeb項目里,Nginx 和 Apache httpd 經常會被最為前端服務器使用,負責轉發請求,實現負載均衡,再配合Tomcat,Jetty 等JavaWeb服務器使用,負責實際處理請求; 與Apache httpd 相比,Nginx更加輕量化,占用更少資源,同時具有更強的並發性(單Apache一般4000,單Nginx上一般50000),更強大的靜態資源處理能力,同時Nginx在配置要比Apache要方便地太多了;
以下演示了簡單的單配置文件形式和多配置文件形式;
為了方便說明,這2種配置形式都是Nginx將全部的請求全部轉發到Tomcat,Tomcat在處理靜態資源上的效率是遠遠比不上Nginx的,無法發揮 Nginx 處理靜態資源上的優勢,關於配置 Nginx和其它服務器 的動靜分離,負載均衡,參見以下:
Nginx 動靜分離:http://blog.csdn.net/al_assad/article/details/76561991
Nginx 反向代理Tomcat集群,負載平衡:http://blog.csdn.net/al_assad/article/details/76562178


最簡單的演示

關於Nginx安裝配置參考:Nginx關於JDK,Tomcat安裝配置:JDK 和 Tomcat假設Nginx要將處理請求轉發給Tomcat里的testapp,根目錄路徑為 /tomcat/webapps/testapp;      請求的域名為“test.assad.site";      Tomcat和Nginx位於同一個機器上;1)Nginx轉發配置
假設Nginx路徑為 /nginx,vim編輯 /nginx/conf/nginx.conf,在http節點下添加以下內容:1234567891011121314

2)Tomcat配置Host

假設Tomcat路徑為 /tomcat ,vim 編輯 /tomcat/conf/server.conf ,在Server/Server/Engine/ 節點路徑下,添加<Host>節點;1
<Host name="test.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>
7
其中name字段為請求URL,appBase字段為該URL轉發到的 web application 的更目錄;
如果Tomcat服務器的所有請求都有Nginx轉發,不再需要使用 ip:8080 的形式請求,為了安全起見,可以將<Host name="localhost" appBase="webapps">節點及其子節點注釋掉,此時Tomcat服務器只能通過Nginx請求轉發的形式訪問;之后重啟Tomcat和nginx,通過瀏覽器器訪問:http://test.assad.site 就可以訪問到Tomcat的testapp ;

多配置文件方式

如果一個Nginx服務器代理 Tomcat 的多個 JavaWeb 應用,這些 JavaWeb 應用分別響應不同的URL請求,一般的做法是將 nginx 的 nginx.conf 分拆為多個 conf 文件,每個conf 文件管理一個JavaWeb的代理配置,這樣更加方便也更加安全對各個JavaWeb進行Nginx的代理配置;
假設Nginx和Tomcat位於同一個機器上,Nginx 分別轉發"test1.assad.site","test2.assad.site" 給Tomcat上的 testapp1,testapp2 這兩個JavaWeb 應用;這2個JavaWeb app根目錄的路徑分別是:/tomcat/webapps/testapp1,/tomcat/webapps/testapp2Nginx根目錄為 /nginx
以下是配置過程:

1)Nginx轉發配置

修改 /nginx/conf/nginx.conf, 引入所有vhost的配置信息,類似如下; 1234在 /nginx/conf/vhost 下創建“test1.assad.site.conf”"test2.assad.site.conf" 兩個文件,以"test1.assad.site.conf"的配置示例,內容如下:
test1.assad.site.conf
1
upstream testapp1 {         #設置一個upstream
2
    server 127.0.0.1:8080;
3
}
4
server {
5
    listen 80;                         #監聽的系統端口
6
    server_name test1.assad.site;      #代理轉發的原始URL
7
    charset utf-8;                     #字符編碼
8
9
    root /tomcat/webapps/testapp1;            # 相應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 / {          #轉發所有的請求
16
        proxy_pass http://testapp1;         #代理轉發的upstream,格式http://upstream_name
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
}
test2.assad.site.conf 配置類似以上

2)Tomcat配置Host

在 Tomcat 的 server.xml 中的Server/Service/Engine/ 節點下,添加以下<Host>節點:1
....
2
<Host name="test1.assad.site"  appBase="/tomcat/webapps/testapp1"  unpackWARs="true" autoDeploy="true">
3
    <Context path="" docBase="/tomcat/webapps/testapp1" debug="0" reloadable="true" />
4
    <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" 
5
           prefix="localhost_access_log." suffix=".txt" 
6
           pattern="%h %l %u %t &quot;%r&quot; %s %b" />
7
</Host>
8
<Host name="test2.assad.site"  appBase="/tomcat/webapps/testapp2"  unpackWARs="true" autoDeploy="true">
9
    <Context path="" docBase="/tomcat/webapps/testapp2" debug="0" reloadable="true" />
10
    <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" 
11
           prefix="localhost_access_log." suffix=".txt" 
12
           pattern="%h %l %u %t &quot;%r&quot; %s %b" />
13
</Host>
14
....

之后重啟 Nginx 和 Tomcat 使配置生效就ok了;







注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com