日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

玩轉Nginx

 貪挽懶月 2022-06-20 發(fā)布于廣東

本文內(nèi)容包括:

  • nginx配置實例之反向代理;

  • nginx配置實例之動靜分離;

  • nginx配置實例之負載均衡;

  • nginx配置實例之高可用;

  • nginx原理分析



nginx基本概念




1、nginx是什么:
nginx是一個高性能的服務器,占用內(nèi)存少,并發(fā)能力強。

2、反向代理:

  • 正向代理:眾所周知,我們不能直接訪問谷歌,因為有墻,要訪問我們就需要梯子,這個梯子就是正向代理。在我們?yōu)g覽器端需要配置正向代理服務器,然后讓代理服務器幫我們?nèi)ピL問谷歌,谷歌把內(nèi)容返回給代理服務器,代理服務器再把內(nèi)容返回到我們?yōu)g覽器。

  • 反向代理:通常我們自己擼代碼都是發(fā)布到tomcat上,然后直接在瀏覽器訪問tomcat,這個過程是沒有代理的。反向代理就是不直接訪問tomcat,而是在瀏覽器上訪問一個代理服務器,代理服務器再決定將請求轉發(fā)給哪一個tomcat。對外而言,客戶端根本不知道自己訪問的是代理服務器。

其實正向代理和反向代理就是代理的對象不同,正向是代理客戶端,反向是代理服務端。

3、負載均衡:
說負載均衡前先說說我們自己擼的代碼發(fā)布到tomcat然后通過瀏覽器訪問是怎么樣的一個過程。我們通過客戶端請求服務端,服務端跟數(shù)據(jù)庫交互,將數(shù)據(jù)返回服務端,服務端最后響應客戶端。這種方式適合系統(tǒng)業(yè)務復雜度較低,請求量不大的情況。如果并發(fā)請求特別多,服務器是頂不住的,就會由于服務器性能瓶頸出現(xiàn)問題。解決辦法就是一只湯姆貓拉不動了就多叫幾只貓。

負載均衡示意圖

4、動靜分離:
靜態(tài)資源是固定的不變的,比如js、css、jpg等,動態(tài)資源就是要與數(shù)據(jù)庫交互的,比如servlet、jsp之類的。未做動靜分離的時候,不管是動態(tài)資源還是靜態(tài)資源,我們都放到同一只湯姆貓上,這樣它負擔也挺大的;做了動靜分離,就是把動態(tài)資源放到湯姆貓上,靜態(tài)資源放到另外一臺服務器上,然后客戶端請求通過nginx,由nginx來決定是訪問動態(tài)服務器還是靜態(tài)服務器,這樣就降低了單臺服務器的壓力。



Nginx的安裝、常用命令和配置文件




1、安裝nginx:

  • 首先進入官網(wǎng)下載nginx。https:///

  • 安裝需要的編譯工具,包括pcre-devel、openssl-devel、gcczlib-devel。用 yum install make安裝即可。

  • 將nginx上傳到Linux中,解壓,然后進入到解壓縮目錄,執(zhí)行./configure,出現(xiàn)下圖才表示configure成功了。

    configure成功
  • 完事兒后再執(zhí)行 make&&make install,如下圖所示則安裝成功了。安裝完后在/usr/local目錄中,會有一個nginx目錄,啟動腳本在nginx/sbin中。

    安裝成功
  • 進入到/usr/local/nginx/sbin目錄中,執(zhí)行./nginx,就啟動了nginx,瀏覽器訪問你Linux機器的ip,出現(xiàn)下圖就表示啟動成功。如果訪問不了,注意防火墻是否開放了80端口。

    nginx啟動成功

2、nginx常用命令:
以下列舉的命令都是在/usr/local/nginx/sbin下執(zhí)行的。

  • ./nginx:啟動nginx

  • ./nginx -s stop:快速關閉nginx,可能不保存相關信息

  • ./nginx -s quit:平穩(wěn)關閉nginx,保存相關信息

  • ./nginx -s reload:重新加載配置文件

  • ./nginx -s reopen:重新打開日志文件

  • ./nginx -c filename:為nginx指定一個配置文件

  • ./nginx -t:檢查配置文件的配置是否有語法錯誤

  • ./nginx -v:查看nginx的版本

  • ./nginx -V:查看版本以及配置參數(shù)等

3、nginx的配置文件:
配置文件的位置:/usr/local/nginx/conf下的nginx.conf。配置文件分為三部分,全局塊、events塊和http塊。

配置文件
  • 從配置文件開始到events之間的叫全局塊,配置全局的一些指令。worker_processes 1表示nginx處理的并發(fā)數(shù)量,值越大,能處理的并發(fā)量就越多。

  • events塊主要是影響nginx服務器與用戶的網(wǎng)絡連接。worker_connections 1024表示支持的最大連接數(shù)。

  • http塊是配置最頻繁的部分,又包括http全局塊和server塊。http全局塊可配置的指令包括文件引入、mime-type定義、日志自定義、連接超時時間和單鏈接請求數(shù)上限等;server塊是最主要的配置部分,配置一些和主機相關的東西。



Nginx實現(xiàn)反向代理




1、最終效果:
在瀏覽器上輸入www.xixihaha.com,跳轉到tomcat的主頁面(所以要先安裝一個tomcat并啟動;或者也可以搞個springboot項目丟上去啟動)。因為用到了域名,所以要在windows的host文件中配置域名與虛擬機ip的映射(域名的工作原理就是先看host文件中有沒有映射,沒有就通過DNS服務器去解析域名)。

2、進行配置:
首先將server_name改成虛擬機的IP,然后在location那里設置代理的域名和端口,這樣就搞定了。

配置反向代理

3、代理多個端口:
上面是將www.xixihaha.com的請求轉發(fā)到8080端口了,現(xiàn)在像將www.xixihaha.com/xi的請求轉發(fā)到8081端口,www.xixihaha.com/ha的請求轉發(fā)到8082端口。

  • 首先在8081端口tomcat的webapp目錄下新建一閣文件夾名字為"xi",文件夾里面放一個xi.html;然后在8082端口omcat的webapp目錄下新建一個ha文件夾,在文件夾里面放一個ha.html。分別啟動這兩個tomcat。

  • 然后在server塊里面進行如下的配置:

server {
        listen       80;
        server_name  www.xixihaha.com;
        location ~ /xi/ {
            proxy_pass http://127.0.0.1:8081;
        }
        location ~ /ha/ {
            proxy_pass http://127.0.0.1:8082;
        }
    }

注意一個配置文件里可以寫多個server,這個server和剛才配置的轉發(fā)到tomcat歡迎頁的可以同時存在。這個server配置location的時候用的類似于正則表達式,~ /xi/就表示路徑中有xi的就轉發(fā)到8081端口。

~   包含該字符串就匹配,區(qū)分大小寫
~*  包含該字符串就匹配,不區(qū)分大小寫
=   完全相同才匹配
^~  匹配不包含正則的且匹配度最高的location
  • 最終效果圖:

    反向代理


Nginx實現(xiàn)負載均衡




1、準備工作:
上面說了負載均衡就是將多個請求分配給不同的服務器,減輕單一服務器的壓力。現(xiàn)在我們先在8081和8082的tomcat的webapp目錄下新建一個文件夾test,里面都放一個index.html(實際上這兩個index.html是完全一樣的,就是代表我們需要做負載均衡的項目,這里為了等下可以更好的看到效果,這兩個html可以做一些標記,比如8081的就標記一下8081)。

2、在nginx.conf中配置:

  • 在http塊中添加如下配置:

upstream myserver {
    server  192.168.0.103:8081;
    server  192.168.0.103:8082;
}
  • 然后將server塊中的server_name改成虛擬機的IP或者host中配置的域名(做反向代理的時候已經(jīng)改了)。

  • 在server塊的location中添加如下配置:

proxy_pass  http://myserver;

總體配置如下圖:

負載均衡配置

配置好以后,在瀏覽器訪問就會發(fā)現(xiàn),第一次訪問的是8081,第二次訪問的是8082,以此輪詢。如果你用谷歌瀏覽器訪問,發(fā)現(xiàn)并沒有輪詢,那是因為谷歌瀏覽器把index.html緩存下來了。f12之后再f1,然后將下圖中的勾上,然后開著調(diào)試窗口去訪問,就可以看到輪詢的效果了。

調(diào)試時不緩存

3、nginx負載均衡的算法:

  • 輪詢:nginx默認就是輪詢算法,就是不爭不搶,一人一次。上面演示的就是輪詢。

  • 權重:每臺服務器設置權重,權重越高的就會接收到越多的請求。配置如下:

upstream myserver {
    server  192.168.0.103:8081 weight=2;
    server  192.168.0.103:8082 down;
    server  192.168.0.103:8083 backup;
    server  192.168.0.103:8084 max_fails=3 fail_timeout=20s fail_time=10s;
}
# weight表示權重,默認是1,值越大,負責處理的請求就越多;
# down表示該臺服務器宕機了,不參與輪詢;
# backup表示該臺服務器是替補,當其他所有的都down或者忙的時候,它才會上場;
# max_fails=3 fail_timeout=20s fail_time=10s表示20秒內(nèi)有超過3個請求失敗了,就將該臺服務器停機10秒。
  • ip_hash算法:對用戶的ip進行hash取值,然后分配到固定的一臺服務器上(一樣可以加權)。這樣每個ip都會固定一臺服務器。配置方法如下:

upstream myserver {
    ip_hash;
    server  192.168.0.103:8081;
    server  192.168.0.103:8082;
}
  • least_conn:將請求轉發(fā)給連接數(shù)最少的服務器(一樣可以加權)。配置方法如下:

upstream myserver {
    least_conn;
    server  192.168.0.103:8081;
    server  192.168.0.103:8082;
}
  • url_hash:這是第三方策略,對url進行hash取值,每個url確定一臺服務器。配置方法:

upstream myserver {
    hash $request_uri
    server  192.168.0.103:8081;
    server  192.168.0.103:8082;
}
  • fair:這是第三方策略,服務器響應時間最短的優(yōu)先分配。配置方法:

upstream myserver {
    server  192.168.0.103:8081;
    server  192.168.0.103:8082;
    fair;
}


Nginx實現(xiàn)動靜分離




上面說了動靜分離就是將動態(tài)和靜態(tài)請求分離開來,靜態(tài)請求就請求靜態(tài)服務器,動態(tài)請求就去請求tomcat。

1、實現(xiàn)方式:

  • 將靜態(tài)資源放到靜態(tài)服務器單獨部署,動態(tài)資源放到動態(tài)服務器單獨部署(常用方式)。通過location指定不同后綴名實現(xiàn)不同的轉發(fā)。通過expires參數(shù)可以設置瀏覽器緩存過期時間。比如設置的值是3d,那么3天內(nèi)的請求,會比對請求的文件有沒有更新,如果沒有,那就直接從瀏覽器緩存返回,狀態(tài)碼為304;如果有變化再從服務器重新下載,狀態(tài)碼為200。

  • 將動靜態(tài)文件一起混合發(fā)布,再通過nginx來分開。

2、準備工作:
在linux上準備一些靜態(tài)資源,比如在/opt下新建一個目錄叫static,然后在static里面建兩個目錄,一個html,一個image,分別放入html文件(index.html)和image(timg.jpg)文件。

3、配置:
在server塊中進行如下配置:

listen       80;
server_name  www.xixihaha.com;    
location /html/ {
    root  /opt/static/;
    index index.html index.htm;
}
 location /image/ {
    root /opt/static/;
    # 自動列出目錄下的文件
    autoindex  on;
}

配置文件截圖如下:

動靜分離配置

要注意把location /html/location /image/放到location /的前面。
最后的訪問效果如下圖:

動靜分離效果圖


Nginx高可用




現(xiàn)在是所有請求先到nginx,然后通過nginx分發(fā)到不同的tomcat中。萬一這臺nginx宕機了,那就涼涼了,所以nginx需要配置高可用。

nginx高可用原理圖

如上圖,有兩個nginx,一個是主nginx,一個是備份nginx。它們倆對外提供一個虛擬IP,客戶端訪問的是虛擬IP。keepalived是一個軟件,它會監(jiān)視nginx,如果正常,那么訪問主nginx,主宕機了,那么就切換到備份nginx。
1、準備工作:

  • 在兩臺虛擬機上安裝nginx;

  • 在兩臺虛擬機上都安裝keepalived,直接執(zhí)行yum -y install keepalived即可安裝,安裝完成后在etc/keepalived目錄下有其配置文件keepalived.conf。

2、配置高可用:

  • 修改keepalived.conf,將里面的內(nèi)容全部刪掉,替換成下面的內(nèi)容:

#全局定義
global_defs {
     notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL 
}

#檢測nginx是否宕機的腳本配置
vrrp_script chk_http_port {
   script "/usr/local/src/nginx_check.sh" #腳本的路徑
   interval 2  #檢測腳本執(zhí)行時間間隔
   weight  2
}

#虛擬ip相關配置
vrrp_instance VI_1 {
    state MASTER #備份服務器上將此值改成BACKUP
    interface ens33 #centos7 執(zhí)行 ip addr查看網(wǎng)卡
    virtual_router_id 51 #主備機此值需相同
    priority 100 #主備機取不同的優(yōu)先級,主機大一些
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.0.105 #自定義一個虛擬IP
    }
}
  • 編寫檢測腳本nginx_check.sh,放到上面配置的路徑中去。腳本內(nèi)容如下:

#!/bin/bash
A=`ps -C nginx -no-header |wc -l`
if [ $A -eq 0 ];then
   /usr/local/nginx/sbin/nginx
   sleep 2
   if [ `ps -C nginx --no-header | wc -l` -eq 0 ];then
      killall keepalived
   fi
fi
  • 啟動兩臺服務器的nginx和keepalived。啟動keepalived的命令為systemctl start keepalived.service。

3、測試:

  • 先用配置的虛擬ip進行訪問。比如我兩臺虛擬機的ip分別是103和104,我配置的虛擬IP是105,那么直接在瀏覽器訪問105,可以成功訪問到nginx則配置成功。

  • 在主服務器上執(zhí)行ip addr命令,出現(xiàn)如下畫面,表示虛擬ip綁定成功:

    虛擬ip綁定成功
  • 把主服務器上的nginx和keepalived干掉,如果虛擬ip還可以正常訪問,那么說明配置成功。



Nginx原理分析




  • nginx啟動后,有兩個進程,一個master,管理員;一個worker,真正執(zhí)行任務的進程。其實一個master可以管理多個worker,當有請求進來了,master就告訴所有的worker,worker接到通知就開始爭搶。搶到了任務的worker再去執(zhí)行具體的操作。

  • 一個master多個worker的好處是,比如我們可以在不重啟nginx的情況下執(zhí)行nginx -s reload命令重新加載配置文件,這就是這樣設計的優(yōu)點之一,即利于進行熱部署操作;每個worker是獨立的進程,即使有worker掛掉了,也還有其他worker能正常工作;

  • 因為每個worker都可以將一個cpu的性能發(fā)揮到極致,所以worker的數(shù)量設置成cpu的核數(shù)相等最為合適。設置方法就是在nginx.conf中修改如下配置的數(shù)值即可:

worker_processes  1;
  • 發(fā)送一個請求,如果是請求靜態(tài),會占用兩個連接,一個請求到worker,另一個將靜態(tài)資源返回給客戶端;如果請求動態(tài)資源,那么就是4個,因為worker和tomcat之間還有兩個。

  • nginx.conf中的如下配置是表示一個worker支持的最大連接數(shù)。

worker_connections  1024;
  • worker的數(shù)量乘以每個worker支持的最大連接數(shù),再去除以2和4,得到的就是nginx支持的最大并發(fā)數(shù)的區(qū)間。




轉了嗎
贊了嗎
在看嗎

    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多