<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的一些高級使用技巧,建議收藏!

          共 7677字,需瀏覽 16分鐘

           ·

          2021-09-12 18:49

          點擊上方藍(lán)色字體,選擇“標(biāo)星公眾號”

          優(yōu)質(zhì)文章,第一時間送達(dá)

          1、概述

          之前介紹過Nginx的簡單使用,今天來聊聊Nginx的一些高級使用。

          2、使用Nginx解決跨域問題

          當(dāng)公司存在多個域名時,兩個不同的域名相互訪問就會存在跨域問題。

          或者在進(jìn)行前端開發(fā)時,通常前端代碼在本地啟動,而后端代碼會部署在一臺專用的后端開發(fā)服務(wù)器上,此時前端去調(diào)用后端接口時,就會出現(xiàn)跨域問題。

          解決跨域的方法有很多,今天來說一下如何使用Nginx來解決跨域問題。

          假設(shè)后端服務(wù)器,是使用Nginx作為對外統(tǒng)一入口的,在Nginx配置文件的server塊中增加如下配置:

          # 允許跨域請求的域名,*代表所有
          add_header 'Access-Control-Allow-Origin' *;
          # 允許帶上cookie請求
          add_header 'Access-Control-Allow-Credentials' 'true';
          # 允許請求的方法,例如:GET、POST、PUT、DELETE等,*代表所有
          add_header 'Access-Control-Allow-Methods' *;
          # 允許請求的頭信息,例如:DNT,X-Mx-ReqToken,Keep-Alive,User-Agent等,*代表所有
          add_header 'Access-Control-Allow-Headers' *;

           

           重新加載Nginx,便發(fā)現(xiàn),已經(jīng)可以跨域訪問了。

          3、驗證頭信息中的 referer 參數(shù)

           請求頭信息中的 referer 參數(shù),記錄了上一個頁面的地址,Nginx可以對其進(jìn)行校驗,達(dá)到防盜鏈的目的。

           通常在配置文件的location塊中增加配置。

          server {
                  listen       80;   # 端口
                  server_name  www.zhuifengren.cn;  # 服務(wù)名,可以是IP地址或者域名

                  location / {   # 根路徑
                root   html;  # 對應(yīng)nginx安裝目標(biāo)下的html文件夾
                      index  hello.html; # 指定首頁為 hello.html
                  }

                  location ~* \.(GIF|PNG|jpg|bmp|jpeg) {  # *代表不區(qū)分大小寫
                      # 校驗請求是否來自于zhuifengren.cn這個站點,不是則返回404頁面
                    valid_referers *.zhuifengren.cn;
                    if ($invalid_referer) {
                         return 404;
                    }
                 root /home/img;
              }

                  error_page   500 502 503 504  /50x.html;  # 指定這些狀態(tài)碼跳轉(zhuǎn)的錯誤頁
                  location = /50x.html {
                      root   html;
                  }

              }

           

          4、Nginx構(gòu)建Tomcat集群

          Nginx最常用的一個功能,就是為Tomcat構(gòu)建集群,以達(dá)到實現(xiàn)高并發(fā)、高可用的目的。

          首先在 upstream 塊中,配置Tomcat集群中的服務(wù)地址,然后在location塊中配置轉(zhuǎn)發(fā)請求到此 upstream。

          # 配置Tomcat集群中的服務(wù)器
              upstream zhuifengren {
                  server 192.168.1.101:8080;
                  server 192.168.1.102:8080;
                  server 192.168.1.103:8080;
              

              server {
                  listen  80;
                  server_name     www.zhuifengren.cn;

                  location / {
                          proxy_pass      http://zhuifengren;
                  }

              }

          默認(rèn)按所有機器權(quán)重為1的輪詢方式對集群服務(wù)進(jìn)行訪問,每個服務(wù)訪問1次,然后訪問下一個服務(wù),適合集群中每臺服務(wù)器性能差不多的情況。

           

          權(quán)重配置也是經(jīng)常用的,適用于機器性能有差異的情況。

          upstream zhuifengren {
            server 192.168.1.101:8080  weight=1;
            server 192.168.1.102:8080;
            server 192.168.1.103:8080  weight=3;
          }

          weight 就是權(quán)重配置,不配默認(rèn)是1,按照以上配置,在5次請求中,101和102會被訪問1次,103會被訪問3次。

           

          使用down,可以標(biāo)識某個服務(wù)已停用,Nginx便不會去訪問他了。

              upstream zhuifengren {
                  server 192.168.1.101:8080;
                  server 192.168.1.102:8080 down;
                  server 192.168.1.103:8080;
              }

          使用backup,可以標(biāo)識101是備用機,當(dāng)102、103宕機后,101會進(jìn)行服務(wù)。

            upstream zhuifengren {
                  server 192.168.1.101:8080 backup;
                  server 192.168.1.102:8080;
                  server 192.168.1.103:8080;
              }

          使用 max_fails 和 fail_timeout 將服務(wù)動態(tài)停用

          max_fails 默認(rèn)是1,fail_timeout默認(rèn)是10s

            upstream zhuifengren {
                  server 192.168.1.101:8080 max_fails=2 fail_timeout=10s;
                  server 192.168.1.102:8080;
                  server 192.168.1.103:8080;
              }

          如此配置,101服務(wù)器在10秒內(nèi)如果失敗次數(shù)達(dá)到2次,會停用10秒。10秒后,會嘗試連接101服務(wù)器,如果連接成功則恢復(fù)輪詢方式,如果不成功,再等待10秒嘗試。

           

          5、使用keepalive設(shè)置長鏈接數(shù)量,提高吞吐量

          upstream zhuifengren {
                  server 192.168.1.101:8080;
                  server 192.168.1.102:8080;
                  server 192.168.1.103:8080;
                  
                  keepalive 50;
              }

               server {
                  listen  80;
                  server_name     www.zhuifengren.cn;

                  location / {
                          proxy_pass      http://zhuifengren;
                          
                          proxy_http_version    1.1;
                          proxy_set_header    Connection "";
                  }

              }

          需要在upstream塊中增加 keepalive 配置,在server的location塊中增加 proxy_http_version 和 proxy_set_header 配置。

          這樣設(shè)置可以減少連接斷開、新建的損耗,增加吞吐量。

           

          6、其他負(fù)載均衡策略

          除了前面說到的輪詢方式,Nginx在負(fù)載均衡時,還有其他策略。

          ip_hash:以客戶端IP地址為依據(jù),匹配服務(wù)器。
          hash $request_uri:以請求的URL為依據(jù),匹配服務(wù)器。
          least_conn:以服務(wù)器連接數(shù)為依據(jù),哪個服務(wù)器連接數(shù)少,匹配哪臺服務(wù)器。

          配置在upstream塊中。

          upstream zhuifengren {
              
                  # ip_hash;
                  # hash $request_uri;
                  least_conn;
              
                  server 192.168.1.101:8080;
                  server 192.168.1.102:8080;
                  server 192.168.1.103:8080;

              }


          7、綜述

          今天介紹了一些Nginx的高級使用,希望大家多多溝通交流,共同成長。


            作者 |  追風(fēng)人聊Java

          來源 |  cnblogs.com/w84422/p/15226839.html


          加鋒哥微信: java1239  
          圍觀鋒哥朋友圈,天天推送Java干貨!

          瀏覽 76
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <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>
                  91精品久久电影 | 欧洲性爱视频在线观看 | 乱伦小说亚洲图片 | 男女啪啪国产免费网站 | 天天干女人在线视频免费观看 |