Conditional rule

Vincent MAUGE vmauge at gmail.com
Thu May 13 00:29:52 MSD 2010


2010/5/12 Igor Sysoev <igor at sysoev.ru>:
> On Wed, May 12, 2010 at 10:01:12PM +0200, Vincent MAUGE wrote:
>
>> 2010/5/12 Igor Sysoev <igor at sysoev.ru>:
>> > On Wed, May 12, 2010 at 07:13:00PM +0200, Vincent MAUGE wrote:
>> >
>> >> Sorry for the previous partial email.
>> >>
>> >> Hey,
>> >>
>> >> I need to add conditional rule with more than one test.
>> >> I need something like :
>> >> if ($remote_addr != "aa.bb.cc.dd" && $request_uri !~  ^/XXXXX$)
>> >> {
>> >>    rewrite ...
>> >> }
>> >> else{
>> >>   proxy_pass ...
>> >> }
>> >>
>> >> I don't find the good nginx syntax to obtain a such behaviour.
>> >> I try :
>> >> if ( )  {
>> >>    if () {
>> >>   }
>> >> }
>> >> without success
>> >>
>> >> What is the proper way to do such condition ?
>> >
>> > nginx does not support such syntax.
>> > However, the proper way is to not use "if"s at all.
>> > nginx should be configured using locations but not if/rewrites.
>> >
>> > Instead of backward logic:
>> >
>> >  if ($request_uri !~ ^/XXXXX$) {
>> >      part A
>> >  }
>> >
>> > you should use clear logic:
>> >
>> >    location / {
>> >        part A
>> >    }
>> >
>> >    location /XXXXXX {
>> >        part B
>> >    }
>> >
>> > What do you want to configure ?
>> >
>>
>> My nginx is configure as a reverse proxy (http and https).
>> I want to allow some ip to access both for example 10.10.10.10.
>> Others are allow to access only https and get a permanent redirect on
>> http to https except for specific url where I allow http/https for
>> exemple directory /documentation.
>>
>> Whar is the best way ? to configure 2 location ?
>
> http {
>     geo $https_only {
>         default      1;
>         10.10.10.10  0;
>         10.10.10.20  0;
>         ...
>     }
>
>     server {
>          listen 80;
>
>          root  ..
>
>          location / {
>              if ($https_only) {
>                  rewrite ^ https://site.com$request_uri?  permanent;
>              }
>              proxy_pass ...
>          }
>
>          location /XXXX {
>              proxy_pass ...
>          }
>     }
>
>     server {
>          listen 443;
>
>          ssl stuff
>
>          root  ..
>
>          location / {
>              proxy_pass ...
>          }
>     }
>
>
> --
> Igor Sysoev
> http://sysoev.ru/en/
>

Thanks Igor. This match exactly my need. I didn't notice geo Module until now.

Vincent



More information about the nginx mailing list