導航
[深入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和埠
正向代理的作用
- 翻牆:繞過無法訪問的結點,從另外一條路由路徑進行目標伺服器的訪問;
- a無法訪問到國外的b,通過國外的c,a訪問c,c轉發訪問b
- 快取:將資料快取在代理伺服器上,如果客戶端請求的內容在快取中則不去訪問目標主機
- 許可權控制:防火牆授權代理伺服器訪問許可權,客戶端通過正向代理可以通過防火牆
- 隱藏客戶端:通過正向代理配置,目標伺服器無法獲取真實客戶端資訊,只能獲取到代理伺服器的資訊
反向代理 ----------- 代理服務端
- 隱藏服務端身份:也是中間伺服器,隱藏服務端身份,對於客服端會認為反響代理伺服器就是訪問的目標伺服器
反向代理的作用
- 隱藏服務端:出於安全的考慮,我們不想把 Server 直接暴露出來,而是放在內網中。這時 Client 在外網無法就無法 Server 了。因此,我們就可以新增一臺中間伺服器,連線內外網,這樣就可以允許外網使用者訪問,同時可作為防火牆對外部請求進行限制,提高內部伺服器的安全性。
- 負載均衡:根據目標伺服器的工作負荷情況,將請求分發到合適的伺服器。
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;
# }
#}
}
複製程式碼
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 ) )
負載均衡的幾種策略
- 輪詢 (預設),請求過來後,Nginx 隨機分配流量到任一伺服器
- ( weight=number ) 設定伺服器的 ( 權重 ),預設為1,權重大的會被優先分配
- 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;
}
}
}
複製程式碼
資料
blog.csdn.net/wnvalentin/…
nginx.config檔案詳解 juejin.im/post/5c1616…
參考 lufficc.com/blog/nginx-…
參考2 juejin.im/post/5cae9d…