Как настроить Nginx + geoip + gzip в зависимости от города загружались разные файлы с gzip сжатием, если они существуют?

Есть URL, например: example.com/contacts/

Есть папка /cache/contacts/
в ней файлы, например:
msk.html.gz
spb.html.gz
msk-obl.html.gz
len-obl.html.gz
other.html.gz

Необходимо:
1. Определить из какого региона пользователь.
2. Если пользователь из москвы, то ему показать файл msk.html.gz
3. Поставить флаг GZIP
4. Если такого файла не существует, то продолжить выполнение. (там в дальнейшем PHP сформирует этот файл, сожмет и положит в нужную папку.

Хочется, чтобы NGINX отдавал сразу заранее подготовленный и сжатый файл, вместо того, чтобы постоянно выполнять файл. (*.php или *.html не важно, так как html обрабатывается как php)
  • Вопрос задан
  • 2668 просмотров
Пригласить эксперта
Ответы на вопрос 1
ptchol
@ptchol
Linux system administrator
Вот так не пробовали ?

http { 
    ...
    geo $country {
        default        other;
        127.0.0.0/24   msk;
        10.1.0.0/16    spb;
        192.168.1.0/24 other;
    }
    map $country $filename {
        default     other.html.gz;
        msk         msk.html.gz;
        spb         spb.html.gz;
        other       other.html.gz;
    }
    ...
}

server { 
    ...
    location /contacts {
        rewrite .* $filename break;
        alias /var/www/server.com/cache/contacts/;
        gzip on;
        try_files $uri @fallback;
    }
    location @fallback {
        fastcgi_pass 127.0.0.1:9000;
    }
    ...
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы