配置nginx靜態文件代理和gzip

接着上一篇在同一臺服務器上配置app1.domain.com和app2.domain.com多個web應用,這裏記錄下在nginx下給express web app配置靜態代理和文件壓縮。javascript

目的

爲了減小node.js對靜態文件的處理和加快前端下載靜態資源的速度,決定使用nginx作靜態代理,而且對其進行gzip壓縮。(爲何不使用express的compression中間,請移步:生產環境最佳實踐:性能和可靠性css

靜態文件代理

express項目結構

以上一篇中的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應用的nginx配置文件

blog的配置文件路徑/etc/nginx/jackyang.me/blog.confjava

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

重啓nginx

sudo /usr/local/nginx/sbin/nginx -s stop
sudo /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf

重啓nginx,查看expresslog,你將不會看到關於那些靜態文件的GET請求。nginx

開啓gzip

修改blog應用的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

重啓nginx

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

(本身在配置時碰到問題,cssgzipjavascript沒有。最後對比發現這裏的Content-Type值在配置文件gzip_types中沒有包含:content-typeapplication/javascript,而gzip_types中配置的爲application/x-javascript

相關文章
相關標籤/搜索