nginx配合tomcat、resin等java應用伺服器提供java支援

來源:互聯網
上載者:User

首先探討一下為什麼要使用nginx:

1、類似於apache+resin,nginx用於提供靜態頁面服務,比java伺服器要強。雖然這些java伺服器的效能都不賴,tomcat新版甚至還支援了epoll,但是用nginx來處理靜態檔案是一定比這些伺服器更穩妥並更快速的。

2、nginx在配合java應用伺服器時相比apache耦合度更低,所以它可以用相同的方
式連上所有能支援http服務能力的java應用伺服器,無論是tomcat、resin、weblogic、jetty、websphere……,並且
可以輕易地將一個應用同時串連不相同的伺服器。譬如一台跑tomcat,一台跑resin,這一點在切換或測試生產環境時非常有用。另外耦合度的降低,將
使nginx和這些伺服器之間的相互影響降到最低,這樣兩者就能各盡其責,apache一般是採用一個模組來和java應用伺服器打交道,這個模組是會對
apache的運行或多或少產生影響的,nginx告訴我們這些模組是多麼的雞肋,java伺服器要不就往fastcgi協議支援方面發展會更好。

3、nginx的一些特性可以保住脆弱的java伺服器。其中可以點名的:1是可細緻定製的負載平衡策略;2是超強的故障屏蔽功能可以做到不遺漏任何一個請求;3是用戶端串連的非同步處理;4是比java伺服器強上百倍的負荷能力。

綜合這些優點,一般的java應用伺服器,接上一個nginx後,在服務穩定性上將可匹敵數萬美金的大型java叢集伺服器,java開發人員就不用再為java效能方面發愁了。

如果決定試用一下nginx,那接下來的事就比吐口水輕鬆得多了。

nginx可以用兩種方式去接java後台:

1、將jsp副檔名的請求發往後台,這是比較傳統的方式

2、將所有請求都發往後台,而將一些靜態檔案的目錄留下

3、將所有請求都發往後台,而將某種副檔名的連結留下

這三種方式都是利用連結特徵處理的,舉例說明(例子中是伺服器是單機):

首先配置一個upstream,這是通用的:

upstream www.sudone.com {

server 127.0.0.1:8081;

server 127.0.0.1:8082;

}

127.0.0.1:8081和127.0.0.1:8082就是後端伺服器了,resin支
持兩種方式服務,一種是引擎方式用於串連apache和IIS,另一種是http
server方式,一定要啟動的是http伺服器方式的,這樣這兩個連接埠才有效。tomcat我不太清楚,如果有兩種方式,也一定要啟動http
server方式,檢查的辦法是通過一個連結要能夠直接存取得到頁面。

針對副檔名的策略的配置:

server {

listen 80;

server_name www.sudone.com;

location / {

root /data/html/;

rewrite "^/([0-9]+)\.html$" /a.jsp?id=$1 last;

}

location ~ (\.jsp)|(\.do)$ {

proxy_pass http://www.sudone.com;

}

}

需要注意的事項是:

1、location ~
(\.jsp)|(\.do)$這一段中的proxy_pass標籤後面一定不要寫/,也不能多寫/jsp,例如不能寫成proxy_pass

http://www.sudone.com/;,原因是location如果用到Regex,則不能在proxy_pass中含有連結路徑。

2、server_name
www.sudone.com;指定的是使用者訪問nginx時用的網域名稱,proxy_pass

http://www.sudone.com;這個是nginx

upstream的名稱,同時是nginx訪問後台用的網域名稱,多數情況下用相同名稱就可以了,有一些特殊情況需要用到不相同名稱的,則要確保後台不會因為
這一點惹出亂子。

3、rewrite直接寫在location /下面就可以了,不能寫在location ~ (\.jsp)|(\.do)$裡面,注意rewrite後面的參數在這裡一定要是last。

4、我在此配置裡僅僅配置了jsp和do,當然java還不只支援這麼多,所以要找到所有java連結規則才可以。

把所有請求都發往背景配置(2和3一起寫了):

server {

listen 80;

server_name www.sudone.com;

location / {

proxy_pass http://www.sudone.com;

}

location /images/ {

alias /data/html/images/;

}

location ~ (\.jpg)|(\.gif)|(\.png)$

{

root /data/html/;

}

}

這兩種配置和針對jsp副檔名的原理剛好是反的,注意事項:

1、和針對jsp副檔名不同,在proxy_pass http://www.sudone.com;這裡,因為沒有用到Regex,所以可以在後面寫/,亦可支援/jsp。

2、location /images/這一段用alias會能看得比較清楚,也可以用root標籤,不過這時就應該寫成:root /data/html/,提前一級。

3、location ~ (\.jpg)|(\.gif)|(\.png)$這一段只能用root標籤,不能寫alias,location用正則後再用alias的話nginx不支援,我也想不清楚用alias的話邏輯會是怎樣的。

以上配置都是最簡化的配置,還有很多參數可以調整,我在我其他文章裡會有所講述。另外提醒,要好好測試,有問題先思考,這些配置都不是萬能配置還不足以能解決所有情況,同時這幾種配置也沒有優劣之說,如果不確定用哪種,採用第一種方式就可以了。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.