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