首先探討一下為什么要使用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 /da
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如果用到正則表達式,則不能在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 /da
}
location ~ (\.jpg)|(\.gif)|(\.png)$
{
root /da
}
}
這兩種配置和針對jsp擴展名的原理剛好是反的,注意事項:
1、和針對jsp擴展名不同,在proxy_pass http://www.sudone.com;這里,因為沒有用到正則表達式,所以可以在后面寫/,亦可支持/jsp。
2、location /images/這一段用alias會能看得比較清楚,也可以用root標簽,不過這時就應該寫成:root /da
3、location ~ (\.jpg)|(\.gif)|(\.png)$這一段只能用root標簽,不能寫alias,location用正則后再用alias的話nginx不支持,我也想不清楚用alias的話邏輯會是怎樣的。
以上配置都是最簡化的配置,還有很多參數可以調整,我在我其他文章里會有所講述。另外提醒,要好好測試,有問題先思考,這些配置都不是萬能配置還不足以能解決所有情況,同時這幾種配置也沒有優劣之說,如果不確定用哪種,采用第一種方式就可以了。
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
