我近期對服務器進行了少許改進,雖然以前使用了nginx反向代理以後性能有所提升,但仍然不夠,須要使用緩存來大幅度提升靜態資源的訪問速度.css
服務器上的靜態資源主要有這些:png, jpg, svg, js, css等.下面,我經過新的nginx配置來實現緩存.對紅色的字我會額外進行說明.nginx
worker_processes 1; events { worker_connections 1024; multi_accept on; use epoll; } http { include mime.types; default_type application/octet-stream; sendfile on; tcp_nopush on; keepalive_timeout 65; proxy_cache_path /svcwork/nginxcache levels=1:2 keys_zone=staticcache:10m inactive=1h max_size=2g; server { listen 80; server_name localhost; location / { proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_pass http://localhost:8080/; } location ^~ /resource { alias /resource; expires 1h; } location ^~ /hpaasvc { rewrite ^(.*)$ https://$host$1 permanent; } location ~* \.(js|css|ico|gif|jpg|png|svg)$ { log_not_found off; access_log off; expires 7d; proxy_pass http://localhost:8080; proxy_cache staticcache; proxy_cache_valid any 10m; } } server { listen 443 ssl; server_name localhost; ssl_certificate cert/cert.pem; ssl_certificate_key cert/cert.key; ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m; ssl_ciphers HIGH:!aNULL:!MD5; ssl_prefer_server_ciphers on; location / { proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_pass http://localhost:8080/; } location ^~ /resource { alias /resource; expires 1h; } location ~* \.(js|css|ico|gif|jpg|png|svg)$ { log_not_found off; access_log off; expires 7d; proxy_pass http://localhost:8080; proxy_cache staticcache; proxy_cache_valid any 10m; } } }
1, "multi_accept on"和"use epoll"能夠提升服務器吞吐量web
2, "proxy_cache_path /svcwork/nginxcache levels=1:2 keys_zone=staticcache:10m inactive=1h max_size=2g;"配置了一個服務器緩存,被緩存的服務器響應(不必定是文件,也有多是302,304之類的響應)存放在/svcwork/nginxcache目錄下;並且將根據被緩存響應的md5摘要信息建立兩級目錄(通常來講一個目錄下存放過多的文件會致使文件系統訪問性能的降低);緩存的名字叫staticcache,後面會用到這個名字;緩存使用10M內存(我看別人的範例上是100M,因此一開始我也配置了100M,但發現內存不足,nginx報錯,因此就改小了許多);若是沒有新的動做,被緩存的響應的將會在1個小時候被刪除;緩存區最多可以使用2G的磁盤空間.正則表達式
3, location後面加上"^~"表示一旦匹配的話將不會匹配正則表達式. 若是用戶要訪問的URI是"/resource/test/abc.png",那麼將使用"location ^~ /resource"規則,忽略掉後面的正則表達式匹配.瀏覽器
4, access_log off; 其實我以爲access_log意義不大.緩存
5, expires 7d;這玩意兒實際上是客戶端緩存,經過http頭告訴瀏覽器這個訪問的資源的有效期是7天,7天內能夠別再向服務器要,但這個取決於瀏覽器的具體實現,如IE按<F5>,就會強制向服務器刷新全部資源而無論是否有緩存.服務器
6, proxy_cache staticcache;指定要使用的緩存.嗯,就是前面定義的那個staticcache.session
7, proxy_cache_valid any 10m;10分鐘後訪問的數據將會"變不新鮮"...怎麼說呢?舉個栗子: /website/image/abc.png被首次訪問的話講會被緩存,接下去10分鐘裏對這個資源的訪問都直接從緩存返回而不會將請求pass到後臺.10分鐘後再從新嘗試從後臺拿. 注意一下跟"proxy_cache_path"的"inactive"的差異,inactive是說緩存的響應的"生命時間",每次訪問這個資源都將刷新緩存的"生命時間",讓它繼續活在緩存中,而這裏則表示隔了這麼長時間就從新刷新下這個被緩存的響應.app
本文寫得有點倉促潦草,有問題再說了...tcp