nginx代理人server结合tomcat采用
相信非常多人都聽過nginx,這個小巧的東西慢慢地在吞食apache和IIS的份額。那到底它有什么作用呢?可能非常多人未必了解。
說到反向代理,可能非常多人都聽說,但詳細什么是反向代理,非常多人預計就不清楚了。
摘一段百度百科上的描寫敘述:
Html代碼??? 這里講得非常直白。反向代理方式實際上就是一臺負責轉發的代理server,貌似充當了真正server的功能。但實際上并非,代理server僅僅是充當了轉發的作用,而且從真正的server那里取得返回的數據。這樣說,事實上nginx完畢的就是這種工作。我們讓nginx監聽一個port,譬如80port,但實際上我們轉發給在8080port的tomcat,由它來處理真正的請求。當請求完畢后,tomcat返回,但數據此時沒直接返回,而是直接給nginx,由nginx進行返回。這里。我們會以為是nginx進行了處理。但實際上進行處理的是tomcat。
說到上面的方式?;蛟S非常多人又會想起來,這樣能夠把靜態文件交由nginx來進行處理。對。非常多用到nginx的地方都是作為靜態伺服器,這樣能夠方便緩存那些靜態文件,比方CSS,JS,html。htm等文件。
閑話就不多說了。我們直接來看看nginx怎么使用。
?
1)要用到的軟件當然要下載啦。
到nginx官網下一個。http://nginx.org/en/download.html能夠到這里去下。
我如今用的版本號是1.1.7。但基本上以后的版本號都兼容,并且我們用到的并不涉及到太底層的,應該不會有什么變化。
這里,因為我的是windows,當然下windows版啦。下完后首先要啟動吧。進入到nginx目錄。直接start nginx就OK了。
比方我下載后放在D:\software\developerTools\server\nginx-1.1.7,直接cmd后cd?D:\software\developerTools\server\nginx-1.1.7。有些不習慣命令行的可能會奇怪,它沒有進行到那個目錄。windows并不會在分區間跳轉,除非你自己指定了。所以我們要直接d:例如以下:
然后。我們直接start nginx。這里或許你會看到一個窗體一閃而過,依據我們使用tomcat的經驗,假設一閃而過,證明有錯誤了,是吧?但實際上不是。
此時我們打開任務管理器,能夠看到兩個nginx.exe在那里好好的。
這說明我們已經啟動了,至于為什么兩個,我們這里不深究。
如今,我們已經啟動了nginx,這時就能夠啟動tomcat,想著直接訪問http://localhost就能夠直接訪問tomcat了。
先不急,我們來看看啟動后的nginx是如何的。直接訪問http://localhost能夠看到:
???? 我們能夠看到nginx啟動成功,如今訪問是直接進到nginx的文件夾里面了。
那么這些實際上是在哪里配置的。這就涉及到nginx的一個重要配置文件nginx.conf了。
?
2)我們能夠看到nginx目錄內有一個conf目錄。當中有好幾個文件。其它先無論。我們打開nginx.conf,能夠看到一段:
? 這段代碼在server里面,相當于一個代理服務器,當然能夠配置多個。
以下我們細致來分析一下:
listen:表示當前的代理服務器監聽的port,默認的是監聽80port。注意,假設我們配置了多個server,這個listen要配置不一樣,不然就不能確定轉到哪里去了。
server_name:表示監聽到之后須要轉到哪里去,這時我們直接轉到本地。這時是直接到nginx目錄內。
location:表示匹配的路徑,這時配置了/表示全部請求都被匹配到這里
root:里面配置了root這時表示當匹配這個請求的路徑時。將會在這個目錄內尋找對應的文件,這里對我們之后的靜態文件伺服非常實用。
index:當沒有指定主頁時,默認會選擇這個指定的文件。它能夠有多個,并按順序來載入。假設第一個不存在,則找第二個,依此類推。
以下的error_page是代表錯誤的頁面,這里我們臨時不用,先無論它。
?
那我們知道了詳細的配置了,怎么讓它訪問localhost時轉到tomcat時。
實際上就改動兩個地方:
Java代碼??? 我們就改動了上面兩個地方,我的tomcat在8080port,能夠依據自己的須要改動。這里有一個新元素proxy_pass。它表示代理路徑,相當于轉發,而不像之前說的root必須指定一個目錄。
此時我們改動了文件,是不是就意思著必須先關了nginx再又一次啟動了,事實上不必,nginx能夠又一次載入文件的。
我們直接執行:
Html代碼??高興得太早了,我們發現有一個錯誤:
? 什么來的。45行發現錯誤。不希望在那一行找到},于是我們細致找,發現我們增加的proxy_pass非常奇怪,沒有;號結尾。這就是問題了。直接改動,然后再執行一下,發現沒錯誤,OK了。
假設不想直接載入,而僅僅是想看看自己的配置文件有沒有問題。能夠直接輸入:
Xml代碼??這能夠檢查配置文件里是否有錯。?以下我們全部的改動都如果我們改動完畢后執行了nginx -s reload進行又一次載入配置文件,請注意。
?
一切沒問題了,然后我們再又一次打開http://localhost,我們看到以下的頁面:
?
這時,我們發現它并非剛才的welcome頁面了。而是tomcat的管理頁面了。無論我們點擊什么鏈接都是沒問題的,相當于直接訪問http://localhost:8080一樣。
?
3)上面我們直接試了一個小樣例,讓nginx進行轉發,即所謂的反向代理。但實際上我們的需求不會是這種,我們須要分文件類型來進行過濾。比方jsp直接給tomcat處理,由于nginx并非servlet容器,沒辦法處理JSP。而html,js,css這些不須要處理的。直接給nginx進行緩存。
以下我們來進行一下配置,讓JSP頁面直接給tomcat,而html,png等一些圖片和JS等直接給nginx進行緩存。
這時最主要用的還是location這個元素,而且涉及到一部分正則,但不難:
Xml代碼??? 我們先要去掉之前配的location /,避免所有請求被攔截了。
然后我們再來看看http://localhost
? 當我們不指定jsp頁面的時候,它會出現找不到。由于。此時并沒有對應的location匹配,所以就會有404錯誤。這時就跳到了nginx自己定義的error頁面去了。
而當我們用http://localhost/index.jsp去訪問時。我們看到了熟悉的頁面:
? 并且圖片那些都顯示正常,由于圖片是png的。所以直接在tomcat/webapps/ROOT文件夾下直接查找,當然,假設我們點擊Manager Application HOW-TO這個鏈接,我們發現:
? 它還是找不到,為什么呢?由于這是個html頁面。但它并不在ROOT文件夾下,而是在docs文件夾下,但當我們匹配html時,我們卻到ROOT文件夾下去找,所以還是找不到這個頁面。
?
普通情況下,假設我們須要用nginx來進行靜態文件伺服,一般都會把全部靜態文件,html,htm,js,css等都放在同一個目錄下,這樣就不會有tomcat這種情況了。由于tomcat下的是屬于不同的項目。這個我們就沒辦法了。
?
3)有些人會說。這些都僅僅會找一臺server,但假設我們想在一臺server掛了的時候,自己主動去找另外一臺,這怎么辦?這實際上nginx都考慮到了。
這時,我們之前用的proxy_pass就有大用途了。
我們把之前的第一個樣例,即所有都代理的改動一下:
最后改動例如以下:
Xml代碼??? 我們在server外加入了一個upstream,而直接在proxy_pass里面直接用http://+upstream的名稱來使用。
我們還是直接來http://localhost,還是和第一個一樣的效果。全部鏈接都沒問題,說明我們配置正確。
upstream中的server元素必需要注意。不能加http://,但proxy_pass中必須加。
我們剛才說能夠在一個server掛了的情況下連到另外一個,那怎么弄呢?
事實上非常easy,在upstream中的local_tomcat中配置多一個server。比方我如今弄多一個jetty。port在9999,所以我們配置例如以下:
Xml代碼??? 此時,我們關閉tomcat,而僅僅開jetty。我們來執行http://localhost看看效果:
? 我們看到它請求到了jetty的頁面,但因為jetty的機制,這時沒有顯示jetty主頁,這個我們先無論。
但我們的在一個server掛的情況下自己主動使用另外一個的功能實現了。
?
但有時我們就不想它掛的時候訪問另外一個,而僅僅是希望一個服務器訪問的機會比另外一個大,這個能夠在server最后加上一個weight=數字來指定。數字越大,表明請求到的機會越大。
Xml代碼??? 這時我們給了jetty一個更高的權值,讓它更有機會訪問到。實際上當我們刷新http://localhost訪問的時候發現jetty訪問機率大非常多,tomcat差點兒沒機會訪問,普通情況下。假設我們必須這樣用。不要相關太大,以免一個server負載太大。
當然,server另一些其它的元素,比方down表示臨時不用到該服務器等等。這些能夠參考nginx的wiki?;蛟S寫了一大堆,有人會有問題。那nginx怎么關閉呢?這倒是個問題,事實上直接執行nginx -s stop就能夠關閉了。
?
基本上nginx使用如此,我們假設,在深入學習后,再次使用。
版權聲明:本文博主原創文章,博客,未經同意不得轉載。
轉載于:https://www.cnblogs.com/hrhguanli/p/4908199.html
總結
以上是生活随笔為你收集整理的nginx代理人server结合tomcat采用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 007--C++动态内存(数组)
- 下一篇: JAVA中int、String的类型转换