Lonely Dreamer (sanmai) wrote,
Lonely Dreamer
sanmai

ngx_http_geo_module

Поговорим о географии. Для начала следует прочитать этот документ: директивы модуля ngx_http_geo_module.

Во вторую очередь нам нужно получить список сетей в нужном формате.
Так как мне нужно отделить только российские IP, у меня делается так:
curl -f -o - http://noc.masterhost.ru/allrunet/runet \ 
| grep -v "0.0.0.0/0" | \
grep -o "[0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+\/[0-9]\+" | \
sort | uniq | sed 's/$/ ru;/' > /etc/nginx/rugeo.conf; \
/etc/init.d/nginx reload
Или так:
curl -f -o - http://noc.zenon.net/nets/current | \
grep international -B100000 | grep -v "0.0.0.0/0" | \
grep -o "[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\/[0-9]\{1,2\}" | \
sort | uniq | sed 's/\(\/[0-9]\+\)/\1 ru;/' > /etc/nginx/rugeo.conf; \
/etc/init.d/nginx reload


Нам нужно чтобы пользователи из любых стран с куки ALLOWIMAGES не подвергались дискриминации по географическому признаку. Соответственно составляем конфиг nginx.

Определяем страну (в контексте http):
geo  $country  {
	default          en;
	include          /etc/nginx/rugeo.conf;
}
В конфиге интересующего нас server пишем:
proxy_set_header  X-Country $country;
location = /spacer.gif {
        empty_gif;
}
location ~* \.(jpg|jpeg|gif|png)$ {
	set  $allow_images  1;

	if ($country = 'en') {
		set  $allow_images  0;
	}

	if ($http_cookie ~* ALLOWIMAGES) {
		set  $allow_images  1;
	}

	if ($allow_images != 1) {
		rewrite  ^/images/.*$ /spacer.gif break;
	}
	
        expires         7d;
        root /home/www/htdocs;
        if (!-f $request_filename) {
                proxy_pass        http://backend;
        }
}


Таким образом всем посторонним иностранцам вместо фотографий будет видна пустота, а всем своим фотографии будут видны откуда бы они не заходили.
Tags: linux, nginx, useful
Subscribe
  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 4 comments