Реврайт на основе geo
Igor Sysoev
is at rambler-co.ru
Fri Nov 20 14:57:50 MSK 2009
On Fri, Nov 20, 2009 at 01:38:39PM +0300, Dmitriy Belousov wrote:
> Мена подсетей, локейшенов и доменов вымышленные, любые совпадения случайны
> :))
>
> Не могу придумать, как сделать более гибко. Имею вот такую штуку:
>
> ...
> geo $net
> {
> default 0;
> 99.99.99.99/21 1;
> }
>
> ...
> ...
>
> server
> {
> server_name myserver.ru;
>
> listen 100.100.100.100:80;
>
> if ($net)
> {
> rewrite ^(.*)$ http://net.myserver.ru$1;
> }
>
> location / {
> proxy_pass http://127.0.0.1:8210/;
> proxy_set_header Host $host;
> proxy_set_header X-Real-IP $remote_addr;
>
> }
>
> location /location1/ {
> alias /path/to/location1/;
> access_log off;
> expires 30d;
> }
>
> location /location2/ {
> alias /path/to/location2/;
> access_log off;
> expires 30d;
> }
> ...
> ...
> location /forum/ {
> access_log on;
> proxy_set_header X-Real-IP $remote_addr;
> proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
> proxy_pass http://192.168.199.199:8220/;
> }
>
> ...
> ...
> }
>
> Как видно из конфига все, кто приходят из подсети $net реврайтятся на другой
> сайт на поддомене. Тот другой сайт - клон того, с которого делается реврайт,
> изменения там на уровне конфига движка самого сайта, т.е. имеет точно такой
> же конфиг веб-серверов (ну кроме реврайта конечно). Все было чудесно, пока
> не появился последний локейшн - /forum/, который вообще на другом сервере
> живет. Теперь стоит задача - реврайтить на основном сайте на поддомен для
> $net абсолютно все, кроме /forum/. Как это более гибко описать, чем строчить
> реврайты во всех локейшенах?
- rewrite ^(.*)$ http://net.myserver.ru$1;
+ rewrite ^(/(?!forum/).*)$ http://net.myserver.ru$request_uri?;
--
Игорь Сысоев
http://sysoev.ru
More information about the nginx-ru
mailing list