nginx浅谈之Geoip模块及其他补充

一、gzip模块

   语法:gzip on|off,默认是off,用来压缩静态文件,可在http、location和server区块下配置。

   语法:gzip_comp_level  level

   解释:压缩比例,默认level是1,一般压缩传输可提高传输效率,减小带宽的损耗,但本身压缩文件就要使用服务器性能,所以压缩比例自行折中选择。

   语法:gzip_http_version 1.1,gzip_http版本,默认是1.1


二、Nginx缓存(proxy_cache)模块

   语法:proxy_cache  zone|off

   解释:打开缓存,默认是off状态,zone表示的是此缓存区域的名字,可在http、server和location区块中配置。

   语法:proxy_cache_valid [code]  time

   解释:缓存过期时间,其中code码表示的是http的code状态码,可在http、server和location区块中配置

   语法:proxy_cache_key  string

   解释:string表示的是缓存的维度,默认是$scheme$proxy_host$request_uri,其中,$scheme表示协议,如http,$proxy_host表示主机域名,$request_uri表示的是参数。此语法可在http、server和location区块中配置。

   语法:proxy_cache_path path [levels=levels] [use_temp_path=on|off] keys_zone=name:size [max_size=size] [inactive=time]

   解释:由于此语法有很多参数,此处就不全部列出来了。例如可在配置文件的server区块里进行如下配置:

   proxy_cache_path 目录路径  levels=1:2  keys_zone=name:10m  max_size=3g  inactive=60m  use_tenp_path=off;其中,目录表示的是缓存的路径;levels=1:2表示的是分层,表示以2层目录的方式进行分级;name表示此空间的名字,后面的10m表示空间大小,一般1m可存放8000个key;max_size表示这个目录最大能多大,当满了之后nginx会触发自己的删除机制,把不常用的删掉;inactive=60m表示此文件在60分钟内部层被访问过就把它删掉,use_tenp_path是临时目录,此处关闭,减少性能损耗。

   语法:proxy_no_cache string....

   解释:string表示的是变量,此语法表示部分不缓存,可在http、server和location区块中配置。

   例如,我们可以进行如下的配置:

location / {
  proxy_cache  name;
  proxy_pass  http://proxy_name;  #进行负载均衡时的名字
  proxy_cache_valid  200  304  12h;
  proxy_cache_valid  any  10m;#此句和上句表示除了返回的是200和304的头信息缓存时长为12h外,其余的都为10分钟
  
  proxy_cache_key  $host$uri$is_args$args
  # $args这个变量等于GET请求中的参数,$is_args表示当$args设置时,值为“?”,否则值为“ ”
  
  add_header  Nginx-Cache  "$upstream_cache_status";
  #设置头信息,其中$upstream_cache_status为缓存命中状态,有如下几个值:
  #MISS:未命中,请求被传送到后端   HIT:缓存命中   STALE:后端将得到过期应答
  #EXPIRED:缓存已经过期,请求被传送到后端    UPDAING:正在更新缓存,将使用旧的应答。
  
  proxy_next_upstream  error timeout  invalid_header http_500 http_502 http_503 http_504;
  #上述表示在请求服务器时出现错误、超时、不合法的请求头(500、502、504)的状态码时跳过这台服务器,
  #到下一台服务器去请求
  
  proxy_no_cache  $cookie_nocache $arg_nocache $arg_comment;
  #此处表示以上3个变量的值不为0或空时,不缓存
}


三、GeoIP模块

   在nginx中使用此模块可以用来处理不同地区的访问,也可以处理不同地区访问项目的版本。系统自带的nginx模块中一般没有这个模块,所以需要下载,执行如下命令:

yum  install  geoip-devel
yum  install  geoip

   然后我们到nginx的目录下,下载国家和城市地域的dat包,如下:

wget  http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz
wget  http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz

   下载完成之后,我们使用gunzip命令进行解压,如下:

gunzip  GeoIP.dat.gz
gunzip  GeoLiteCity.dat.gz

   然后进入nginx.conf文件,在server区块的上面行加如下内容:

geoip_country  /etc/nginx/GeoIP.data; #此处是.data的文件目录路径
geoip_city  /etc/nginx/GeoLiteCity.dat

   然后我们在server区块里面加入如下内容:

location /myip {
  default_type  text/plain;
  return 200 "$remote_addr  $geoip_country_name $geoip_code  $geoip_city";
}

   然后我们访问http://公网IP/myip之后,就会输出我们的IP地址、国家名、国家码和城市信息。

   当然,我们也可以早location / {}里面加入如下代码,表示除了中国,其他国家的ip访问都会返回403。

if ($geoip_country_code != CN){
  return 403;
}


头像
QQ登录: