導航:首頁 > IDC知識 > nginxtomcat多域名

nginxtomcat多域名

發布時間:2021-01-06 19:38:21

1、nginx +tomcat 配置 多域名 指向多個tomcat 服務,實現數據共享,求詳解

?

2、怎麼配nginx修改訪問項目名,tomcat訪問地址http://localhost:8081/m5/,期望改成http://localhost:8888/m6

location ^~ /m6/ {
http://localhost:8888/m6
這樣的話nginx匹配不到/m6這個目錄,所以就404了,可以改成內location ^~ /m6 {
或者不改nginx配置直容接請求http://localhost:8888/m6/

3、Nginx+Tomcat可以配置單Tomcat多應用多域名嗎?

?

4、nginx+tomcat+redis 支持多大並發

不看設備不看機器,至少1w個請求同時訪問

在項目運營時,我們都會遇到一個問題,項目需要更新時,我們可能需先暫時關閉下伺服器來更新。但這可能會出現一些狀況:

1.用戶還在操作,被強迫終止了(我們可以看日誌等沒人操作的時候更新,但總可能會有萬一)

2.不知道的用戶可能會想網站是不是被攻擊了,降低了對網站的信任程度,從而導致失去部分潛在客戶,這點尤其對金融互聯網公司不利。

在查了一些資料後,決定採用Tomcat + Nginx + Redis來實現負載均衡和session共享。下面記錄下我的實踐過程,如有錯誤不足之處歡迎大神指點,不喜勿噴。

1.Nginx簡單介紹及開啟

Nginx是一款輕量級兼備高性能的Http和反向代理伺服器。所謂反向代理就是指在用戶發起訪問請求,由代理伺服器接收,然後將請求轉發給正式伺服器,並且將正式伺服器處理完的數據返回給客戶端,此時代理伺服器就表現為一個伺服器。這么做看起來多經過了一步,稍顯麻煩,但實則是好處多多,在下面的demo中我會將其體現出來。

首先我們去Nginx官網下載個Nginx,我這是在自己電腦上,所以當然下載的是windows版本的。下載完成後直接放在某個盤中即可,不需要安裝。接下去我們打開cmd,進入nginx的目錄下,輸入start nginx。

我們可以看到一個窗口一閃而過,這樣nginx就已經被開啟了,我們在任務管理器中可以找到它的進程。

現在我們在瀏覽器中輸入localhost。可以看到出現一個頁面,雖然簡陋了點,但這確確實實就是nginx的歡迎頁面,就類似tomcat剛啟動完成的locahost:8080的歡迎頁面。

2.使用Nginx實現反向代理

現在我們搭建一個基於SpringMVC +Spring + Mybaties框架的maven項目,搭建過程不加以贅述。功能很簡單,就是能跳轉到一個頁面就行了,當然也可以使用別的框架。

運行demo,我這tomcat埠是8080,在瀏覽器輸入localhost:8080,出現我們的頁面。

這時我們還是直接訪問tomcat伺服器的,現在我想通過nginx訪問tomcat,即輸入localhost就能顯示我們demo的頁面。

這就要我們去修改nginx的核心配置文件,在其目錄下的conf文件夾下的nginx.conf文件,那麼首先我們就要了解該文件中一些節點的作用。

worker_processes:工作進程個數,可配置多個

worker_connections:單個進程最大連接數

server:每一個server相當於一個代理伺服器

lister:監聽埠,默認80

server_name:當前服務的域名,可以有多個,用空格分隔(我們是本地所以是localhost)

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

index:當沒有指定主頁時,默認會選擇這個指定的文件,可多個,空格分隔

proxy_pass:請求轉向自定義的伺服器列表

upstream name{ }:伺服器集群名稱

知道了節點作用後,我們就知道我們需要修改的文件中的server部分,這是它原有的代碼,我刪除了它注釋部分。現在我們就能明白為什麼輸入localhost,

它訪問的是它歡迎頁面即index.html。

下面我們對這段代碼進行一些小小修改。就是將請求轉向我們定義的伺服器。

隨後在cmd中輸入命令nginx -s reload即可重啟nginx。

重啟後,我們再輸入localhost,可以看到跳轉到的頁面是我們demo的。

至此,反向代理已完成,這樣所有請求都需經過代理伺服器才能訪問到正式伺服器,某種程度上可以保護網站安全。

3.使用Nginx實現負載均衡

負載均衡即是代理伺服器將接收的請求均衡的分發到各伺服器中。

負載均衡的優勢在訪問量少或並發小的時候可能並不明顯,且不說淘寶雙11、鐵道部搶票這種級別的訪問量、高並發,就是一般網站的搶購活動時,也會給伺服器造成很大壓力,可能會造成伺服器崩潰。而負載均衡可以很明顯的減少甚至消除這種情況的出現,下面我們說說實現方法。

首先我們再開啟一個tomcat伺服器,這里區分一下就叫tomcat2吧,原先的叫tomcat1。將tomcat1上的項目,拷貝到tomcat2上,稍微修改下頁面上的文字以便等下區分我們的請求被分發到了哪個tomcat上。tomcat2埠我這里為8081。在瀏覽器中輸入localhost:8081。

伺服器准備好了,我們要在server外部定義個伺服器集群,即用到了上文中提到的upstream 標簽。伺服器集群名字取為test。

同時我們需要再修改下server,將定向的路徑轉到問你伺服器集群上。

重啟下nginx,在瀏覽器輸入localhost,再多刷新幾次,可以看到兩個頁面在來回切換。

這樣即實現了負債均衡。假設我們伺服器在運行過程中,其中一個tomcat掛了,仍然還有另一個可以訪問。更新的時候也能先關閉只其中一個,輪流更新。另外還能有效緩解伺服器壓力,是不是很棒呢?

當然,以上nginx的配置是簡單化的,實際上我們還可以配置nginx對靜態資源的緩存等等,在此就不多加演示了。

4.小結

花了好些時間,總算陸陸續續要寫好了,在此小結一下。

nginx作為一個反向代理伺服器,能緩存我們項目的靜態文件,並實現反向代理與均衡負載,可以有效減少伺服器壓力,即使項目不大,也可以使用。

大家另外應該都還發現了個問題,雖然這樣請求能分別請求到兩個tomcat上,如果是一般不需身份校檢的或什麼認證的方法尚可,但如果出現這類情況:

我們在tomcat1上進行了登錄,這時用戶session當然是存在tomcat1上的,而這時進入個人中心的請求請求到tomcat2上了,這時就會出現問題了。tomcat2會告訴你還未登錄,這顯然不是我們想看到的。

這就涉及到session共享了,如何讓兩個伺服器上的session共用。我這里放到下次再說,作為碼農比較忙,可能要過個好幾天。另外我將這次的demo源碼上傳了,下次還要用,nginx配置就不傳了,大家自己多動手試驗。

5、如果有多個站點,應在tomcat和nginx中分別設定虛擬主機,並進行整合

一、一個部署多個應用的方法:
在conf/server.xml配置文件中,有這樣的標簽:
<Host>
……
</Host>
默認只有一個
你復制一份兒,但host標簽必須在engine標簽之內。

#### Tomcat配置server.xml簡單說明 ###########
<Server>
<Service>
<Engine name="Catalina" defaultHost="localhost"> #這里可設置默認虛擬主機名
<Connector port="8080" maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
connectionTimeout="20000" disableUploadTimeout="true" />
#connector是全局的連接配置
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
<Alias>srt.com.cn</Alias> #別名設置
<Context path="" docBase="ROOT" debug="0"/>
<Context path="/orders" docBase="/home/ian/orders" debug="0"
reloadable="true" crossContext="true"></Context>
#多個Host標簽就是添加虛擬主機的
</Host>
</Engine>
</Service>
</Server>

6、使用nginx負載 多個tomcat 如何實現session共享?

如果是同域名,一般是借用sessionid(cookie)。
其實關鍵問題是session的數據保存的路徑問題,在版session里,可以設定權N個tomcat,設定session保存的介質相同就可以了。
最好,可以考濾用資料庫介質。

7、nginx 80埠反向代理多個域名,怎樣隱藏埠的

用httpd或者復nginx代理制以httpd舉例:httpd開啟ajp模塊DocumentRoot"/tomcat/webapps/ROOT"ServerAdmin*****@mail.comServerName*******.comProxyPass/ajp://localhost:8009/retry=6ProxyPassReverse/ajp://localhost:8009/DirectoryIndexindex.htmlindex.jspindex.htmindex.,denyAllowfromall

8、nginx把頂級域名和二級域名指向不同埠的tomcat

nginx這端的配置沒什麼問題,大括弧那個應該是你多貼出來了。如果你一個請求過來,在你的mywork.abc.com的nginx日誌中能看到日誌,就說明nginx這邊沒有問題。你應該去查看8090這個tomcat服務, 看看它有沒有做bind ip綁定,可能是這個原因。

9、nginx+tomcat實現域名映射問題

域名.com的配置
server {  
    listen       80;  
    server_name  *.a.com;  
    location / {  
        proxy_pass http://localhost:8080/projectA/;  
        proxy_set_header   Host    $host;  
        proxy_set_header   X-Real-IP   $remote_addr;  
        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;  
    }  
}  
域名b.com的配置
server {  
    listen       80;  
    server_name  *.b.com;  
    location / {  
        proxy_pass http://localhost:8080/projectB/;  
        proxy_set_header   Host    $host;  
        proxy_set_header   X-Real-IP   $remote_addr;  
        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;  
    }  
}

與nginxtomcat多域名相關的知識