恰運維一口飯(Nginx經常使用配置)

就是皮一下,靠這些去恰運維的飯,被打你也不能順着網線找我啊!!!javascript

前言: 做爲一名程序員,基礎的Nginx仍是須要會一些,不管是項目部署,仍是性能優化,Nginx總能在你須要的時候給你幫上忙,本文咱們就搞一下經常使用的基礎配置,本文主要以怎麼用爲主,不會涉及太多爲何這麼用。css

安裝

Nginx安裝及啓動配置文件等基礎內容看我這篇文章html

基本配置(前端項目部署:單頁面應用)

server {
  listen 80;
  server_name notes.jindll.com; # 這裏是你的域名
  location / {
    root	/notes; # 你的項目路徑或者說要給客戶端返回的資源在那個路徑下 「/notes」表示根目錄下notes文件夾下
    index	index.html; # 網站的默認初始頁,用戶直接訪問域名無路徑返回那個頁面,及用戶訪問 http://notes.jindll.com 給用戶返回那個文件
    try_files $uri $uri/ /index.html; # 單文件應用必須有此配置
  }
}
複製代碼

詳細說明

  • listen: 監聽的端口,瀏覽器經過域名進入的,要監聽的端口都是80,https是443端口
  • server_name: 服務別名,瀏覽器經過域名請求,服務器收到域名和server_name進行匹配,匹配到就往下走,匹配不到(那就看看瀏覽器什麼反應)
  • location: 匹配域名後面的路徑,/ 表示匹配根路徑
  • root: 根路徑配置,例如用戶訪問http://notes.jindll.com/assets/css ,服務器就會到/notes/assets/css 這個位置找資源返回
  • index: 網站的默認初始頁,例如用戶訪問http://notes.jindll.com 沒有路徑,就會默認返回/notes/index.html 資源
  • try_files: 當用戶訪問 http://notes.jindll.com/abc 時,這裏的 $uri 就是 /abctry_files 會到服務器裏(/notes/abc)找這個文件。若是存在就直接把這個文件的內容發送給用戶。 若是不存在而後就看 $uri/,增長了一個 /,也就是看有沒有名爲 /notes/abc/ 的目錄。 若是還不存在就看下一個選項,將/notes/index.html 返回

同域名不一樣路徑指向不一樣項目

server {
  listen 80;
  server_name notes.jindll.com; # 這裏是你的域名
  location / {
    root	/notes; # 你的項目路徑或者說要給客戶端返回的資源在那個路徑下 「/notes」表示根目錄下notes文件夾下
    index	index.html; # 網站的默認初始頁,用戶直接訪問域名無路徑返回那個頁面,及用戶訪問 http://notes.jindll.com 給用戶返回那個文件
    try_files $uri $uri/ /index.html; # 單文件應用必須有此配置
  }
  location /dev  {
    root	/docs;
    index	index.html;
	}
}
複製代碼

詳細說明

相比於上面的代碼咱們加了一個location 塊,即代表當服務器收到 http://notes.jindll.com/dev 訪問時會走/dev 塊,而後從/docs/dev 去查找資源返回前端

https配置

server {
  listen 443 ssl;
  server_name notes.jindll.com; # 這裏是你的域名
  
  #證書文件名稱
  ssl_certificate /ssl/notes/3048277_notes.jindll.com.pem; 
  #私鑰文件名稱
  ssl_certificate_key /ssl/notes/3048277_notes.jindll.com.key;
  ssl_session_timeout 5m;
  #請按照如下協議配置
  ssl_protocols TLSv1 TLSv1.1 TLSv1.2; 
  #請按照如下套件配置,配置加密套件,寫法遵循 openssl 標準。
  ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; 
  ssl_prefer_server_ciphers on;
     
  location / {
    root	/notes; # 你的項目路徑或者說要給客戶端返回的資源在那個路徑下 「/notes」表示根目錄下notes文件夾下
    index	index.html; # 網站的默認初始頁,用戶直接訪問域名無路徑返回那個頁面,及用戶訪問http://notes.jindll.com 給用戶返回那個文件
    try_files $uri $uri/ /index.html; # 單文件應用必須有此配置
  }
  location /dev  {
    root	/docs;
    index	index.html;
	}
}
複製代碼

詳細說明

https的配置實際上是最簡單的,不管是你在騰訊雲仍是阿里雲申請的https證書,他們都有詳細的https配置說明。java

在上面的代碼中主要加了ssl開頭的配置屬性,另外監聽的端口由80變爲了443,由於https訪問的端口就是443,咱們須要改的就是證書文件和私約文件的位置,這兩個文件在你證書申請成功以後,將相關文件下載下來就能夠了。nginx

socket配置

server {
  listen 443 ssl;
  server_name notes.jindll.com; # 這裏是你的域名
  
  #證書文件名稱
  ssl_certificate /ssl/notes/3048277_notes.jindll.com.pem; 
  #私鑰文件名稱
  ssl_certificate_key /ssl/notes/3048277_notes.jindll.com.key;
  ssl_session_timeout 5m;
  #請按照如下協議配置
  ssl_protocols TLSv1 TLSv1.1 TLSv1.2; 
  #請按照如下套件配置,配置加密套件,寫法遵循 openssl 標準。
  ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; 
  ssl_prefer_server_ciphers on;
     
  location / {
  	proxy_pass_header Server;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header Host $host;
    proxy_set_header X_Forward_For $proxy_add_x_forwarded_for;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection 'upgrade';
		
    proxy_pass http://127.0.0.1:3939; # 配置轉發;將https://notes.jindll.com轉發到本機http://127.0.0.1:3939
  }
}
複製代碼

詳細說明

websocket 的全部配置都在在location 塊中(除proxy_pass),若是你須要配置websocket 能夠直接將以上代碼複製過去。核心代碼實際上是proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection 'upgrade'; ,這兩行的做用就是將http 協議升級爲websocket 協議。程序員

協商緩存

server {
  listen 80;
  server_name notes.jindll.com; # 這裏是你的域名
  location / {
    root	/notes; # 你的項目路徑或者說要給客戶端返回的資源在那個路徑下 「/notes」表示根目錄下notes文件夾下
    index	index.html; # 網站的默認初始頁,用戶直接訪問域名無路徑返回那個頁面,及用戶訪問 http://notes.jindll.com 給用戶返回那個文件
    try_files $uri $uri/ /index.html; # 單文件應用必須有此配置
  }
  location /dev  {
    root	/docs;
    index	index.html;
    add_header Cache-Control no-cache;
	}
}
複製代碼

詳細說明

協商緩存是一個與前端性能優化有關的東西,當用戶在瀏覽器輸入地址後,服務器須要將對應文件返回給瀏覽器,這是須要時間的。web

若是用戶第一次在瀏覽器輸入一個地址後,服務器將文件返回給瀏覽器,此時瀏覽器將文件緩存起來,下次用戶再進這個地址,瀏覽器直接從緩存中取對應文件,那速度就比請求服務器快,這是強緩存瀏覽器

強緩存的缺點就是服務器文件更新,但瀏覽器並不會及時更新,而是繼續讀本地緩存,固然能夠設置緩存時間,但終究不是很是及時的。緩存

協商緩存就是地址輸入後,瀏覽器將上次緩存文件的MD5 和文件更新時間發給服務器,服務器來確認這個文件有沒有更新,有更新,服務器就去找文件,返回給瀏覽器,沒更新就返回302狀態碼,瀏覽器直接讀緩存。

低版本的nginx 配置協商緩存還須要作其餘配置,若是你是根據個人nginx安裝教程來的,那就只須要在location 塊中再添加一行add_header Cache-Control no-cache; 就能夠。

另外,協商緩存或者強緩存其實更多的是針對靜態資源文件,例如圖片、音頻、字體等,這些資源不會常常改變,因此採用緩存,讓瀏覽器直接讀本地緩存會有很是明顯的性能提高。

啓用GZIP壓縮

server {
  listen 80;
  server_name notes.jindll.com; # 這裏是你的域名
  location / {
    root	/notes; # 你的項目路徑或者說要給客戶端返回的資源在那個路徑下 「/notes」表示根目錄下notes文件夾下
    index	index.html; # 網站的默認初始頁,用戶直接訪問域名無路徑返回那個頁面,及用戶訪問 http://notes.jindll.com 給用戶返回那個文件
    try_files $uri $uri/ /index.html; # 單文件應用必須有此配置
  }
  location /dev  {
    root	/docs;
    index	index.html;
    add_header Cache-Control no-cache;
    
    # 如下代碼是開啓GZip的
    gzip  on;
    gzip_min_length 1k;
    gzip_buffers 4 16k;
    gzip_comp_level 4;
    gzip_types text/plain application/javascript application/x-javascript text/javascript text/xml text/css;
    gzip_disable "MSIE [1-6]\.";
	}
}
複製代碼

詳細說明

  • gzip on; 開啓GZip壓縮

  • gzip_min_length 1k; 小於1k的文件不進行壓縮

  • gzip_buffers 4 16k; 4 16k 表明以16k爲單位,按照原始數據大小以16k爲單位的4倍申請內存; 若是沒有設置,默認值是申請跟原始數據相同大小的內存空間去存儲gzip壓縮結果。

  • gzip_comp_level 4; 壓縮級別 1-9; 1 壓縮比最小處理速度最快,9 壓縮比最大但處理最慢

  • gzip_types 對那些類型進行壓縮; 我這裏只壓縮了 JS CSS XML , 若是沒有 XML 類型文件,徹底能夠去掉text/xml ; 我這裏壓縮類型沒有寫 HTML ,是由於不管是否指定"text/html"類型老是會被壓縮; 另外不建議對圖片,音樂等資源壓縮,由於壓縮效果不明顯,而且對這些類型文件進行壓縮,會消耗服務器大量資源, 得不償失。

  • gzip_disable "MSIE [1-6]\."; 對IE6如下的瀏覽器不進行壓縮,IE6不支持,會亂碼;(如今還用IE6的也是神仙)

  • 更多的關於GZip的介紹,能夠看這個中文文檔,地址:www.nginx.cn/doc/standar…

開啓GZip與未開速度對比

未開啓

image-20200217173519190

開啓後

image-20200217173642958
相關文章
相關標籤/搜索