前端培訓-初級階段-場景實戰(2019-06-13)-Nginx代理正確食用方式

前端最基礎的就是 HTML+CSS+Javascript。掌握了這三門技術就算入門,但也僅僅是入門,如今前端開發的定義已經遠遠不止這些。前端小課堂(HTML/CSS/JS),本着提高技術水平,打牢基礎知識的中心思想,咱們開課啦(每週四)。css

截止到 2019-05-30 期,全部成員都進行了一次分享。內部對課程進行了一些調整,以後會針對項目開始 review 。我這邊預期準備進入中級階段,中間仍是會穿插一些實戰。 前端培訓目錄html

今天講什麼?

  1. nginx 的 server
  2. nginx 的 location 匹配規則
  3. nginx 的 root、rewrite、proxy_pass、alias
  4. nginx 的命令以及報錯日誌

今天爲何會開這個題目?前端

  • 公司內部的前端構建工具升級(gulp),幫小夥伴處理了一下 nginx 的配置,輔助提高開發的體驗。
  • 公司想要加快網頁訪問速度(前端緩存),爲了測試,我改了我本身服務器的 nginx 配置。nginx

    • PWA ()
    • manifest ()
    • 其餘方案(localStroage存)
    • 有老哥有科學有效的方案嗎?緩存這塊我還在實驗中,我司有結果以後我會寫個文章發出來。

nginx 的 server

定義虛擬主機相關。server 中經過 server_name 來匹配域名,listen來匹配端口express

server_name

用於匹配域名,須要已經映射的域名。
舉個栗子,我在阿里雲有一臺雲服務器 IP:123.56.16.33:443。買了一個域名 lilnong.top
我如今把個人域名指向了個人ip。那全部請求我域名的都會到我這臺服務器上。我須要用 server_name 來判斷請求的是那臺主機,再進行分發gulp

listen

用於匹配端口號,通常來講,咱們當作服務的就須要加上 80 和 443segmentfault

協議 端口 用途
http 80 瀏覽器訪問
https 443 瀏覽器訪問
ftp 21

server_name 與 host 匹配優先級

  1. 徹底匹配
  2. 通配符在前的,如 *.lilnong.top
  3. 在後的,如 www.lilnong.*
  4. 正則匹配,如 ~^\.www\.lilnong\.com$

若是都不匹配windows

  1. 優先選擇 listen 配置項後有 default 或 default_server 的
  2. 找到匹配 listen 端口的第一個 server 塊

nginx 的 location 匹配規則

location 是什麼?

location 是用於在 server 服務中,根據 URL 進行匹配查找。屬於 ngx_http_core_module 模塊。瀏覽器

location 語法

location [ = | ~ | ~* | ^~ ] uri {...}緩存

  • = : 精確匹配,匹配成功,則中止搜索正則; 不能有嵌套的 location。能夠加速 request 的處理。
  • ~ : 區分大小寫的正則匹配
  • ~*不區分大小寫正則匹配
  • ^~不進行正則的匹配。

location 匹配規則

  1. 前綴匹配(prefix string)
    //static/
  2. 正則匹配(regular expresstion)(RegExp)
    \.(gif|jpg|png|js|css)$
  3. nginx 首先檢查 前綴匹配,使用 longest matching prefix 最長前綴匹配規則,記住匹配的 location,而後使用正則匹配,根據他們在配置文件中的順序,一旦匹配成功,則中止檢索。
  4. 匹配時要注意/的使用。是否要封閉。

    location /static { 
         # 能夠匹配到 URL 如: '/static/html' 和 'statichtml/html`
     }
     location /static/ { 
         # 只可匹配到 URL 如: '/static/html' 和 'static/**'
     }

nginx 的 root、rewrite、proxy_pass、alias

root

用來指定請求資源的真實路徑,本地磁盤路徑

location /nginx/ { 
  root /var/log/;
  #請求http://nginx.lilnong.top/nginx/20190227_access.log
  #>/var/log/nginx/20190227_access.log
}

alias

用來指定請求資源的真實路徑,本地磁盤路徑。會丟棄 location 所匹配的,這是和 root 的區分

location /nginx/ { 
  alias  /var/log/nginx/;
  #請求http://nginx.lilnong.top/nginx/20190227_access.log
  #>/var/log/nginx/20190227_access.log
}

rewrite

  1. 在 server 塊中,會先執行 rewrite 部分,而後纔會匹配 location 塊。
  2. 語法:rewrite regex replacement [flag];

    1. 若是 regex 匹配到,則會使用 replacement 來替換 URL。
    2. rewrite 指令會根據在配置文件中出現的順序依次執行,可使用 flag 來終止接下來的處理。
    3. 若是 replacement 以 http:// 或者 https:// 或者 $scheme,則中止處理,馬上重定向。
  3. flag 描述

    1. last 將根據 rewrite 後的地址從新在 server標籤執行。
    2. break 將根據 rewrite 後的地址從新在當前的 location標籤執行。
    3. redirect 302跳轉到rewrtie後面的地址。
    4. permanent 301永久調整到rewrtie後面的地址,即當前地址已經永久遷移到新地址,通常是爲了對搜索引擎友好。
#這是我把ip訪問重定向到個人網頁
server {
    listen 80;
    server_name 123.56.16.33;
    rewrite ^/(.*)$ https://www.lilnong.top/$1 permanent; 
}

proxy_pass

訪問 https://nginx.lilnong.top/static/html

location /static/ {
  proxy_pass http://www.lilnong.top; 
  #結尾不帶 `/`,將匹配到 http://www.lilnong.top/static/html
}
location /static/ {
  proxy_pass http://www.lilnong.top/; 
  #結尾帶 `/`,將匹配到 http://www.lilnong.top/html
}

nginx 的命令以及報錯日誌

  1. 重啓(從新載入配置文件) nginx -s reload
  2. 重啓 nginx -s reopen
  3. 中止 nginx -s stop
  4. 啓動 nginx
  5. 若是有錯誤,重啓的時候會報錯。
    在 windows 中(咱們正在用的),看不到報錯,服務也起不來,能夠的 nginx/logs/error.log 看錯誤日誌來排查問題。

資源

  1. nginx 中文
  2. nginx org
  3. nginx的location配置詳解

微信公衆號:前端linong

clipboard.png

相關文章
相關標籤/搜索