Problem with updated nginx

Maxim Dounin mdounin at mdounin.ru
Mon Aug 29 00:45:30 UTC 2011


Hello!

On Sun, Aug 28, 2011 at 05:48:46PM -0400, pvsw1 wrote:

> Hi All,
> 
> I have run nginx on OpenBSD for several years without problems. Recently
> I upgraded to a new OpenBSD and with that to a new nginx. I went from
> nginx 0.7.64 to 0.8.53p5
> nginx still works but I ran into a problem: nginx listens on
> localhost:10080. I use firewall rules to get my traffic there. For some
> reason 0.8.53 sometimes adds the portnumber to an URL resulting in error
> messages. I found a work around but that is not an acceptable final
> solution as it is very difficult to update everything and the problem
> will likely re-appear in the future.
> 
> The details:
> nginx.conf:
> ...
> server {
>     listen       localhost:10080;
>     server_name  www.example.com:80;
> 
>   location ^~ /pfstat {
>     root   /var/mine/data;
>     index  index.html index.htm index.php;
>     autoindex on;
>     }
>   ...
>   }
> ...
> 
> If a html file on the server contains <A HREF="pfstat"> I get a message
> that the connection to nginx was denied and the URL displayed in the
> browser is changed into something like www.example.com:10080/pfstat (the
> port on which nginx listens is added). If the html file on the server
> contains <A HREF="pfstat/"> (additional '/' at the end) everything works
> OK (the 10080 is NOT added to the URL). This problem only exists when
> referring to a directory, references to a file work normally (<A
> HFER="somefile.html">).
> 
> Can anybody shed some light on this. 
> Has anything been changed in this area? 

Short answer:

port_in_redirect off;
http://wiki.nginx.org/HttpCoreModule#port_in_redirect

Long answer:

Most likely it worked for you previously since you have 
"www.example.com:80" (note ":80") in "server_name" directive.  
This is meaningless (it will never match), but resulting redirects 
in 0.7.64 should look like 

    Location: http://www.example.com:80:10080/pfstat/

Since 0.8.48 directive "server_name_in_redirect" defaults to off, 
and hostname from client's request will be used instead, without 
any ":80".  As a result will no longer have ":80" in them, likely 
breaking things for you.

Correct aproach in both versions is to use 

    port_in_redirect off;

as shown above in short answer.

Maxim Dounin



More information about the nginx mailing list