如何搭建Nginx服務(wù)器做到負(fù)載均衡

這篇文章主要介紹“如何搭建Nginx服務(wù)器做到負(fù)載均衡”,在日常操作中,相信很多人在如何搭建Nginx服務(wù)器做到負(fù)載均衡問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”如何搭建Nginx服務(wù)器做到負(fù)載均衡”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!

創(chuàng)新互聯(lián)建站提供網(wǎng)站建設(shè)、做網(wǎng)站、網(wǎng)頁(yè)設(shè)計(jì),成都品牌網(wǎng)站建設(shè),一元廣告等致力于企業(yè)網(wǎng)站建設(shè)與公司網(wǎng)站制作,十載的網(wǎng)站開(kāi)發(fā)和建站經(jīng)驗(yàn),助力企業(yè)信息化建設(shè),成功案例突破上1000+,是您實(shí)現(xiàn)網(wǎng)站建設(shè)的好選擇.

1.什么是Nginx?

Nginx也是一款服務(wù)器,我們常用它做:如反向代理、負(fù)載均衡、動(dòng)態(tài)與靜態(tài)資源的分離的工作。

反向代理:相對(duì)應(yīng)的是正向代理,如果你使用過(guò)代理服務(wù)器的話就明白,我們?cè)L問(wèn)某一個(gè)網(wǎng)站并非直接訪問(wèn)目標(biāo)網(wǎng)站,而是告訴代理服務(wù)器我需要訪問(wèn)什么目標(biāo)網(wǎng)站,由代理服務(wù)器發(fā)出請(qǐng)求給目標(biāo)網(wǎng)站,將目標(biāo)網(wǎng)站訪問(wèn)結(jié)果再轉(zhuǎn)發(fā)給你,此時(shí),你是請(qǐng)求代理方。而反向代理是此時(shí)代理服務(wù)器做服務(wù)器的代理,我們的訪問(wèn)請(qǐng)求并非直接訪問(wèn)到目標(biāo)服務(wù)器上,而是訪問(wèn)代理服務(wù)器,由代理服務(wù)器決定什么樣的請(qǐng)求以什么樣的方式訪問(wèn)正式服務(wù)器。

負(fù)載均衡:目前大多數(shù)的網(wǎng)站都會(huì)采用負(fù)載均衡手段來(lái)針對(duì)目前用戶的指數(shù)級(jí)增長(zhǎng)來(lái)減少對(duì)單點(diǎn)服務(wù)器的負(fù)載壓力,比如目前我們擁有3臺(tái)真實(shí)服務(wù)器,我們需要根據(jù)相應(yīng)策略決定什么樣的用戶請(qǐng)求分配到哪個(gè)真實(shí)服務(wù)器,比如按照輪詢的方式,用戶請(qǐng)求挨個(gè)到達(dá)代理服務(wù)器,此時(shí)代理服務(wù)器按照***個(gè)請(qǐng)求轉(zhuǎn)發(fā)至***臺(tái)真實(shí)服務(wù)器,第二個(gè)請(qǐng)求轉(zhuǎn)發(fā)到第二個(gè)服務(wù)器上,依次類(lèi)推,這樣可以防止大量的用戶請(qǐng)求全部訪問(wèn)到同一臺(tái)物理機(jī)上,單點(diǎn)物理機(jī)的性能始終有限的,當(dāng)然這可能對(duì)服務(wù)器數(shù)據(jù)訪問(wèn)時(shí)候造成事務(wù)性的失效,在Web方面可能造成Session訪問(wèn)的問(wèn)題,這不在本文討論方面內(nèi)。

動(dòng)態(tài)靜態(tài)資源分離:最方便列舉就是Java的JSP和靜態(tài)資源如:.js/.css/.html/.png方面的資源分離,之前開(kāi)發(fā)web方面的程序時(shí)候我們習(xí)慣將html、css等資源文件也放置于Tomcat之中,用戶訪問(wèn)后tomcat需要將請(qǐng)求的這些靜態(tài)資源文件一并返回給用戶,再者如果有多臺(tái)同業(yè)務(wù)邏輯的tomcat服務(wù)器的話,同樣的資源還需要在每個(gè)服務(wù)器上放一份,同時(shí)也增加了tomcat服務(wù)器的網(wǎng)絡(luò)IO,十分不合算的,如果我們只講JSP之類(lèi)的請(qǐng)求交給tomcat,而代理服務(wù)器上存放靜態(tài)資源,當(dāng)用戶的請(qǐng)求非動(dòng)態(tài)資源的時(shí)候,我們完全可以將代理服務(wù)器的靜態(tài)資源直接返回給用戶,而不去增大Tomcat的壓力,tomcat只需要負(fù)責(zé)邏輯處理和動(dòng)態(tài)資源的加載就可以了。

基于上述的Nginx優(yōu)勢(shì),決定搭建一下Nginx+Tomcat的組合來(lái)進(jìn)行測(cè)試,包括參數(shù)傳遞,post、get傳遞參數(shù)是否有影響,還有Nginx的工作模式master和worker的工作方式進(jìn)行一些淺薄的總結(jié)。如有錯(cuò)誤,懇請(qǐng)大家指出。

2.Nginx的安裝問(wèn)題?

安裝部分這里就不在細(xì)說(shuō)了,網(wǎng)上的教程很多,我們直接從配置文件開(kāi)始吧

3.配置文件

#user  nobody; #這里是核心worker數(shù),一般設(shè)置為與cpu核心數(shù)相同的數(shù)目,避免進(jìn)程切換造成的上下文切換耗費(fèi)資源,cpu信息可以從/proc/cpuinfo中查看 worker_processes  1;  #error_log  logs/error.log; #error_log  logs/error.log  notice; #error_log  logs/error.log  info; #pid      logs/nginx.pid; events {     #use epoll model使用epoll模型,采用異步非阻塞模型加快處理速度     use epoll;    worker_connections  1024; } http {    include       mime.types;    default_type  application/octet-stream;    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '    #                  '$status $body_bytes_sent "$http_referer" '    #                  '"$http_user_agent" "$http_x_forwarded_for"';    #access_log  logs/access.log  main;    #設(shè)定通過(guò)nginx上傳文件的大小    client_max_body_size 300m; #使用sendfile函數(shù)在兩個(gè)文件描述符之間直接傳遞數(shù)據(jù)(完全在內(nèi)核中操作,傳送),從而避免了內(nèi)核緩沖區(qū)數(shù)據(jù)和用戶緩沖區(qū)數(shù)據(jù)之間的拷貝,操作效率很高,被稱(chēng)之為零拷貝。    sendfile        on;    #tcp_nopush     on;    #keepalive_timeout  0;    #連接活躍時(shí)間    keepalive_timeout  65;#使用壓縮數(shù)據(jù)減少I(mǎi)O量,但是在不支持?jǐn)?shù)據(jù)解壓瀏覽器可能產(chǎn)生亂碼    #gzip  on;    #靜態(tài)服務(wù)器組    #設(shè)定靜態(tài)資源服務(wù)器訪問(wèn)接口      upstream static.zh-jieli.com {                  server localhost:808 weight=1;      }      #動(dòng)態(tài)服務(wù)器組      upstream zh-jieli.com {         #設(shè)置Hash輪詢規(guī)則 #ip_hash; #weight: server ip:port weight=10#默認(rèn) 輪詢# fair:按照后端服務(wù)器的響應(yīng)時(shí)間來(lái)分配 #url_hash:按照url規(guī)則進(jìn)行分配,使得固定的請(qǐng)求分配到固定的服務(wù)器上                  server localhost:8080;                  server localhost:8081;      }    server{         listen 808;         server_name static;         location / {         }   location ~ .*\.(js|css|ico|png|jpg|eot|svg|ttf|woff) {             #所有靜態(tài)文件直接讀取硬盤(pán)內(nèi)容:讀取的靜態(tài)資源存放位置  root /apache-tomcat-8.5.24/webapps/ROOT ;  #資源是否進(jìn)行緩存與緩存時(shí)間             expires 30d; #緩存30天         }     }     server {        listen       80;        server_name  localhost;                 #charset koi8-r;        #access_log  logs/host.access.log  main;        location / {            root   html;                       index  index1.html index.htm;        }        location ~ .*\.(js|css|ico|png|jpg|eot|svg|ttf|woff) {                  #proxy_cache cache_one;              proxy_cache_valid 200 304 302 5d;              proxy_cache_valid any 5d;              proxy_cache_key '$host:$server_port$request_uri';              add_header X-Cache '$upstream_cache_status from $host';              proxy_pass http://static.zh-jieli.com;             # 所有靜態(tài)文件直接讀取硬盤(pán)              root /apache-tomcat-8.5.24/webapps/ROOT;              expires 30d; #緩存30天          }           #其他頁(yè)面反向代理到tomcat容器          location ^~ /tomcat {                       index index;                   # proxy_pass http://localhost:8080/;             #設(shè)定代理服務(wù)器組              proxy_pass http://zh-jieli.com/;          }        error_page   500 502 503 504  /50x.html;        location = /50x.html {            root   html;        }    } }

總結(jié)

整個(gè)nginx工作時(shí)當(dāng)http請(qǐng)求到來(lái)時(shí),由nginx針對(duì)nginx.conf配置好的規(guī)則,對(duì)location進(jìn)行正則匹配,匹配到相應(yīng)的正則,進(jìn)行l(wèi)ocation內(nèi)部的處理  關(guān)于Nginx的location配置附上一篇博客,很nice  http://seanlook.com/2015/05/17/nginx-location-rewrite/

里面很詳細(xì)列出了各種要求的location匹配規(guī)則,

值得注意的一點(diǎn)是:  location匹配遵循最長(zhǎng)原則,即滿足了之前的匹配規(guī)則后,除了遇見(jiàn)^會(huì)終止向下繼續(xù)匹配,其他情況會(huì)依次向下搜索,知道找到合適的location匹配規(guī)則然后進(jìn)行處理  Nginx在模塊功能上分三個(gè)模塊:

Handlers(處理器模塊)。此類(lèi)模塊直接處理請(qǐng)求,并進(jìn)行輸出內(nèi)容和修改headers信息等操作。Handlers處理器模塊一般只能有一個(gè)。

Filters (過(guò)濾器模塊)。此類(lèi)模塊主要對(duì)其他處理器模塊輸出的內(nèi)容進(jìn)行修改操作,***由Nginx輸出。

Proxies (代理類(lèi)模塊)。此類(lèi)模塊是Nginx的HTTP  Upstream之類(lèi)的模塊,這些模塊主要與后端一些服務(wù)比如FastCGI等進(jìn)行交互,實(shí)現(xiàn)服務(wù)代理和負(fù)載均衡等功能。  因?yàn)槭菧y(cè)試,所以我的兩個(gè)tomcat都安裝到了同一臺(tái)本地機(jī)器上 生產(chǎn)環(huán)境中根據(jù)需要進(jìn)行配置相應(yīng)的IP就好了  本地寫(xiě)好相應(yīng)的測(cè)試代碼+log4j將信息日志打到相應(yīng)的位置用來(lái)觀察參數(shù)是否傳遞過(guò)來(lái)。

TestOne.java

package com.nginx.controllers; import com.nginx.utils.Log4jUtils; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; @Controller @RequestMapping("/test") public class TestOne {    @RequestMapping("/getname")    public void test(@RequestParam(value = "name") String name) {    //用來(lái)記錄獲取的參數(shù)name,可以通過(guò)查看日志進(jìn)行確認(rèn)        Log4jUtils.getLogger().info("my name is" + name);    } }

Log4jUtils.java

package com.nginx.utils; import org.apache.log4j.Logger; public class Log4jUtils {    private static final Logger logger = Logger.getLogger(Logger.class);    public static Logger getLogger() {        return logger;    } }

demo

這里簡(jiǎn)單做了兩個(gè)的demo程序,做相應(yīng)的測(cè)試,將項(xiàng)目打成war包后上傳至Linux服務(wù)器,移動(dòng)到tomcat/webapps中,tomcat進(jìn)行熱部署  先測(cè)試當(dāng)前的tomcat是否能正常運(yùn)行,由于沒(méi)有做區(qū)別頁(yè)面,就直接看日志來(lái)判斷了。

如何搭建Nginx服務(wù)器做到負(fù)載均衡

如圖:以輪詢方式進(jìn)行訪問(wèn)8080和8081監(jiān)聽(tīng)的tomcat 上述方式是get請(qǐng)求進(jìn)行的測(cè)試,我們來(lái)試試post。

<!DOCTYPE html> <html> <body> <form action="http://123.207.85.242/tomcat/nginx/test/getname" method="post">    <input type="text" name="name">    <input type="submit" value="提交"> </form> </body> </html>
   

到此,關(guān)于“如何搭建Nginx服務(wù)器做到負(fù)載均衡”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!

網(wǎng)站標(biāo)題:如何搭建Nginx服務(wù)器做到負(fù)載均衡
網(wǎng)站路徑:http://muchs.cn/article34/pdhise.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站改版靜態(tài)網(wǎng)站、網(wǎng)站導(dǎo)航品牌網(wǎng)站制作、虛擬主機(jī)、Google

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都做網(wǎng)站