中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

如何搭建Nginx服務器做到負載均衡

發布時間:2021-08-30 11:23:08 來源:億速云 閱讀:135 作者:chen 欄目:服務器

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

1.什么是Nginx?

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

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

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

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

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

2.Nginx的安裝問題?

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

3.配置文件

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

總結

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

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

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

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

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

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

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) {    //用來記錄獲取的參數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程序,做相應的測試,將項目打成war包后上傳至Linux服務器,移動到tomcat/webapps中,tomcat進行熱部署  先測試當前的tomcat是否能正常運行,由于沒有做區別頁面,就直接看日志來判斷了。

如何搭建Nginx服務器做到負載均衡

如圖:以輪詢方式進行訪問8080和8081監聽的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>
   

到此,關于“如何搭建Nginx服務器做到負載均衡”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

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

AI

长汀县| 宣威市| 城市| 从化市| 太原市| 琼结县| 吉安县| 赤壁市| 铜梁县| 云霄县| 洛浦县| 澄江县| 开远市| 西平县| 怀远县| 乐陵市| 兴隆县| 恩平市| 白山市| 石棉县| 乳山市| 平利县| 鹤峰县| 长岭县| 邢台县| 卢湾区| 沁阳市| 阳朔县| 获嘉县| 珠海市| 榕江县| 台江县| 绥德县| 类乌齐县| 宜君县| 白银市| 锡林浩特市| 濮阳县| 磐安县| 溧水县| 汉阴县|