将 nginx 配置 server_name 重定向到自定义 404 错误页面

bry*_*nus 0 redirect nginx

我是 nginx 配置的新手,到目前为止已经花了很多时间谷歌搜索。我正在尝试创建一个非常基本的 nginx 配置文件,用于“重定向”服务器。

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

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

但我还想捕获通过 A 记录指向我的服务器 IP 的任何配置错误的“www”域,并简单地将它们定向到重定向服务器上的自定义错误页面,并进一步说明如何为我的服务器正确设置其帐户。服务。

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

#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;
}
Run Code Online (Sandbox Code Playgroud)

Ale*_*Ten 5

前缀/后缀服务器名称匹配比正则表达式更快更容易

另外,没有理由使用重写。你想返回 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;
    }
}
Run Code Online (Sandbox Code Playgroud)