2014-04-16 54 views
0

我是nginx configs的新手,并且花了很多时间搜索到目前为止。我正在尝试创建一个非常基本的nginx配置文件,以用于“重定向”服务器。将nginx配置server_name重定向到自定义404错误页面

用户需要通过A-record将裸体域(example.com)指向我的重定向服务器IP地址,并将CNAME指向另一个服务器的“www”记录。

重定向服务器的目的是然后执行301将任何/通配符裸域重定向回域的'www'版本,以便我的其他服务器可以正确处理它。

但我也想捕捉任何指向我的服务器IP由A记录错误配置的'WWW'域,并简单地将他们引导到重定向服务器上的自定义错误页面,进一步说明如何设置它们为我的服务正确记帐。

这是我的。 它的工作原理,但由于我是新手编写配置,我想知道是否有更好的方法来处理重定向到第一个服务器块中的自定义错误页面。 TIA!

#redirect to error page if begins with 'www.' 

server { 
    listen 80; 
    server_name ~^www.; #only matches if starts with 'www.'. Is this good enough? 
    rewrite ^(.*)$ /404.html; #is this the correct way to direct to a custom error page? 

    error_page 404 /404.html; 

    location = /404.html { 
     root /usr/share/nginx/html; 
     } 
    } 

#no match, so redirect to www.example.com 

server { 
    listen 80 default_server; 
    rewrite ^(.*)$ $scheme://www.$host$1 permanent; 
} 

回答

2

前缀/后缀服务器名称匹配是faster and easier than regexp

此外,没有理由使用重写。你想返回404,所以做到这一点,nginx将完成所有的工作。顺便说一句,重写你将返回200 OK与内容/404.html而不是404 Not Found

所以在这里,它是:

server { 
    listen 80; 
    server_name www.*; 

    root /usr/share/nginx/html; 

    error_page 404 /404.html; 

    location/{ 
     return 404; 
    } 

    location = /404.html { 
     internal; 
    } 
} 
+0

感谢亚历克斯!这是一种享受。 – bryanus