首頁 運維 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脫衣器

Video Face Swap

Video Face Swap

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

熱工具

記事本++7.3.1

記事本++7.3.1

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

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

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

docker容器名稱怎麼查 docker容器名稱怎麼查 Apr 15, 2025 pm 12:21 PM

可以通過以下步驟查詢 Docker 容器名稱:列出所有容器(docker ps)。篩選容器列表(使用 grep 命令)。獲取容器名稱(位於 "NAMES" 列中)。

nginx在windows中怎麼配置 nginx在windows中怎麼配置 Apr 14, 2025 pm 12:57 PM

如何在 Windows 中配置 Nginx?安裝 Nginx 並創建虛擬主機配置。修改主配置文件並包含虛擬主機配置。啟動或重新加載 Nginx。測試配置並查看網站。選擇性啟用 SSL 並配置 SSL 證書。選擇性設置防火牆允許 80 和 443 端口流量。

nginx怎麼配置雲服務器域名 nginx怎麼配置雲服務器域名 Apr 14, 2025 pm 12:18 PM

在雲服務器上配置 Nginx 域名的方法:創建 A 記錄,指向雲服務器的公共 IP 地址。在 Nginx 配置文件中添加虛擬主機塊,指定偵聽端口、域名和網站根目錄。重啟 Nginx 以應用更改。訪問域名測試配置。其他注意事項:安裝 SSL 證書啟用 HTTPS、確保防火牆允許 80 端口流量、等待 DNS 解析生效。

怎麼查看nginx是否啟動 怎麼查看nginx是否啟動 Apr 14, 2025 pm 01:03 PM

確認 Nginx 是否啟動的方法:1. 使用命令行:systemctl status nginx(Linux/Unix)、netstat -ano | findstr 80(Windows);2. 檢查端口 80 是否開放;3. 查看系統日誌中 Nginx 啟動消息;4. 使用第三方工具,如 Nagios、Zabbix、Icinga。

nginx怎麼查版本 nginx怎麼查版本 Apr 14, 2025 am 11:57 AM

可以查詢 Nginx 版本的方法有:使用 nginx -v 命令;查看 nginx.conf 文件中的 version 指令;打開 Nginx 錯誤頁,查看頁面的標題。

docker怎麼創建容器 docker怎麼創建容器 Apr 15, 2025 pm 12:18 PM

在 Docker 中創建容器: 1. 拉取鏡像: docker pull [鏡像名] 2. 創建容器: docker run [選項] [鏡像名] [命令] 3. 啟動容器: docker start [容器名]

docker怎麼啟動容器 docker怎麼啟動容器 Apr 15, 2025 pm 12:27 PM

Docker 容器啟動步驟:拉取容器鏡像:運行 "docker pull [鏡像名稱]"。創建容器:使用 "docker create [選項] [鏡像名稱] [命令和參數]"。啟動容器:執行 "docker start [容器名稱或 ID]"。檢查容器狀態:通過 "docker ps" 驗證容器是否正在運行。

怎麼啟動nginx服務器 怎麼啟動nginx服務器 Apr 14, 2025 pm 12:27 PM

啟動 Nginx 服務器需要按照不同操作系統採取不同的步驟:Linux/Unix 系統:安裝 Nginx 軟件包(例如使用 apt-get 或 yum)。使用 systemctl 啟動 Nginx 服務(例如 sudo systemctl start nginx)。 Windows 系統:下載並安裝 Windows 二進製文件。使用 nginx.exe 可執行文件啟動 Nginx(例如 nginx.exe -c conf\nginx.conf)。無論使用哪種操作系統,您都可以通過訪問服務器 IP

See all articles