公司的一個(gè)項(xiàng)目前后端分離句占,前端編譯完成后使用ngxin起服務(wù)编整,并作gzip壓縮優(yōu)化等栅葡。下面直接上nginx的配置文件频祝,并對(duì)一些印象比較深刻的字段進(jìn)行講解:
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
#設(shè)置請(qǐng)求體的最大限制 默認(rèn)是1m;
client_max_body_size 20m;
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
gzip on;
#啟用gzip壓縮的最小文件
gzip_min_length 1k;
#gzip 壓縮級(jí)別, 1-10步悠,數(shù)字越大壓縮越好签杈,但cpu消耗越高,且壓縮效果不會(huì)明顯提升,一般設(shè)置在2-4
gzip_comp_level 4;
#壓縮的文件類型
gzip_types text/html text/css application/javascript application/x-javascript text/javascript application/octet-stream application/font-woff;
# 虛擬機(jī)(服務(wù))列表
server {
#監(jiān)聽所有地址的80端口鼎兽,也可以指定IP
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
#路徑匹配
location / {
#指定訪問的靜態(tài)文件夾
root html;
#指定index頁面
index index.html index.htm;
#這個(gè)字段指定當(dāng)前uri 訪問的文件順序答姥,
#即uri沒有的話就訪問uri/ 依次到index.html、404.配置這個(gè)字段的原因是angualr項(xiàng)目是單頁應(yīng)用谚咬,所以所有的uri都訪問index.html
try_files $uri $uri/ /index.html =404;
}
#配置一個(gè)簡單的代理轉(zhuǎn)發(fā)鹦付,將/api開頭的請(qǐng)求轉(zhuǎn)發(fā)到3000端口
location /api/ {
proxy_pass http://127.0.0.1:3000/;
}
#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;
}
}
try_files字段
一開始使用nginx做angualr項(xiàng)目的服務(wù)器的時(shí)候發(fā)現(xiàn)除了首頁,其它頁面全部404了择卦,然后就查了下敲长,發(fā)現(xiàn)了try_files字段(好像以前是rewrite),看rewrite感覺比較好理解一點(diǎn)秉继。其作用就是將所有的路由都指向index.html文件祈噪,Angualr內(nèi)置的路由會(huì)呈現(xiàn)不同的頁面。
代理轉(zhuǎn)發(fā)
之前請(qǐng)求后臺(tái)接口都是在前端項(xiàng)目中配置一個(gè)固定ip與端口尚辑,后面發(fā)現(xiàn)當(dāng)改變環(huán)境或者ip的時(shí)候就要重新修改辑鲤,很麻煩。然后查到了代理轉(zhuǎn)發(fā)將/api 開頭的uri全轉(zhuǎn)發(fā)到本地的3000端口腌巾。
gzip壓縮
gzip壓縮,壓縮的等級(jí)最好在2或者4.還沒有親自測(cè)試铲觉。
gzip壓縮的gzip_types 中最好不要壓縮圖片澈蝙,因?yàn)閳D片好像以及使用過zip壓縮算法壓縮過了,在用gzip壓縮的話效果很不明顯撵幽,我親自測(cè)試過灯荧,618kb的圖片壓縮之后還有609kb...效率低還消耗內(nèi)存。圖片的話可以考慮緩存盐杂,公網(wǎng)的話云加速逗载,內(nèi)網(wǎng)的話先加載模糊的圖片哆窿,再依次加載清晰的圖片。目前我也還沒有實(shí)踐厉斟,若是后面有實(shí)踐挚躯,則再發(fā)一篇關(guān)于圖片的處理。
跨域CORS配置
nginx還可以做跨域配置擦秽,因?yàn)槲业捻?xiàng)目是在后臺(tái)代碼配置码荔,所以沒有。需要用的
修改請(qǐng)求體限制
nginx默認(rèn)的client_max_body_size為1m感挥,不修改的情況下當(dāng)你隨便上傳一個(gè)音樂文件的時(shí)候都會(huì)報(bào)413的錯(cuò)誤缩搅,錯(cuò)誤信息是“ Request Entity Too Large”
如上是我用到的nginx配置,較為簡單触幼,等以后需求復(fù)雜有變化的時(shí)候再更新硼瓣。