<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          一張小圖看盡 Nginx

          共 14892字,需瀏覽 30分鐘

           ·

          2022-06-27 01:13

          來(lái)源:https://www.yuque.com/molizhuzhu/thrgrk/rtslmc

          nginx安裝

          Nginx安裝完成,沒(méi)有sbin目錄

          cd進(jìn)入到nginx-1.18.0目錄內(nèi)執(zhí)行

          [root@centos7 nginx-1.18.0]# ./configure --prefix=/usr/local/nginx
          [root@centos7 nginx-1.18.0]# make
          [root@centos7 nginx-1.18.0]# make install

          ps:–prefix=path 定義一個(gè)目錄,存放服務(wù)器上的文件 ,也就是nginx的安裝目錄,默認(rèn)使用 /usr/local/nginx

          這步你會(huì)看到local目錄下有一個(gè)跟你安裝的nginx1.12.2同級(jí)的nginx目錄,里面就有sbin目錄了。

          基礎(chǔ)指令

          listen:該指令用于配置網(wǎng)絡(luò)監(jiān)聽(tīng)。

          listen *:80 | *:8080      #監(jiān)聽(tīng)所有80端口和8080端口
          listen  IP_address:port   #監(jiān)聽(tīng)指定的地址和端口號(hào)
          listen  IP_address        #監(jiān)聽(tīng)指定ip地址所有端口
          listen port               #監(jiān)聽(tīng)該端口的所有IP連接

          server_name:該指令用于虛擬主機(jī)的配置。

          a. 基于名稱的虛擬主機(jī)配置

          server_name   name ...;

          b. 基于 IP 地址的虛擬主機(jī)配置

          server_name 192.168.1.1

          location:該指令用于匹配 URL。

          location指令的作用是根據(jù)用戶請(qǐng)求的URI來(lái)執(zhí)行不同的應(yīng)用,也就是根據(jù)用戶請(qǐng)求的網(wǎng)站URL進(jìn)行匹配,匹配成功即進(jìn)行相關(guān)的操作。

          location的語(yǔ)法

          • =開(kāi)頭表示精確匹配

          • 如 A 中只匹配根目錄結(jié)尾的請(qǐng)求,后面不能帶任何字符串。

          • ^~ 開(kāi)頭表示uri以某個(gè)常規(guī)字符串開(kāi)頭,不是正則匹配

          • ~ 開(kāi)頭表示區(qū)分大小寫(xiě)的正則匹配;

          • ~* 開(kāi)頭表示不區(qū)分大小寫(xiě)的正則匹配

          • / 通用匹配, 如果沒(méi)有其它匹配,任何請(qǐng)求都會(huì)匹配到

          Location正則案例

          #精確匹配,/后面不能帶任何字符
          server {
                  listen       80;
                  server_name  www.itmayiedu.com;
                  #精確匹配,注解后面不能帶任何字符
                  location =/ {
                      proxy_pass http://127.0.0.1:8080;
                      index  index.html index.htm;
                  }
          }

           #匹配所有以/開(kāi)頭請(qǐng)求
          server {
                  listen       80;
                  server_name  www.itmayiedu.com;
                 #匹配所有以/開(kāi)頭請(qǐng)求 
                  location / {
                      proxy_pass http://127.0.0.1:8080;
                      index  index.html index.htm;
                  }
              }
          ###  以開(kāi)頭/itmayiedu_8080攔截  默認(rèn)開(kāi)啟不區(qū)分大小寫(xiě)
              server {
                  listen       80;
                  server_name  www.itmayiedu.com;
                  ###  以開(kāi)頭/itmayiedu_8080 最終跳轉(zhuǎn)到http://127.0.0.1:8080/;
                  location /itmayiedu_8080/ {
                      proxy_pass http://127.0.0.1:8080/;
                      index  index.html index.htm;
                  }
                  ###  以開(kāi)頭/itmayiedu_8080 最終跳轉(zhuǎn)到http://127.0.0.1:8081/;
                  location /itmayiedu_8081/ {
                      proxy_pass http://127.0.0.1:8081/;
                      index  index.html index.htm;
                  }
              }
          ### 開(kāi)頭區(qū)分大小寫(xiě)

          proxy_pass:該指令用于設(shè)置被代理服務(wù)器的地址??梢允侵鳈C(jī)名稱、IP地址加端口號(hào)的形式。

          語(yǔ)法結(jié)構(gòu)如下:

          proxy_pass URL;

          index:該指令用于設(shè)置網(wǎng)站的默認(rèn)首頁(yè)。

          域名重定向

          server
          {
              listen 80 ;
              server_name mxiaoqi.top aaa.com;
              if ( $host = mxiaoqi.top )
              #增加判斷條件,當(dāng)訪問(wèn)域名是mxiaoqi.top的時(shí)候
              {
                  rewrite /(.*)  http://aaa.com/$1 permanent;
                  #把mxiaoqi.top/后面的內(nèi)容重新寫(xiě)到aaa.com/后面如果后面有多段則使用$2、$3以此類推
                  #permanent是轉(zhuǎn)發(fā)狀態(tài)碼
              }
              index index.html index.htm index.php;
              root /data/wwwroot/mxiaoqi.top;
              }

          反向代理

          使用 nginx 反向代理 www.123.com 直接跳轉(zhuǎn)到127.0.0.1:8080

          server {
                   listen       80;
                   server_name  www.123.com;

                   location / {
                       proxy_pass http://127.0.0.1:8080;
                                    # 歡迎頁(yè)面,按照從左到右的順序查找頁(yè)面
                       index  index.html index.htm index.jsp;
                   }
               }

          監(jiān)聽(tīng)80端口,訪問(wèn)域名為www.123.com,不加端口號(hào)時(shí)默認(rèn)為80端口,故訪問(wèn)該域名時(shí)會(huì)跳轉(zhuǎn)到127.0.0.1:8080路徑上。

          限流配置

          漏桶算法與令牌桶算法區(qū)別:主要區(qū)別在于“漏桶算法”能夠強(qiáng)行限制數(shù)據(jù)的傳輸速率,

          而“令牌桶算法”在能夠限制數(shù)據(jù)的平均傳輸速率外,還允許某種程度的突發(fā)傳輸。在“令牌桶算法”中,只要令牌桶中存在令牌,那么就允許突發(fā)地傳輸數(shù)據(jù)直到達(dá)到用戶配置的門(mén)限,因此它適合于具有突發(fā)特性的流量。

          Nginx按請(qǐng)求速率限速模塊使用的是漏桶算法,即能夠強(qiáng)行保證請(qǐng)求的實(shí)時(shí)處理速度不會(huì)超過(guò)設(shè)置的閾值。

          • limit_req_zone 用來(lái)限制單位時(shí)間內(nèi)的請(qǐng)求數(shù),即速率限制,采用的漏桶算法 "leaky bucket"。

          • limit_req_conn 用來(lái)限制同一時(shí)間連接數(shù),即并發(fā)限制。

          limit_req_zone 參數(shù)配置

          Syntax:    limit_req zone=name [burst=number] [nodelay];
          Default:    —
          Context:    http, server, location

          limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;

          • 第一個(gè)參數(shù):$binary_remote_addr表示通過(guò)remote_addr這個(gè)標(biāo)識(shí)來(lái)做限制,“binary_”的目的是縮寫(xiě)內(nèi)存占用量,是限制同一客戶端ip地址。

          • 第二個(gè)參數(shù):zone=one:10m表示生成一個(gè)大小為10M,名字為one的內(nèi)存區(qū)域,用來(lái)存儲(chǔ)訪問(wèn)的頻次信息。

          • 第三個(gè)參數(shù):rate=1r/s表示允許相同標(biāo)識(shí)的客戶端的訪問(wèn)頻次,這里限制的是每秒1次,還可以有比如30r/m的。

          limit_req zone=one burst=5 nodelay;

          • 第一個(gè)參數(shù):zone=one 設(shè)置使用哪個(gè)配置區(qū)域來(lái)做限制,與上面limit_req_zone 里的name對(duì)應(yīng)。

          • 第二個(gè)參數(shù):burst=5,重點(diǎn)說(shuō)明一下這個(gè)配置,burst爆發(fā)的意思,這個(gè)配置的意思是設(shè)置一個(gè)大小為5的緩沖區(qū)當(dāng)有大量請(qǐng)求(爆發(fā))過(guò)來(lái)時(shí),超過(guò)了訪問(wèn)頻次限制的請(qǐng)求可以先放到這個(gè)緩沖區(qū)內(nèi)。

          • 第三個(gè)參數(shù):nodelay,如果設(shè)置,超過(guò)訪問(wèn)頻次而且緩沖區(qū)也滿了的時(shí)候就會(huì)直接返回503,如果沒(méi)有設(shè)置,則所有請(qǐng)求會(huì)等待排隊(duì)。

          ngx_http_limit_conn_module 參數(shù)配置

          這個(gè)模塊用來(lái)限制單個(gè)IP的請(qǐng)求數(shù)。并非所有的連接都被計(jì)數(shù)。只有在服務(wù)器處理了請(qǐng)求并且已經(jīng)讀取了整個(gè)請(qǐng)求頭時(shí),連接才被計(jì)數(shù)。

          Syntax:    limit_conn zone number;
          Default:    —
          Context:    http, server, location

          limit_conn_zone $binary_remote_addr zone=addr:10m;
          server {
              location /download/ {
                  limit_conn addr 1;
              }

          一次只允許每個(gè)IP地址一個(gè)連接。

          負(fù)載均衡

          #user  nobody;
          worker_processes  1;
          error_log  logs/error.log;# 開(kāi)啟日志
          pid        logs/nginx.pid;
          ...
              upstream lyf {
              server 192.168.37.220:8001# 3個(gè)tomcat服務(wù)
              server 192.168.37.220:8002;
              server 192.168.37.220:8003;
              }
              server {
                  listen       80;
                  server_name  192.168.37.220;# 監(jiān)聽(tīng)ip
                  location / {
                      proxy_pass   http://lyf;  # 設(shè)置代理
                      index  index.html index.htm;
                  }
          }

          keepalive 長(zhǎng)連接提高吞吐量
          keepalived :設(shè)置長(zhǎng)連接處理的數(shù)量
          proxy_http_version :設(shè)置長(zhǎng)連接http版本為1.1
          proxy_set_header :清除connection header 信息

          upstream tomcats { 
          # server 192.168.1.173:8080 max_fails=2 fail_timeout=1s; 
          server 192.168.1.190:8080
          # server 192.168.1.174:8080 weight=1; 
          # server 192.168.1.175:8080 weight=1; 
          keepalive 32
          }
          server {
          listen 80
          server_name www.tomcats.com; 
          location / { 
          proxy_pass http://tomcats; 
          proxy_http_version 1.1
          proxy_set_header Connection ""

          }

          工作方式

          輪詢方式是Nginx負(fù)載默認(rèn)的方式

          權(quán)重方式 指定每個(gè)服務(wù)的權(quán)重比例,weight和訪問(wèn)比率成正比

          upstream  dalaoyang-server {
                 server    localhost:10001 weight=1;
                 server    localhost:10002 weight=2;
          }

          iphash

          每個(gè)請(qǐng)求都根據(jù)訪問(wèn)ip的hash結(jié)果分配,經(jīng)過(guò)這樣的處理,每個(gè)訪客固定訪問(wèn)一個(gè)后端服務(wù),如下配置(ip_hash可以和weight配合使用)。

          upstream  dalaoyang-server {
                 ip_hash; 
                 server    localhost:10001 weight=1;
                 server    localhost:10002 weight=2;
          }

          最少連接

          將請(qǐng)求分配到連接數(shù)最少的服務(wù)上。

          upstream  dalaoyang-server {
                 least_conn;
                 server    localhost:10001 weight=1;
                 server    localhost:10002 weight=2;
          }

          fair

          按后端服務(wù)器的響應(yīng)時(shí)間來(lái)分配請(qǐng)求,響應(yīng)時(shí)間短的優(yōu)先分配。

          upstream  dalaoyang-server {
                 server    localhost:10001 weight=1;
                 server    localhost:10002 weight=2;
                 fair;  
          }

          Consul+upsync+Nginx  實(shí)現(xiàn)無(wú)需raload動(dòng)態(tài)負(fù)載均衡 https://www.cnblogs.com/a1304908180/p/10697278.html

          傳統(tǒng)的負(fù)載均衡,如果Upstream參數(shù)發(fā)生變化,每次都需要重新加載nginx.conf文件,

          因此擴(kuò)展性不是很高,所以我們可以采用動(dòng)態(tài)負(fù)載均衡,實(shí)現(xiàn)Upstream可配置化、動(dòng)態(tài)化,無(wú)需人工重新加載nginx.conf。

          LVS+Keepalived+Nginx+Tomcat搭建高可用雙機(jī)主從熱備集群

          https://blog.csdn.net/dsen726/article/details/89519013

          需要明確的是:

          • Nginx兩臺(tái)是主備關(guān)系,只有一臺(tái)在工作。后面的tomcat是集群,同時(shí)工作的。

          • keepalived是同時(shí)安裝在兩臺(tái)Nginx上的,不過(guò)文件配置不一樣

          • 這里的雙機(jī)熱備是指LVS,Nginx則是集群

          keepalived

          健康檢查和失敗切換是keepalived的兩大核心功能。所謂的健康檢查,就是采用tcp三次握手,icmp請(qǐng)求,http請(qǐng)求,udp echo請(qǐng)求等方式對(duì)負(fù)載均衡器后面的實(shí)際的服務(wù)器(通常是承載真實(shí)業(yè)務(wù)的服務(wù)器)進(jìn)行?;?;而失敗切換主要是應(yīng)用于配置了主備模式的負(fù)載均衡器,利用VRRP維持主備負(fù)載均衡器的心跳,當(dāng)主負(fù)載均衡器出現(xiàn)問(wèn)題時(shí),由備負(fù)載均衡器承載對(duì)應(yīng)的業(yè)務(wù),從而在最大限度上減少流量損失,并提供服務(wù)的穩(wěn)定性。

          LVS是Linux Virtual Server的簡(jiǎn)寫(xiě),意即Linux虛擬服務(wù)器,是一個(gè)虛擬的服務(wù)器集群系統(tǒng)。lvs目前是集成在Linux內(nèi)的。

          為什么要LVS+Nginx?

          一、ngix(應(yīng)用層 網(wǎng)絡(luò)七層負(fù)載均衡)

          1、異步轉(zhuǎn)發(fā),請(qǐng)求數(shù)據(jù)和相應(yīng)數(shù)據(jù)都要經(jīng)過(guò)ngix,ngix和客戶端建立連接

          2、輪詢所有的tomcat服務(wù)器,保證請(qǐng)求成功或者最后一臺(tái)tomcat服務(wù)器也請(qǐng)求失敗

          二、lvs(網(wǎng)絡(luò)層  網(wǎng)絡(luò)四層負(fù)載均衡)

          1、同步轉(zhuǎn)發(fā)接受請(qǐng)求數(shù)據(jù),lvs轉(zhuǎn)發(fā)到服務(wù)器,服務(wù)器直接和客戶端建立連接

          nginx要承受所有的流量,當(dāng)一臺(tái)nigx承受不了,就需要搭建ngix集群。ngix+ngix 外層的ngix還是要承受所有流量。

          lvs+ngix:lvs同步轉(zhuǎn)發(fā)不會(huì)接受相應(yīng)數(shù)據(jù),LVS采用DR模式時(shí)不用響應(yīng)服務(wù)器返回的內(nèi)容。(通常請(qǐng)求數(shù)據(jù)是比較小的,響應(yīng)數(shù)據(jù)會(huì)比較大)

          靜態(tài)資源配置

            location ~ .*\.(jpg|gif|png)$ {
                  gzip on;
                  gzip_http_version 1.1;
                  gzip_comp_level 2;
                  gzip_types text/plain application/javascript image/jpeg image/gif image/png;
                  root   /usr/share/nginx/images;
              }

              location ~ .*\.(txt|xml)$ {
                  gzip on;
                  gzip_http_version 1.1;
                  gzip_comp_level 1;
                  gzip_types text/plain application/javascript image/jpeg image/gif image/png;
                  root   /usr/share/nginx/code;
              }
            location ~ ^/download {
                  gzip_static on;
                  tcp_nopush on;
                  root /opt/app/code;
              }

          sendfile on | off,文件讀取配置

          默認(rèn)sendfile是關(guān)閉的,可以配置在http,server,location,if in location中

          tcp_nopush on | off,多個(gè)包整合

          默認(rèn)是關(guān)閉狀態(tài),可以在http,server,location中配置,它的作用是在sendfile開(kāi)啟的情況下,提高網(wǎng)絡(luò)包的傳輸效率。什么意思呢,假設(shè)服務(wù)端收到請(qǐng)求,需要推送10個(gè)包,為了提高傳輸效率,這10個(gè)包不會(huì)一個(gè)一個(gè)返回給客戶端,而是將10個(gè)包攢夠了后一起返回回去。

          tcp_nodelay on | off,網(wǎng)絡(luò)包的實(shí)時(shí)性傳輸

          默認(rèn)開(kāi)啟,可以在http,server,location中配置,它的作用是在keepalive鏈接下,提高網(wǎng)絡(luò)包的傳輸實(shí)時(shí)性。

          gzip on | off,壓縮

          默認(rèn)是關(guān)閉狀態(tài),可以在http,server,location,if in location中配置,作用是壓縮傳輸。一般來(lái)說(shuō)瀏覽器是可以對(duì)壓縮后的內(nèi)容進(jìn)行解壓的。

          gzip_comp_level level;壓縮級(jí)別

          默認(rèn)的壓縮級(jí)別是1,可以在http,server,location中配置,級(jí)別配置的越高,壓縮的越好,但是壓縮會(huì)耗費(fèi)服務(wù)端的計(jì)算資源,所以要控制好壓縮級(jí)別

          gzip_http_version 1.0 | 1.1,壓縮對(duì)http協(xié)議的支持

          默認(rèn)對(duì)HTTP/1.1協(xié)議的請(qǐng)求才會(huì)進(jìn)行g(shù)zip壓縮,可以配置在http,server,location中配置。當(dāng)用戶想要讀取一個(gè)1.html文件,首先會(huì)在目錄中找尋1.html.gz是否存在,所以這就導(dǎo)致了磁盤(pán)資源的浪費(fèi),必須要存儲(chǔ)兩份文件。

          ###靜態(tài)資源訪問(wèn)
              server {
                listen       80;
                server_name  static.itmayiedu.com;
                location /static/imgs {
                     root F:/;
                     index  index.html index.htm;
                 }
              }
             ###動(dòng)態(tài)資源訪問(wèn)
               server {
                listen       80;
                server_name  www.itmayiedu.com;

                location / {
                   proxy_pass http://127.0.0.1:8080;
                   index  index.html index.htm;
                 }
              }

          跨域配置

          跨域就是在原站點(diǎn)訪問(wèn)域名不同的其他站點(diǎn),同源策略會(huì)阻止一個(gè)域的javascript腳本和另外一個(gè)域的內(nèi)容進(jìn)行交互。所謂同源(即指在同一個(gè)域)就是兩個(gè)頁(yè)面具有相同的協(xié)議(protocol),主機(jī)(host)和端口號(hào)(port)。

          CORS 是跨域資源分享(Cross-Origin Resource Sharing)的縮寫(xiě)。它是 W3C 標(biāo)準(zhǔn),屬于跨源 AJAX 請(qǐng)求的根本解決方法。

          1、普通跨域請(qǐng)求:只需服務(wù)器端設(shè)置Access-Control-Allow-Origin

          2、帶cookie跨域請(qǐng)求:前后端都需要進(jìn)行設(shè)置

          #允許跨域請(qǐng)求的域,*代表所有
          add_header 'Access-Control-Allow-Origin' *;
          #允許帶上cookie請(qǐng)求 
          add_header 'Access-Control-Allow-Credentials' 'true'
          #允許請(qǐng)求的方法,比如 GET/POST/PUT/DELETE 
          add_header 'Access-Control-Allow-Methods' *; 
          #允許請(qǐng)求的header 
          add_header 'Access-Control-Allow-Headers' *;

          防盜鏈

          #對(duì)源站點(diǎn)驗(yàn)證
          valid_referers *.imooc.com
          #非法引入會(huì)進(jìn)入下方判斷 
          if ($invalid_referer) { return 404; }

          source: https://www.yuque.com/molizhuzhu/thrgrk/rtslmc

          瀏覽 44
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  亚洲高清视频在线看! | 秋霞一级视频 | 国内精品在线播放 | 日韩一级无码特黄AAA片 | 开心网五月天色 |