搜尋
首頁運維Nginxtomcat怎麼結合nginx使用

tomcat怎麼結合nginx使用

May 21, 2023 pm 01:07 PM
nginxtomcat

tomcat結合nginx使用小結

#    相信很多人都聽過nginx,這個小巧的東西慢慢地在吞食apache和IIS的份額。那究竟它有什麼作用呢?可能很多人未必了解。

     說到反向代理,可能很多人都聽說,但具體什麼是反向代理,很多人估計就不清楚了。摘一段百度百科上的描述:

  1. # 反向代理(Reverse Proxy)方式是指以代理伺服器來接受internet上的連接請求,然後將請求轉發給內部網路上的伺服器,並將從伺服器上得到的結果傳回給internet上請求連接的客戶端,此時代理伺服器對外就表現為一個伺服器。  

#   這裡講得很直白。反向代理方式其實就是一台負責轉送的代理伺服器,似乎充當了真正伺服器的功能,但實際上並不是,代理伺服器只是充當了轉送的作用,並且從真正的伺服器取得傳回的資料。這樣說,其實nginx完成的就是這樣的工作。我們讓nginx監聽一個端口,譬如80端口,但實際上我們轉發給在8080端口的tomcat,由它來處理真正的請求,當請求完成後,tomcat返回,但數據此時沒直接返回,而是直接給nginx,由nginx進行返回,這裡,我們會以為是nginx進行了處理,但實際上進行處理的是tomcat。

說到上面的方式,也許很多人又會想起來,這樣可以把靜態檔案交由nginx來處理。對,很多用到nginx的地方都是作為靜態伺服器,這樣可以方便快取那些靜態文件,例如CSS,JS,html,htm等文件。

閒話就不多說了,我們直接來看看nginx怎麼用。

1)要用到的軟體當然要下載囉。到nginx官網下一個。我現在用的版本是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:如下:

tomcat怎麼結合nginx使用

# 此時我們打開工作管理員,可以看到兩個nginx.exe在那裡好好的。這說明我們已經啟動了,至於為什麼兩個,我們這裡不深究。

tomcat怎麼結合nginx使用

# 此時我們打開工作管理員,可以看到兩個nginx.exe進程在那裡好好的。這說明我們已經啟動了,至於為什麼兩個,我們這裡不深究。

tomcat怎麼結合nginx使用

# 現在,我們已經啟動了nginx,這時就可以啟動tomcat,想著直接訪問http://localhost就可以直接訪問tomcat了。

先不急,我們來看看啟動後的nginx是怎麼樣的。直接造訪http://localhost可以看到:

tomcat怎麼結合nginx使用

我們可以看到nginx啟動成功,現在訪問是直接進到nginx的目錄裡面了。

那麼這些實際上是在哪裡配置的。這就牽涉到nginx的一個重要設定檔nginx.conf了。

2)我們可以看到nginx資料夾內有一個conf資料夾,其中有好幾個文件,其他先不管,我們打開nginx.conf,可以看到一段

tomcat怎麼結合nginx使用

# # 這段程式碼在server裡面,相當於一個代理伺服器,當然可以配置多個。

下面我們仔細來分析一下:

listen:表示目前的代理伺服器監聽的端口,預設的是監聽80端口。注意,如果我們設定了多個server,這個listen要設定不一樣,不然就不能確定到哪裡去了。

server_name:表示監聽到之後需要轉到哪裡去,這時我們直接轉到本地,這時是直接到nginx資料夾內。

location:表示匹配的路徑,這時配置了/表示所有請求都被匹配到這裡

root:裡面配置了root這時表示當匹配這個請求的路徑時,將會在這個資料夾內尋找對應的文件,這裡對我們之後的靜態文件伺服很有用。

index:當沒有指定主頁時,預設會選擇這個指定的文件,它可以有多個,並按順序來加載,如果第一個不存在,則找第二個,依此類推。

下面的error_page是代表錯誤的頁面,這裡我們暫時不用,先不管它。

那我們知道了具體的配置了,怎麼讓它訪問localhost時轉到tomcat時。其實就修改兩個地方:

1 server_name localhost:8080;   
2   
3 location / {   
4     proxy_pass http://localhost:8080   
5 }

# 我們就修改了上面兩個地方,我的tomcat在8080端口,可以根據自己的需求修改。這裡有一個新元素proxy_pass,它表示代理路徑,相當於轉發,而不像之前說的root必須指定一個資料夾。

此時我們修改了文件,是不是就意思著必須先關了nginx再重新啟動了,其實不必,nginx可以重新載入文件的。

我們直接運行:

tomcat怎麼結合nginx使用

高興得太早了,我們發現有個錯誤:

tomcat怎麼結合nginx使用

什麼來的,45行發現錯誤,不希望在那一行找到},所以我們仔細找,發現我們加入的proxy_pass很奇怪,沒有;號結尾,這就是問題了,直接修改,然後再運行一下,發現沒錯誤,OK了。

如果不想直接加載,而只是想看看自己的設定檔有沒有問題,可以直接輸入:

tomcat怎麼結合nginx使用

這可以檢查設定檔中是否有錯。 下面我們所有的修改都假設我們修改完成後運行了nginx -s reload進行重新載入設定文件,請注意。

一切沒問題了,然後我們再重新開啟http://localhost,我們看到下面的頁面:

tomcat怎麼結合nginx使用

這時,我們發現它並不是剛才的welcome頁面了,而是tomcat的管理頁面了,不管我們點擊什麼連結都是沒問題的,相當於直接訪問http://localhost:8080一樣。

3)上面我們直接試了一個小例子,讓nginx進行轉發,也就是所謂的反向代理。但實際上我們的需求不會是這樣的,我們需要分文件類型來進行過濾,例如jsp直接給tomcat處理,因為nginx並不是servlet容器,沒辦法處理JSP,而html,js,css這些不需要處理的,直接給nginx快取。

下面我們來進行一下配置,讓JSP頁面直接給tomcat,而html,png等一些圖片和JS等直接給nginx進行快取。

這時最主要用的還是location這個元素,並且牽涉到一部分正規則,但不難:

1 location ~ \.jsp$ {   
2         proxy_pass http://localhost:8080;   
3 }   
4            
5 location ~ \.(html|js|css|png|gif)$ {   
6     root D:/software/developerTools/server/apache-tomcat-7.0.8/webapps/ROOT;   
7 }

我們先去掉之前配的location /,避免全部請求被攔截了。

然後我們再來看看http://localhost

tomcat怎麼結合nginx使用

# 當我們不指定jsp頁面的時候,它會出現找不到,因為,此時並沒有相應的location匹配,所以就會有404錯誤,這時就跳到了nginx自訂的error頁面去了。

而當我們用http://localhost/index.jsp去訪問時,我們看到了一個熟悉的頁面:tomcat怎麼結合nginx使用

而且圖片那些都顯示正常,因為圖片是png的,所以直接在tomcat/webapps/ROOT目錄下直接查找,當然,如果我們點擊Manager Application HOW-TO這個鏈接,我們發現:

                   tomcat怎麼結合nginx使用

# 它還是找不到,為什麼?因為這是html頁面,但它並不在ROOT目錄下,而是在docs目錄下,但當我們匹配html時,我們卻到ROOT目錄下去找,所以還是找不到這個頁面。

一般情況下,如果我們需要用nginx來進行靜態文件伺服,通常都會把所有靜態文件,html,htm,js,css等都放在同一個文件夾下,這樣就不會有tomcat這樣的情況了,因為tomcat下的是屬於不同的項目,這個我們就沒辦法了。

3)有些人會說,這些都只會找一台伺服器,但如果我們想在一台伺服器掛了的時候,自動去找另外一台,這怎麼辦?這實際上nginx都考慮到了。

這時,我們之前用的proxy_pass就有大用途了。

我們把之前的第一個例子,就是全部都代理的修改一下:

最後修改如下:

 1 upstream local_tomcat {   
 2     server localhost:8080;   
 3 }   
 4   
 5 server{   
 6         location / {   
 7            proxy_pass http://local_tomcat;   
 8         }   
 9         #......其他省略   
10 }

我們在server外面增加了一個upstream,而直接在proxy_pass裡面直接用http:// upstream的名稱來使用。

我们还是直接来http://localhost,还是和第一个一样的效果,所有链接都没问题,说明我们配置正确。

upstream中的server元素必须要注意,不能加http://,但proxy_pass中必须加。

我们刚才说可以在一个服务器挂了的情况下连到另外一个,那怎么弄呢?

其实很简单,在upstream中的local_tomcat中配置多一个server。比如我现在弄多一个jetty,端口在9999,所以我们配置如下:

1 upstream local_tomcat {   
2     server localhost:8080;   
3     server localhost:9999;   
4 }

此时,我们关闭tomcat,而只开jetty。我们来运行http://localhost看看效果:

tomcat怎麼結合nginx使用

我们看到它请求到了jetty的页面,但由于jetty的机制,这时没有显示jetty主页,这个我们先不管。但我们的在一个服务器挂的情况下自动使用另外一个的功能实现了。

但有时我们就不想它挂的时候访问另外一个,而只是希望一个服务器访问的机会比另外一个大,这个可以在server最后加上一个weight=数字来指定,数字越大,表明请求到的机会越大。

1 upstream local_tomcat {   
2     server localhost:8080 weight=1;   
3     server localhost:9999 weight=5;   
4 }

这时我们给了jetty一个更高的权值,让它更有机会访问到,实际上当我们刷新http://localhost访问的时候发现jetty访问机率大很多,tomcat几乎没机会访问,一般情况下,如果我们必须这样用,不要相关太大,以免一个服务器负载太大。

当然,server还有一些其他的元素,比如down表示暂时不用到该服务器等等。这些可以参考nginx的wiki。也许写了一大堆,有人会有问题,那nginx怎么关闭呢?这倒是个问题,其实直接运行nginx -s stop就可以关闭了。

以上是tomcat怎麼結合nginx使用的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:亿速云。如有侵權,請聯絡admin@php.cn刪除
nginx和apache:了解關鍵差異nginx和apache:了解關鍵差異Apr 26, 2025 am 12:01 AM

NGINX和Apache各有優劣,選擇應基於具體需求。 1.NGINX適合高並發場景,因其異步非阻塞架構。 2.Apache適用於需要復雜配置的低並發場景,因其模塊化設計。

NGINX單元:關鍵功能NGINX單元:關鍵功能Apr 25, 2025 am 12:17 AM

NGINXUnit是一個開源應用服務器,支持多種編程語言,提供動態配置、零停機更新和內置負載均衡等功能。 1.動態配置:無需重啟即可修改配置。 2.多語言支持:兼容Python、Go、Java、PHP等。 3.零停機更新:支持不中斷服務的應用更新。 4.內置負載均衡:可將請求分發到多個應用實例。

NGINX單元與其他應用程序服務器NGINX單元與其他應用程序服務器Apr 24, 2025 am 12:14 AM

NGINXUnit優於ApacheTomcat、Gunicorn和Node.js內置HTTP服務器,適用於多語言項目和動態配置需求。 1)支持多種編程語言,2)提供動態配置重載,3)內置負載均衡功能,適合需要高擴展性和可靠性的項目。

NGINX單元:架構及其工作原理NGINX單元:架構及其工作原理Apr 23, 2025 am 12:18 AM

NGINXUnit通過其模塊化架構和動態重配置功能提高了應用的性能和可管理性。 1)模塊化設計包括主控進程、路由器和應用進程,支持高效管理和擴展。 2)動態重配置允許在運行時無縫更新配置,適用於CI/CD環境。 3)多語言支持通過動態加載語言運行時實現,提升了開發靈活性。 4)高性能通過事件驅動模型和異步I/O實現,即使在高並發下也保持高效。 5)安全性通過隔離應用進程提高,減少應用間相互影響。

使用NGINX單元:部署和管理應用程序使用NGINX單元:部署和管理應用程序Apr 22, 2025 am 12:06 AM

NGINXUnit可用於部署和管理多種語言的應用。 1)安裝NGINXUnit。 2)配置它以運行不同類型的應用,如Python和PHP。 3)利用其動態配置功能進行應用管理。通過這些步驟,你可以高效地部署和管理應用,提升項目效率。

NGINX與Apache:Web服務器的比較分析NGINX與Apache:Web服務器的比較分析Apr 21, 2025 am 12:08 AM

NGINX更适合处理高并发连接,而Apache更适合需要复杂配置和模块扩展的场景。1.NGINX以高性能和低资源消耗著称,适合高并发。2.Apache以稳定性和丰富的模块扩展闻名,适合复杂配置需求。

NGINX單元的優勢:靈活性和性能NGINX單元的優勢:靈活性和性能Apr 20, 2025 am 12:07 AM

NGINXUnit通過其動態配置和高性能架構提升應用的靈活性和性能。 1.動態配置允許在不重啟服務器的情況下調整應用配置。 2.高性能體現在事件驅動和非阻塞架構以及多進程模型上,能夠高效處理並發連接和利用多核CPU。

NGINX與Apache:性能,可伸縮性和效率NGINX與Apache:性能,可伸縮性和效率Apr 19, 2025 am 12:05 AM

NGINX和Apache都是強大的Web服務器,各自在性能、可擴展性和效率上有獨特的優勢和不足。 1)NGINX在處理靜態內容和反向代理時表現出色,適合高並發場景。 2)Apache在處理動態內容時表現更好,適合需要豐富模塊支持的項目。選擇服務器應根據項目需求和場景來決定。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中