首頁 運維 Nginx Nginx怎麼為Tomcat伺服器作反向代理

Nginx怎麼為Tomcat伺服器作反向代理

May 21, 2023 pm 07:01 PM
nginx tomcat

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:如下:

Nginx怎麼為Tomcat伺服器作反向代理

然後,我們直接start nginx,這裡也許你會看到一個視窗一閃而過,根據我們使用tomcat的經驗,如果一閃而過,證明有錯了,對吧?但實際上不是。

Nginx怎麼為Tomcat伺服器作反向代理

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

Nginx怎麼為Tomcat伺服器作反向代理

現在,我們已經啟動了nginx,這時就可以啟動tomcat,想著直接訪問http://localhost就可以直接存取tomcat了。先不急,我們來看看啟動後的nginx是怎麼樣的。直接訪問http://localhost可以看到:

Nginx怎麼為Tomcat伺服器作反向代理

我們可以看到nginx啟動成功,現在存取是直接進入nginx的目錄裡面了。那麼這些實際上是在哪裡配置的。這就牽涉到nginx的一個重要設定檔nginx.conf了。
2)我們可以看到nginx資料夾內有一個conf資料夾,其中有好幾個文件,其他先不管,我們打開nginx.conf,可以看到一段:

Nginx怎麼為Tomcat伺服器作反向代理

這段程式碼在server裡面,相當於一個代理伺服器,當然可以配置多個。下面我們仔細來分析一下:listen:表示目前的代理伺服器監聽的端口,預設的是監聽80端口。注意,如果我們設定了多個server,這個listen要設定不一樣,不然就不能確定到哪裡去了。 server_name:表示監聽到之後需要轉到哪裡去,這時我們直接轉到本地,這時是直接到nginx資料夾內。 location:表示匹配的路徑,這時配置了/表示所有請求都被匹配到這裡root:裡面配置了root這時表示當匹配這個請求的路徑時,將會在這個資料夾內尋找相應的文件,這裡對我們之後的靜態文件伺服很有用。 index:當沒有指定主頁時,預設會選擇這個指定的文件,它可以有多個,並按順序來加載,如果第一個不存在,則找第二個,依此類推。下面的error_page是代表錯誤的頁面,這裡我們暫時不用,先不管它。
那我們知道了具體的設定了,怎麼讓它存取localhost時轉到tomcat時。實際上就修改兩個地方:

server_name localhost:8080;  
location / {  proxy_pass http://localhost:8080}
登入後複製

我們就修改了上面兩個地方,我的tomcat在8080端口,可以根據自己的需要修改。這裡有一個新元素proxy_pass,它表示代理路徑,相當於轉發,而不像之前說的root必須指定一個資料夾。此時我們修改了文件,是不是就意思著必須先關了nginx再重新啟動了,其實不必,nginx可以重新載入文件的。我們直接跑:nginx -s reload  
高興得太早了,我們發現有一個錯誤:

Nginx怎麼為Tomcat伺服器作反向代理

什麼來的,45行發現錯誤,不希望在那一行找到},於是我們仔細找,發現我們加入的proxy_pass很奇怪,沒有;號結尾,這就是問題了,直接修改,然後再運行一下,發現沒錯誤,ok了。如果不想直接加載,而只是想看看自己的設定檔有沒有問題,可以直接輸入:nginx -t 
這可以檢查設定檔中是否有錯。下面我們所有的修改都假設我們修改完成後運行了nginx -s reload進行重新加載配置文件,請注意。
一切沒問題了,然後我們再重新開啟http://localhost,我們看到下面的頁面:

Nginx怎麼為Tomcat伺服器作反向代理

#

这时,我们发现它并不是刚才的welcome页面了,而是tomcat的管理页面了,不管我们点击什么链接都是没问题的,相当于直接访问http://localhost:8080一样。
3)上面我们直接试了一个小例子,让nginx进行转发,即所谓的反向代理。但实际上我们的需求不会是这样的,我们需要分文件类型来进行过滤,比如jsp直接给tomcat处理,因为nginx并不是servlet容器,没办法处理jsp,而html,js,css这些不需要处理的,直接给nginx进行缓存。下面我们来进行一下配置,让jsp页面直接给tomcat,而html,png等一些图片和js等直接给nginx进行缓存。这时最主要用的还是location这个元素,并且涉及到一部分正则,但不难:

location ~ .jsp$ {    proxy_pass http://localhost:8080;}  
location ~ .(html|js|css|png|gif)$ {  root d:/software/developertools/server/apache-tomcat-7.0.8/webapps/root;} 
location ~ .jsp$ {    proxy_pass http://localhost:8080;} 
location ~ .(html|js|css|png|gif)$ {  root d:/software/developertools/server/apache-tomcat-7.0.8/webapps/root;}
登入後複製

我们先要去掉之前配的location /,避免全部请求被拦截了。然后我们再来看看http://localhost

Nginx怎麼為Tomcat伺服器作反向代理

当我们不指定jsp页面的时候,它会出现找不到,因为,此时并没有相应的location匹配,所以就会有404错误,这时就跳到了nginx自定义的error页面去了。而当我们用http://localhost/index.jsp去访问时,我们看到了熟悉的页面:

Nginx怎麼為Tomcat伺服器作反向代理

而且图片那些都显示正常,因为图片是png的,所以直接在tomcat/webapps/root目录下直接查找,当然,如果我们点击manager application how-to这个链接,我们发现:

Nginx怎麼為Tomcat伺服器作反向代理

它还是找不到,为什么呢?因为这是个html页面,但它并不在root目录下,而是在docs目录下,但当我们匹配html时,我们却到root目录下去找,所以还是找不到这个页面。
一般情况下,如果我们需要用nginx来进行静态文件伺服,一般都会把所有静态文件,html,htm,js,css等都放在同一个文件夹下,这样就不会有tomcat这样的情况了,因为tomcat下的是属于不同的项目,这个我们就没办法了。
3)有些人会说,这些都只会找一台服务器,但如果我们想在一台服务器挂了的时候,自动去找另外一台,这怎么办?这实际上nginx都考虑到了。这时,我们之前用的proxy_pass就有大用途了。我们把之前的第一个例子,即全部都代理的修改一下:最后修改如下:

upstream local_tomcat {  server localhost:8080;}  
server{    location / {      proxy_pass http://local_tomcat;    }  
  ##......其他省略
}  
upstream local_tomcat {  server localhost:8080;} 
server{    location / {      proxy_pass http://local_tomcat;    } 
  #......其他省略
}
登入後複製

我们在server外添加了一个upstream,而直接在proxy_pass里面直接用http://+upstream的名称来使用。我们还是直接来http://localhost,还是和第一个一样的效果,所有链接都没问题,说明我们配置正确。upstream中的server元素必须要注意,不能加http://,但proxy_pass中必须加。我们刚才说可以在一个服务器挂了的情况下连到另外一个,那怎么弄呢?其实很简单,在upstream中的local_tomcat中配置多一个server。比如我现在弄多一个jetty,端口在9999,所以我们配置如下:

upstream local_tomcat {  server localhost:8080;  server localhost:9999;}  
upstream local_tomcat {  server localhost:8080;  server localhost:9999;}
登入後複製

此时,我们关闭tomcat,而只开jetty。我们来运行http://localhost看看效果: 我们看到它请求到了jetty的页面,但由于jetty的机制,这时没有显示jetty主页,这个我们先不管。但我们的在一个服务器挂的情况下自动使用另外一个的功能实现了。
但有时我们就不想它挂的时候访问另外一个,而只是希望一个服务器访问的机会比另外一个大,这个可以在server最后加上一个weight=数字来指定,数字越大,表明请求到的机会越大。

upstream local_tomcat {  server localhost:8080 weight=1;  server localhost:9999 weight=5;}  
upstream local_tomcat {  server localhost:8080 weight=1;  server localhost:9999 weight=5;}
登入後複製

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

以上是Nginx怎麼為Tomcat伺服器作反向代理的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前 By 尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

tomcat怎麼部署多個項目 tomcat怎麼部署多個項目 Apr 21, 2024 am 09:33 AM

tomcat怎麼部署多個項目

tomcat安裝目錄在哪裡 tomcat安裝目錄在哪裡 Apr 21, 2024 am 07:48 AM

tomcat安裝目錄在哪裡

tomcat網站根目錄在哪裡 tomcat網站根目錄在哪裡 Apr 21, 2024 am 09:27 AM

tomcat網站根目錄在哪裡

tomcat並發連線數怎麼查看 tomcat並發連線數怎麼查看 Apr 21, 2024 am 08:12 AM

tomcat並發連線數怎麼查看

tomcat的連接埠號碼怎麼看 tomcat的連接埠號碼怎麼看 Apr 21, 2024 am 08:00 AM

tomcat的連接埠號碼怎麼看

tomcat怎麼運行兩個不同連接埠號碼的項目 tomcat怎麼運行兩個不同連接埠號碼的項目 Apr 21, 2024 am 09:00 AM

tomcat怎麼運行兩個不同連接埠號碼的項目

html檔案怎麼產生網址 html檔案怎麼產生網址 Apr 21, 2024 pm 12:57 PM

html檔案怎麼產生網址

tomcat出現亂碼的原因 tomcat出現亂碼的原因 Apr 21, 2024 am 10:18 AM

tomcat出現亂碼的原因

See all articles