Conditional rule
Igor Sysoev
igor at sysoev.ru
Thu May 13 00:20:21 MSD 2010
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/
More information about the nginx
mailing list