unknown directive "if" in /usr/local/nginx/nginx.conf

Igor Sysoev igor at sysoev.ru
Wed Nov 25 00:06:11 MSK 2009


On Tue, Nov 24, 2009 at 01:14:28PM -0500, johndesp wrote:

> Igor,
> 
> Thanks.  My ultimate goal is to have the flexibility to inspect the incoming uri and make decisions as to what backend host to send the request to.
> 
> For instance,
> 
> I might want
> 
> Incoming URI  /johndesp/( {1})  ----> proxy_pass  http://host1/johndesp/whatever
> 
> Incoming URI  /johndesp/([0-9] {1})  ----> proxy_pass  http://host1/johndesp/whenever
> 
> example
> 
> /johndesp/b    ---------------- proxy_pass  http://host1:8080/johndesp/whatever             * notice this is not  http://host1:8080/johndesp/whatever/b
> 
> likewise I would want the following:
> 
> johndesp/5    ---------------- proxy_pass  http://host2:8080/johndesp/whenever           * notice this is not  http://host1:8080/johndesp/whatever
> 
> I tried to use the following..however, I did not get the desired result:
> 
> location "~* ^/johndesp/whatever/( {1}"{
> proxy_pass http://host1:8080/johndesp/whatever;
> proxy_set_header X-Real-IP $remote_addr;
> proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
> proxy_set_header Host $http_host;
> proxy_redirect off;
> }
> 
> but I get this error:
> : the using of the regex " ^/johndesp/whatever/( {1}" requires PCRE library in /usr/local/nginx/nginx.conf:43

If you do not need the rewrite module, but want to use regex in
locations, etc., then you need to

  ./configure --with-pcre --without-http_rewrite_module

Also, note that you can not use URI part "/johndesp/whatever" in proxy_pass
if location is given by regex:

 location ~* "^/johndesp/whatever/( {1})" {
    proxy_pass http://host1:8080/johndesp/whatever;

because nginx does not know what it should replace in original URI.
You may use

 location ~* "^/johndesp/whatever/( {1})(.+)$" {
    proxy_pass http://host1:8080/johndesp/whatever/$2;

or

 location ~* "^/johndesp/whatever/( {1})" {
    proxy_pass http://host1:8080;

or

 location /johndesp/whatever/ {
    proxy_pass http://host1:8080/something/els/;


-- 
Igor Sysoev
http://sysoev.ru/en/




More information about the nginx mailing list