上篇文章搞定了基本配置,但写法太死板,用了一天时间优化测试,搞了个比较灵活的配置文件。
相比上篇,有几点改进:
1,http和https站点合并为一个配置段,避免配置文件有太多重复内容。
2,后端服务器根据请求协议可以灵活调配,避免后端改动一下就导致大批量修改配置文件,那会很头疼,并且容易出错。
3,将所有的非html文件单独放置一个存储区。因为实际上html的容量是比较小的,而且需要的时候可能会经常清缓存,而图片和css文件等很少更新,那么可以做一个独立区域,提高效率。
下面的配置只是摘取的,增加其他站点的配置相同。
首先http区域增加配置:
proxy_cache_path /cache_dir/tingtaoit levels=2:2 keys_zone=tingtaoit:10m inactive=1d max_size=100m; proxy_cache_path /cache_dir/staticfile levels=2:2 keys_zone=staticfile:10m inactive=1d max_size=3000m; proxy_cache_key $scheme$host$request_uri; upstream svr_web { server 1.1.1.1:80; server 2.2.2.2:80; } upstream svr_web_ssl { server 1.1.1.1:443; server 2.2.2.2:443; } map $scheme $svr_addr { default "svr_web_ssl"; http "svr_web"; }
设置两个存储区,staticfile是所有网站共用的,tingtaoit是各自站点独立的。
proxy_cache_key这个设置是全局共用的,一次性设置。
两个upstream后端服务器组,可以增加多个服务器。
用map来根据http还是https映射到不同服务器组。
站点配置:
####################################################### # www.tingtao.org server { listen 80; server_name www.tingtao.org; keepalive_timeout 120; #直接在http站点里面附加下面3个设置就可以一个配置区同时搞定http和https listen 443 ssl; ssl_certificate /var/www/ca/www.tingtao.org/Nginx/1_www.tingtao.org_bundle.crt; ssl_certificate_key /var/www/ca/www.tingtao.org/Nginx/2_www.tingtao.org.key; ############################################## access_log off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #静态文件放在公共存储区 location ~ .*\.(js|css|gif|jpg|jpeg|png|bmp|swf|flv|ico)$ { proxy_cache staticfile; proxy_pass $scheme://$svr_addr;# $svr_addr映射到公共区域的map,根据协议自动选择对应的服务器组 proxy_redirect off; proxy_cache_valid 200 302 301 5d; #对不同的HTTP状态码设置不同的缓存时间,h小时,d天数 proxy_cache_valid any 1m; proxy_cache_use_stale error timeout invalid_header; expires 4h; #设置浏览器过期时间 } # 不缓存的文件 location ~ (wp-admin|\.php)$ { proxy_pass $scheme://$svr_addr; proxy_no_cache 1; proxy_cache_bypass 1; } # 此站点默认缓存策略,放在自己的tingtaoit存储区 location / { proxy_cache tingtaoit; proxy_pass $scheme://$svr_addr; proxy_redirect off; proxy_cache_valid 200 302 301 1d; #对不同的HTTP状态码设置不同的缓存时间,h小时,d天数 proxy_cache_valid any 1m; proxy_cache_use_stale error timeout invalid_header; expires 4h; #设置浏览器过期时间,只在浏览器生效 } }
关于map里面的default是默认,当没有匹配到key的时候会选择这个值。
个人建议默认走https,因为http页面调用https的没什么问题,但是https页面调用了http则会被浏览器警告,显的很不友好。
wordpress实际上是可以随意用http或者https的,也就是说不论在后台配置的站点地址是http还是https,前端都可以随意用两种协议,而其他web程序可能需要特别考虑这个问题。