question on server_name_in_redirect

Maxim Dounin mdounin at
Wed Aug 25 15:27:38 MSD 2010


On Wed, Aug 25, 2010 at 05:08:31PM +0800, bai.xiaoyu at wrote:

>  server {
>          listen        80;
>         server_name;
>         server_name_in_redirect on;
>         root         /var/www/html/exampel/;
>         index        index.php index.html;
> According to the wiki, this should automatically redirect any request
> to to
> If server_name_in_redirect is on, then Nginx will use the first value
> of the server_name directive for redirects. If server_name_in_redirect
> is off, then nginx will use the requested Host header.
> But it didn't work in my case.  On nginx 0.8.44

You misunderstood wiki.  It says "nginx will use first value ... 
for redirects", but it doesn't say anything about "all request 
will be redirected".  Server name will be only used if nginx 
would issue redirect for some reason (e.g. directory redirect to 
add trailing slash).

Note well: using port in server_name doesn't make sense as nginx 
only match hostname part of a request's Host header against it.  
Distinction between different ports is made at socket level.

If you want all requests to port 80 to be redirected to port 7788 
you should write something like this:

    server {
        listen 80;
        rewrite ^$request_uri?;

    server {
        listen 7788;
        ... here actual request processing ...

Maxim Dounin

More information about the nginx mailing list