Nginx配置Tomcat集群

Nginx

Nginx常用功能

  • Http代理,反向代理:作為web服務器最常用的功能之一搪缨,尤其是反向代理次氨。
Nginx反向代理說明圖

Nginx在做反向代理時,提供性能穩(wěn)定艾凯,并且能夠提供配置靈活的轉(zhuǎn)發(fā)功能献幔。Nginx可以根據(jù)不同的正則匹配,采取不同的轉(zhuǎn)發(fā)策略趾诗,比如圖片文件結(jié)尾的走文件服務器蜡感,動態(tài)頁面走web服務器蹬蚁,只要你正則寫的沒問題,又有相對應的服務器解決方案郑兴,你就可以隨心所欲的玩犀斋。并且Nginx對返回結(jié)果進行錯誤頁跳轉(zhuǎn),異常判斷等情连。如果被分發(fā)的服務器存在異常叽粹,他可以將請求重新轉(zhuǎn)發(fā)給另外一臺服務器,然后自動去除異常服務器却舀。

  • 負載均衡
負載均衡說明圖1
負載均衡說明圖2

Nginx提供的負載均衡策略有2種:內(nèi)置策略和擴展策略虫几。內(nèi)置策略為輪詢,加權輪詢挽拔,Ip hash辆脸。擴展策略,就天馬行空螃诅,只有你想不到的沒有他做不到的啦啡氢,你可以參照所有的負載均衡算法,給他一一找出來做下實現(xiàn)术裸。

Nginx配置文件結(jié)構(gòu)

看一下nginx的默認配置

user www-data;
worker_processes auto;
pid /run/nginx.pid;

events {
    worker_connections 768;
    # multi_accept on;
}

http {

    ##
    # Basic Settings
    ##

    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    keepalive_timeout 65;
    types_hash_max_size 2048;
    # server_tokens off;

    # server_names_hash_bucket_size 64;
    # server_name_in_redirect off;

    include /etc/nginx/mime.types;
    default_type application/octet-stream;

    ##
    # SSL Settings
    ##

    ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
    ssl_prefer_server_ciphers on;

    ##
    # Logging Settings
    ##

    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;

    ##
    # Gzip Settings
    ##

    gzip on;
    gzip_disable "msie6";

    # gzip_vary on;
    # gzip_proxied any;
    # gzip_comp_level 6;
    # gzip_buffers 16 8k;
    # gzip_http_version 1.1;
    # gzip_types text/plain text/css application/json application/javascript text/xml application/xml     application/xml+rss text/javascript;

    ##
    # Virtual Host Configs
    ##



    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;


}

嵌入其他配置文件

這個點是我一開始掉坑的地方倘是,因為需求來了直接上手看的nginx,但是一直在默認配置中找不到已經(jīng)上線的應用配置袭艺,最后才了解到include嵌入其他的配置文件了辨绊,最后根據(jù)嵌入文件的路徑成功地找到了引入的配置文件,正是我想要的

Nginx worker進程運行的用戶及用戶組

默認 user nobody nobody;
user用于設置master進程啟動之后匹表,fork出的worker進程運行在哪個用戶和用戶組下

Nginx worker進程個數(shù)

在master/worker運行方式下指定worker進程的個數(shù)
worker進程的數(shù)量會直接影響性能门坷,每個worker進程都是單線程的進程,它們會調(diào)用各模塊以實現(xiàn)多種多樣的功能袍镀,如果這些模塊確定不會出現(xiàn)阻塞時的調(diào)用默蚌,那么有多少CPU內(nèi)核就應該配置多少個進程;反之苇羡,如果可能存在多個可能阻塞的調(diào)用绸吸,則需要多為worker分配一些進程

  • 例如磁盤IO一直是后端服務的一個瓶頸,如果分配的worker進程都是在執(zhí)行阻塞式的IO服務设江,那么這個時候Nginx的效率可能會大大降低锦茁,這個時候就需要為Nginx多分配一點工作進程
  • 多worker進程可以充分利用多核的系統(tǒng)架構(gòu),但若worker進程的數(shù)量多于CPU內(nèi)核數(shù)的話叉存,這樣同樣會增大進程之間來回切換造成的消耗(Linux是搶占式內(nèi)核)码俩,一般情況下與內(nèi)核相等的worker進程,就可以綁定到CPU內(nèi)核上

虛擬主機與請求分發(fā)

由于IP地址數(shù)量有限歼捏,一次你經(jīng)常存在多個諸暨域名對應同一個IP地址情況稿存,這時在nginx.conf中就可以按照server_name(對應用戶請求中的主機域名)并通過server塊來定義虛擬主機笨篷,每個server塊就是個虛擬主機,他只處理與之相對應的主機域名請求

主機名稱

server_name后可以跟多個主機名稱瓣履,在開始處理一個HTTP請求時率翅,Nginx會取出header中的Host,與每個server中的server_name進行匹配袖迎,決定到哪個server塊來處理這個請求冕臭,匹配規(guī)則也是有優(yōu)先級的①首先選擇所有字符串都完全匹配的server_name②其次選擇通配符在前的③選擇通配符在后的④最后選擇正則表達式匹配的

location

location會嘗試根據(jù)用戶請求中的URI來匹配/uri表達式,如果可以匹配,就會選擇這個location塊中的配置來處理用戶請求

文件路徑的定義

以root方式設置資源路徑比如說一條HTPP請求是一條請求資源的請求燕锥,這個時候就可以使用server和location匹配到這一條資源請求辜贵,并且使用root指定這條資源請求的目錄,實現(xiàn)資源訪問脯宿,同樣實現(xiàn)資源文件的訪問還可以在location匹配到url請求之后使用alias,這兩者間的配置有一些小的差別

一個用戶如果通過一條HTTP請求需要訪問到/user/local/nginx/conf/nginx.conf文件可使用如下兩種配置

location /conf {
    alias /usr/local/nginx/conf/;
}
location /conf {
    root /usr/local/nginx/;
}

使用alias時泉粉,在URI向?qū)嶋H文件路徑的映射過程中连霉,已經(jīng)把location后的部分字符串丟棄掉了,因此嗡靡,/conf/nginx.conf請求將根據(jù)alias path映射為path/nginx.conf
root則不一樣跺撼,他會根據(jù)完整的URI請求進行映射,因此/conf/nginx.conf將會被映射未root path/conf/nginx.conf讨彼,這也是為什么root可以放置到http歉井、server、location中而alias只能存在于location中的原因

使用HTTP proxy module配置一個反向代理服務器

反向代理(reverse proxy)方式是指用代理服務器來接受Internet上的連接請求哈误,然后根據(jù)請求轉(zhuǎn)發(fā)給內(nèi)網(wǎng)中的上游服務器哩至,并將從上有服務器上得到的結(jié)果返回Internet上請求連接的客戶端,此時代理服務器對外的表現(xiàn)就是一個web服務器蜜自,充當反向代理服務器也是nginx的通常用法

一般來說如果nginx作為反向代理服務器菩貌,接收到的請求若是針對靜態(tài)文件,則直接通過nginx將請求映射到本地的靜態(tài)資源上重荠,如果需要動態(tài)的結(jié)果箭阶,即發(fā)出的是一條動態(tài)的請求,則需要繼續(xù)反向代理到真正的web服務器

當客戶端發(fā)來HTTP請求的時候戈鲁,Nginx并不會立刻轉(zhuǎn)發(fā)到上游服務器仇参,而是先把用戶的請求(包括HTTP包體)完整地接收到Nginx所在服務器的硬盤或者內(nèi)存中,然后再向上游服務器發(fā)起連接婆殿,把緩存的客戶端請求轉(zhuǎn)發(fā)到上游服務器诈乒,而其余的一些反向代理服務器采用的策略是邊接收客戶端的請求,邊進行轉(zhuǎn)發(fā)到上游服務器

Nginx這中工作方式存在一個明顯的缺點婆芦,很明顯抓谴,這種緩存策略相當于是延長了一個HTTP請求的時間暮蹂,并增加了用于緩存請求內(nèi)容的內(nèi)存和磁盤空間,而優(yōu)點是降低了上游服務器的負擔癌压,將負擔更多的放在了自己身上

但是Nginx的這個策略同時也大大提高了效率更降低了上游服務器的負擔仰泻,比如一個場景是一個客戶端想要上傳1G的文件,這個時候如果是別的一些反向代理服務器滩届,則在剛與客戶端建立連接還沒有開始接收包體的時候集侯,就開始向上游服務器進行發(fā)起連接,因為客戶端和反向代理服務器之間基本都是走外網(wǎng)帜消,這個時間加上自身網(wǎng)絡情況棠枉,上傳1G大小的文件通常是一個很耗時的操作,這個時候泡挺,這些反向代理服務器就要一直保持著和客戶端的關系辈讶,又要保持著和上游服務器的關系,這樣一個上傳文件操作就成了一個既耗時又耗資源的一個操作娄猫,而這個時候Nginx和客戶端建立連接之后完整地接收包體之后贱除,通過內(nèi)網(wǎng)與上游服務器之間建立連接,這個速度和資源損耗就遠遠小于其余一些反向代理服務器了

在介紹nginx反向代理之前媳溺,搭了一個小型的tomcat集群月幌,這樣的話就可以通過nginx做反向代理服務器,并且使用負載均衡策略悬蔽,向上游的兩臺服務器按照指定的權重策略進行分發(fā)請求

搭建Tomcat服務器集群

首先扯躺,熟悉基于J2EE規(guī)范以及使用Spring框架開發(fā)的開發(fā)者應該都接觸過Tomcat這種并發(fā)量適中的小型web應用服務器,可是蝎困,如果有一天录语,你的項目訪問量,甚至說并發(fā)量到達了一定的級別禾乘,你會如何處理這種情況钦无,原始的架構(gòu)只是單Tomcat服務器,但是這種結(jié)構(gòu)肯定不足以支撐對整個后端服務的運營盖袭,這個時候怎么辦失暂,首先要想到的就是在有限的一臺服務器上鼓搗一個Tomcat集群,讓多臺Tomcat同時工作鳄虱,并且使用nginx作為反向代理服務器弟塞,配置負載均衡策略,這樣去解決單臺Tomcat負擔過大訪問量的單臺服務器瓶頸

簡易搭建Tomcat集群

  • 首先需要確保自己的電腦或者服務器上有安裝過后的兩臺Tomcat服務器

    我為這兩臺服務器分別起名為main以及secoundary便于區(qū)分拙已,并且修改了webapps中ROOT文件夾下的圖標决记,這樣的話一會兒在測試的環(huán)節(jié)上就能區(qū)分出nginx分發(fā)請求到了哪一臺上游服務器

    解壓后的兩臺Tomcat服務器
  • 修改/etc/profile

    添加如下字段

    /etc/profile
  • 修改secondary中/bin/catalina.sh文件,注意這里不要修改main中的catalina.sh

    在OS結(jié)點下添加如下信息倍踪,使secondary開啟的時候使用/ect/profile中配置的第二條配置啟動

    修改catalina.sh
  • 修改secondary中conf/server.xml

    找到Server結(jié)點修改為系宫,main中Server結(jié)點端口為8005


    修改Server結(jié)點
  • 修改Connector結(jié)點索昂,并且為了防止亂碼增加URIEncoding屬性,main為8080默認端口

    修改Connector結(jié)點
  • 修改AJP端口

    修改AJP端口

    AJP Connector
    The AJP Connector element represents a Connector component that communicates with a web connector via the AJP protocol.
    AJP連接器可以通過AJP協(xié)議和一個web容器進行交互

    當你想讓Apache和Tomcat結(jié)合并且你想讓Apache處理靜態(tài)內(nèi)容的時候用AJP扩借,或者你想利用Apache的SSL處理能力時

    特殊于HTTP Connector椒惨,AJP還可以與engine元素上的jvmRoute結(jié)合使用來實現(xiàn)負載均衡功能

配置nginx.conf

修改nginx.conf
  • 簡單說一下這一段的配置

  • upstream結(jié)點

    upstream結(jié)點用來配置上游服務器ip以及端口,用于nginx轉(zhuǎn)發(fā)使用潮罪,在這里這個www.dzjissz.com域名是在本地hosts中配置指向127.0.0.1的域名康谆,所以就相當于指向本地服務器ip

  • server結(jié)點中的server_name

    簡單地來說,location塊需要結(jié)合server_name和location后的uri進行匹配嫉到,并且根據(jù)location塊中的proxy_pass配置確定轉(zhuǎn)發(fā)的upstream結(jié)點

  • 這一段nginx的配置主要就是當用戶通過www.dzjissz.com這個域名作為url訪問服務的時候沃暗,nginx匹配到了這個請求,并且向上游兩個開啟的8080和9080的tomcat服務器進行轉(zhuǎn)發(fā)何恶,因為沒有指定權重孽锥,所以兩臺服務器的權重weight默認都為1, 我們來看一下效果

main
secondary

可以看出當使用localhost訪問服務的時候,相當于www.dzjissz.com作為url進行請求细层,可以看到nginx將請求轉(zhuǎn)發(fā)到了兩臺開啟在不同端口的tomcat服務器惜辑。

到這里簡單的tomcat集群也就搭建完成了,修改完配置文件和環(huán)境變量文件記得使其生效今艺,否則等于啥都沒干

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末韵丑,一起剝皮案震驚了整個濱河市爵卒,隨后出現(xiàn)的幾起案子虚缎,更是在濱河造成了極大的恐慌,老刑警劉巖钓株,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件实牡,死亡現(xiàn)場離奇詭異,居然都是意外死亡轴合,警方通過查閱死者的電腦和手機创坞,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來受葛,“玉大人题涨,你說我怎么就攤上這事∽芴玻” “怎么了纲堵?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長闰渔。 經(jīng)常有香客問我席函,道長,這世上最難降的妖魔是什么冈涧? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任茂附,我火速辦了婚禮正蛙,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘营曼。我一直安慰自己乒验,他們只是感情好,可當我...
    茶點故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布溶推。 她就那樣靜靜地躺著徊件,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蒜危。 梳的紋絲不亂的頭發(fā)上虱痕,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天,我揣著相機與錄音辐赞,去河邊找鬼部翘。 笑死,一個胖子當著我的面吹牛响委,可吹牛的內(nèi)容都是我干的新思。 我是一名探鬼主播,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼赘风,長吁一口氣:“原來是場噩夢啊……” “哼夹囚!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起邀窃,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤荸哟,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后瞬捕,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體鞍历,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年肪虎,在試婚紗的時候發(fā)現(xiàn)自己被綠了劣砍。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡扇救,死狀恐怖刑枝,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情迅腔,我是刑警寧澤装畅,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站钾挟,受9級特大地震影響洁灵,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一徽千、第九天 我趴在偏房一處隱蔽的房頂上張望苫费。 院中可真熱鬧,春花似錦双抽、人聲如沸百框。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽铐维。三九已至,卻和暖如春慎菲,著一層夾襖步出監(jiān)牢的瞬間嫁蛇,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工露该, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留睬棚,地道東北人。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓解幼,卻偏偏與公主長得像抑党,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子撵摆,可洞房花燭夜當晚...
    茶點故事閱讀 42,786評論 2 345

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理底靠,服務發(fā)現(xiàn),斷路器特铝,智...
    卡卡羅2017閱讀 134,599評論 18 139
  • 第一章 Nginx簡介 Nginx是什么 沒有聽過Nginx暑中?那么一定聽過它的“同行”Apache吧!Ngi...
    JokerW閱讀 32,642評論 24 1,002
  • 上一篇《WEB請求處理一:瀏覽器請求發(fā)起處理》苟呐,我們講述了瀏覽器端請求發(fā)起過程痒芝,通過DNS域名解析服務器IP俐筋,并建...
    七寸知架構(gòu)閱讀 80,923評論 21 356
  • 1. Nginx的模塊與工作原理 Nginx由內(nèi)核和模塊組成牵素,其中,內(nèi)核的設計非常微小和簡潔澄者,完成的工作也非常簡單...
    rosekissyou閱讀 10,196評論 5 124
  • Page 1:nginx 服務器安裝及配置文件詳解 CentOS 6.2 x86_64 安裝 nginx 1.1 ...
    xiaojianxu閱讀 8,527評論 1 41