溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

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

發(fā)布時間:2021-08-30 11:23:08 來源:億速云 閱讀:134 作者:chen 欄目:服務(wù)器

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

1.什么是Nginx?

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

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

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

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

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

2.Nginx的安裝問題?

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

3.配置文件

#user  nobody; #這里是核心worker數(shù),一般設(shè)置為與cpu核心數(shù)相同的數(shù)目,避免進程切換造成的上下文切換耗費資源,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è)定通過nginx上傳文件的大小    client_max_body_size 300m; #使用sendfile函數(shù)在兩個文件描述符之間直接傳遞數(shù)據(jù)(完全在內(nèi)核中操作,傳送),從而避免了內(nèi)核緩沖區(qū)數(shù)據(jù)和用戶緩沖區(qū)數(shù)據(jù)之間的拷貝,操作效率很高,被稱之為零拷貝。    sendfile        on;    #tcp_nopush     on;    #keepalive_timeout  0;    #連接活躍時間    keepalive_timeout  65;#使用壓縮數(shù)據(jù)減少IO量,但是在不支持數(shù)據(jù)解壓瀏覽器可能產(chǎn)生亂碼    #gzip  on;    #靜態(tài)服務(wù)器組    #設(shè)定靜態(tài)資源服務(wù)器訪問接口      upstream static.zh-jieli.com {                  server localhost:808 weight=1;      }      #動態(tài)服務(wù)器組      upstream zh-jieli.com {         #設(shè)置Hash輪詢規(guī)則 #ip_hash; #weight: server ip:port weight=10#默認 輪詢# fair:按照后端服務(wù)器的響應(yīng)時間來分配 #url_hash:按照url規(guī)則進行分配,使得固定的請求分配到固定的服務(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)文件直接讀取硬盤內(nèi)容:讀取的靜態(tài)資源存放位置  root /apache-tomcat-8.5.24/webapps/ROOT ;  #資源是否進行緩存與緩存時間             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)文件直接讀取硬盤              root /apache-tomcat-8.5.24/webapps/ROOT;              expires 30d; #緩存30天          }           #其他頁面反向代理到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é)

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

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

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

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

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

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

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) {    //用來記錄獲取的參數(shù)name,可以通過查看日志進行確認        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

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

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

如圖:以輪詢方式進行訪問8080和8081監(jiān)聽的tomcat 上述方式是get請求進行的測試,我們來試試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ù)器做到負載均衡”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注億速云網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI