[部署01] Nginx

woow_wu7發表於2020-03-17

導航

[深入01] 執行上下文
[深入02] 原型鏈
[深入03] 繼承
[深入04] 事件迴圈
[深入05] 柯里化 偏函式 函式記憶
[深入06] 隱式轉換 和 運算子
[深入07] 瀏覽器快取機制(http快取機制)
[深入08] 前端安全
[深入09] 深淺拷貝
[深入10] Debounce Throttle
[深入11] 前端路由
[深入12] 前端模組化
[深入13] 觀察者模式 釋出訂閱模式 雙向資料繫結
[深入14] canvas
[深入15] webSocket
[深入16] webpack
[深入17] http 和 https
[深入18] CSS-interview
[react] Hooks

[部署01] Nginx
[部署02] Docker 部署vue專案
[部署03] gitlab-CI

前置知識

一些單詞

Legacy:遺產,歷史
( Legacy versions 歷史版本 )

Stable:穩定的
( Stable versions 穩定版本 )
複製程式碼

正向代理 ----------- 代理客戶端

  • ( 正向代理 ) 是位於 ( 客戶端 ) 和 ( 源伺服器 ) 之間的 ( 伺服器 )
  • 客服端請求 -> 代理伺服器 -> 源伺服器
  • 隱藏客戶端:由代理伺服器代替客戶端去訪問目標伺服器,使用者需要設定代理伺服器的IP和埠

正向代理的作用

  1. 翻牆:繞過無法訪問的結點,從另外一條路由路徑進行目標伺服器的訪問;
    • a無法訪問到國外的b,通過國外的c,a訪問c,c轉發訪問b
  2. 快取:將資料快取在代理伺服器上,如果客戶端請求的內容在快取中則不去訪問目標主機
  3. 許可權控制:防火牆授權代理伺服器訪問許可權,客戶端通過正向代理可以通過防火牆
  4. 隱藏客戶端:通過正向代理配置,目標伺服器無法獲取真實客戶端資訊,只能獲取到代理伺服器的資訊

反向代理 ----------- 代理服務端

  • 隱藏服務端身份:也是中間伺服器,隱藏服務端身份,對於客服端會認為反響代理伺服器就是訪問的目標伺服器

反向代理的作用

  • 隱藏服務端:出於安全的考慮,我們不想把 Server 直接暴露出來,而是放在內網中。這時 Client 在外網無法就無法 Server 了。因此,我們就可以新增一臺中間伺服器,連線內外網,這樣就可以允許外網使用者訪問,同時可作為防火牆對外部請求進行限制,提高內部伺服器的安全性。
  • 負載均衡:根據目標伺服器的工作負荷情況,將請求分發到合適的伺服器。

[部署01] Nginx
[部署01] Nginx

[部署01] Nginx

Nginx

下載安裝

nginx下載地址

  • stable version 是穩定版本
  • lagacy version 是歷史版本
  • 下載完成,解壓,點選nginx.exe則安裝成功

nginx命令列

start nginx 開機

nginx -s signal ------------------- 呼叫可執行檔案來執行
nginx -s stop:快速關閉,可能不儲存相關資訊,並關閉web服務
nginx -s quit:正常關閉,儲存相關資訊,並關閉web服務
nginx -s reload:重新載入配置檔案,例如改變了配置
nginx -s reopen:重新開啟日誌檔案

nginx -c filename:為nginx指定一個配置檔案,來代替卻省的
nginx -t:不執行,而是僅僅測試配置檔案,檢查配置檔案語法的正確性,並嘗試開啟配置檔案中引用的檔案
nginx -v:顯示nginx的版本
nginx -V:顯示nginx的版本,編譯器版本,配置引數
複製程式碼
注意事項

(1)
taskkill /fi "imagename eq nginx.EXE" /f -------------------- 可以在windows下關閉所有nginx程式

(2)
.\nginx.ext -s stop ----------------------------------------- 在windows下使用命令需要加 .\
複製程式碼

nginx.config 檔案

  • main:ngnix的全域性配置,對全域性生效
    • events:配置影響nginx伺服器或與使用者的網路連線
    • http:可以巢狀多個server,配置代理,快取,日誌定義等絕大多數功能和第三方模組的配置。
      • upstream:配置後端伺服器具體地址,負載均衡配置不可或缺的部分。
      • server:配置虛擬主機的相關引數,一個http中可以有多個server。
        • listen:埠號
        • server_name:主機名
        • location:配置請求的路由,以及各種頁面的處理情況。
          • root
          • index
          • proxy_pass

#user  nobody;
#user  name name; ------------------------------------------------- 定義Nginx執行的使用者和使用者組

worker_processes  1;
#worker_process: 1; ----------------------------------------------- nginx程式數,通常設定成和cpu的數量相等


#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;
#-------------------------------------- 全域性錯誤日誌定義型別,[debug | info | notice | warn | error | crit]

#pid        logs/nginx.pid;
#-------------------------------------- 程式pid檔案

events {
    worker_connections  1024;
    #單個程式最大連線數( 最大連線數 = 連線數 * 程式數 )
    #單個程式最大連線數( 最大連線數 = worker_connections * worker_processes )
    #根據硬體調整,和前面工作程式配合起來用,儘量大,但是別把cup跑到100%就行。
    
    keepalive_timeout 60;
    #connection: keepalive ------------ 超時時間;http1.1中引入了建立長連線
}

#設定http伺服器,利用它的反向代理功能提供負載均衡支援
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;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   html;
            index  index.html index.htm;
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #location ~ \.php$ {
        #    root           html;
        #    fastcgi_pass   127.0.0.1:9000;
        #    fastcgi_index  index.php;
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        #    include        fastcgi_params;
        #}

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
    }


    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server {
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}


    # HTTPS server
    #
    #server {
    #    listen       443 ssl;
    #    server_name  localhost;

    #    ssl_certificate      cert.pem;
    #    ssl_certificate_key  cert.key;

    #    ssl_session_cache    shared:SSL:1m;
    #    ssl_session_timeout  5m;

    #    ssl_ciphers  HIGH:!aNULL:!MD5;
    #    ssl_prefer_server_ciphers  on;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}

}

複製程式碼

[部署01] Nginx

nginx配置靜態資源

  • 只需要在 ( http -> servers -> location -> root ) 中配置即可
  • ( root ) 的設定可以是 ( 絕對路徑也可以是相對路徑 )
  • ( 相對路徑 ) 如果要表示層級使用 ( ./ ) 而不是 ( ../ )
http {
    server {
        #listen 8080;表示埠
        listen       8080;
        
        #server_name  localhost;表示主機名
        server_name  localhost;

        location / {
            root  ./static;
            # root  D:/nginx/nginx-1.14.2/static;
            # 注意:相對路徑層級是 ( ./  ) 而不是 ( ../ )
        }
    }
}

通過以上配置後:
訪問:http://localhost:8080/image/a.png 即可訪問到static/image/a.png
複製程式碼

反向代理

  • 通過設定 ( http -> server -> location -> proxy_pass ) 實現反向代理
  • proxy_pass
    server {
        listen 8080;
        server_name  localhost;

        location / {
            #root  D:/nginx/nginx-1.14.2/static;
            
            # proxy_pass 將http://localhost:8080反向代理到http://localhost:3000
            proxy_pass  http://localhost:3000;
        }
    }
複製程式碼

動靜分離

  • 在nginx中的 ( http -> server -> location 後面加上 ~ 表示正則匹配 )
  • ~ 在nginx中表示正則匹配,後面可以跟上正規表示式
http {
    server {
        listen       8080;
        server_name  localhost;

        location / {
            proxy_pass  http://localhost:3000;
        }
    }

    server {
        listen          9090;
        server_name     localhost;
        location ~ \.(jpg|png|jpeg|gif)$ {
            root    ./static/image;
        }
    }
}
說明:
(1) 動態資源和靜態資源的分離,nginx伺服器主要用來賦值靜態資源
(2) 動態資源 - 反向代理 - 當訪問localhost:8080時會被反向代理到http://localhost:3000;
(3) 靜態資源 - 當訪問localhost:9090/a.png時會被對映到 static/image/a.png
(4) location 後面的 ~ 表示後面是正規表示式
複製程式碼

負載均衡

  • 負載均衡:根據目標伺服器的工作負荷情況,將請求分發到合適的伺服器。
  • 主要設定 ( ( http -> upstream ) 和 ( http -> server -> location -> proxy_pass ) )

負載均衡的幾種策略

  1. 輪詢 (預設),請求過來後,Nginx 隨機分配流量到任一伺服器
  2. ( weight=number ) 設定伺服器的 ( 權重 ),預設為1,權重大的會被優先分配
  3. ip_hash 保持會話,保證同一客戶端始終訪問一臺伺服器。
http: {
    # upstream 用於設定負載均衡
    # backend是一個名字,在 server -> loaction -> proxy_pass 中也要設定
    # weight=4表示權重,預設值是1,數字越大表示被訪問到的概率越大
    # 這裡的 localhost 和 127.0.0.1 是一樣的
    upstream backend {
        server localhost:7000;
        server 127.0.0.1:8000 weight=4;
        server localhost:9000;
    }
    
    server {
        listen 80;
        server_name localhost;
        
        location / {
            # 注意:這裡http://backend;中的http://別忘記寫了
            # backend就是在upstream中的設定的名字 backend
            proxy_pass http://backend;
        }
    }
}

複製程式碼

[部署01] Nginx

資料

blog.csdn.net/wnvalentin/…
nginx.config檔案詳解 juejin.im/post/5c1616…
參考 lufficc.com/blog/nginx-…
參考2 juejin.im/post/5cae9d…

相關文章