上篇文章搞定了基本配置,但写法太死板,用了一天时间优化测试,搞了个比较灵活的配置文件。

相比上篇,有几点改进:

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程序可能需要特别考虑这个问题。

 

 

作者 听涛

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注