就是皮一下,靠這些去恰運維的飯,被打你也不能順着網線找我啊!!!javascript
前言: 做爲一名程序員,基礎的Nginx仍是須要會一些,不管是項目部署,仍是性能優化,Nginx總能在你須要的時候給你幫上忙,本文咱們就搞一下經常使用的基礎配置,本文主要以怎麼用爲主,不會涉及太多爲何這麼用。css
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; # 單文件應用必須有此配置
}
}
複製代碼
/
表示匹配根路徑http://notes.jindll.com/assets/css
,服務器就會到/notes/assets/css
這個位置找資源返回http://notes.jindll.com
沒有路徑,就會默認返回/notes/index.html
資源http://notes.jindll.com/abc
時,這裏的 $uri
就是 /abc
。 try_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
去查找資源返回前端
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
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;
就能夠。
另外,協商緩存或者強緩存其實更多的是針對靜態資源文件,例如圖片、音頻、字體等,這些資源不會常常改變,因此採用緩存,讓瀏覽器直接讀本地緩存會有很是明顯的性能提高。
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…
未開啓
開啓後