question on server_name_in_redirect
Maxim Dounin
mdounin at mdounin.ru
Wed Aug 25 15:27:38 MSD 2010
Hello!
On Wed, Aug 25, 2010 at 05:08:31PM +0800, bai.xiaoyu at gmail.com wrote:
> server {
> listen 80;
> server_name example.com:7788 example.com;
> 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 example.com to example.com:7788
>
> 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.
> http://wiki.nginx.org/NginxHttpCoreModule#server_name_in_redirect
>
> 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;
server_name example.com;
rewrite ^ http://example.com:7788$request_uri?;
}
server {
listen 7788;
server_name example.com;
... here actual request processing ...
}
Maxim Dounin
More information about the nginx
mailing list