接着上一篇在同一臺服務器上配置app1.domain.com和app2.domain.com多個web應用,這裏記錄下在nginx下給express web app配置靜態代理和文件壓縮。javascript
爲了減小node.js對靜態文件的處理和加快前端下載靜態資源的速度,決定使用nginx作靜態代理,而且對其進行gzip壓縮。(爲何不使用express的compression中間,請移步:生產環境最佳實踐:性能和可靠性)css
以上一篇中的blog應用爲例,blog的express項目結構以下,全部的靜態資源,例如js
, css
, font
, image
等都放在static
目錄下html
- blog - dist - static - images - javascripts - stylesheets - fonts - font-awesome - ... - src - ...
頁面上全部引用資源時都是static/XXX/XXX/XXX.XXX
前端
blog的配置文件路徑/etc/nginx/jackyang.me/blog.conf
:java
upstream blog.jackyang.me { server 127.0.0.1:3000; keepalive 8; } server { listen 0.0.0.0:80; server_name blog.jackyang.me; location / { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_set_header X-NginX-Proxy true; proxy_pass http://blog.jackyang.me/; proxy_redirect off; } # new config lines for static files proxy location /static/ { root /var/www/jackyang.me/blog; } }
/static/
的配置告訴nginx:碰到static/
開頭的任何請求,如:blog.jackyang.me/static/images/demo.png
,都會去/var/www/jackyang.me/blog/static/
目錄下去找。node
sudo /usr/local/nginx/sbin/nginx -s stop sudo /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
重啓nginx,查看express
的log
,你將不會看到關於那些靜態文件的GET
請求。nginx
gzip
能夠配置在http
, server
, location
做用域下,我這裏是只爲blog.jackyang.me
配置,因此將其放在/etc/nginx/jackyang.me/blog.conf
中:web
upstream blog.jackyang.me { server 127.0.0.1:3000; keepalive 8; } server { listen 0.0.0.0:80; server_name blog.jackyang.me; location / { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_set_header X-NginX-Proxy true; proxy_pass http://blog.jackyang.me/; proxy_redirect off; } # new config lines for gzip gzip on; gzip_min_length 1k; gzip_buffers 4 8k; gzip_http_version 1.1; gzip_types text/plain application/javascript application/x-javascript text/javascript text/css application/xml; location /static/ { root /var/www/jackyang.me/blog; } }
這裏給了一個簡單的配置,關於更多gzip
的配置屬性信息請查看官方文檔express
sudo /usr/local/nginx/sbin/nginx -s stop sudo /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
打開瀏覽器訪問頁面,在調試工具中能夠看到對應MINE
類型的資源的response header
中被標記gzip
。
segmentfault
(本身在配置時碰到問題,css
被gzip
而javascript
沒有。最後對比發現這裏的Content-Type
值在配置文件gzip_types
中沒有包含:content-type
爲application/javascript
,而gzip_types
中配置的爲application/x-javascript
)