如何自定义 404 错误页面 (ubuntu nginx)

How to customize a 404 error page (ubuntu nginx)

我目前正在建立自己的网站,其中一个 运行 就是丑陋的 404 错误页面。我正在 运行 在 Ubuntu 上设置一个 LEMP 堆栈,所以我的默认错误页面是一个 nginx 页面。不用说,我不喜欢默认错误页面的外观,并且想更改它。我已经看到了如何执行此操作的各种方法,但其中很多都涉及 Apache(可能相同)、.htaccess 等。

不过,我相信一定有更简单的方法来做到这一点。 404 页面不就是我们应该能够编辑的简单 .html 页面吗?如何在不使用其他人的情况下以最简单的方式编辑默认 404 页面?

答案是肯定的,有一种简单的方法可以将 404 页面自定义为 HTML 文件,至少在 LEMP 堆栈上是这样。假设您没有重新组织 "too many" 个文件,唯一需要做的就是创建一个文件。

解释:
如果您转到 /etc/nginx/sites-available/default.conf 并打开它,您会注意到一个类似于此的块:

server {
    listen 80 default_server;
    listen [::]:80 default_server ipv6only=on;

    root /usr/share/nginx/html;
    index index.php index.html index.htm;

    # Make site accessible from http://localhost/
    server_name localhost unaviamedia.ca;

    location / {
        # First attempt to serve request as file, then
        # as directory, then fall back to displaying a 404.
        try_files $uri $uri/ =404;
        # Uncomment to enable naxsi on this location
        # include /etc/nginx/naxsi.rules
    }

    error_page 404 /404.html;
    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
        root /usr/share/nginx/html; 
    }

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_index index.php;
        include fastcgi_params;
    }

    .......

}

免责声明:
从这一行可以看出: root /usr/share/nginx/html; ,我的主目录是“/usr/share/nginx/html”。如果您的不同,您将需要更改我提到的下一个文件路径。


注意到这一行:error_page 404 /404.html;,在页面中间?这是您网站的 404 HTML 错误页面的路径。

解释:

  • error_page - 指定此行属于 HTTP 错误页面。
  • 404 - 此页面将响应的特定 HTTP 错误代码。
  • /404.html - "root-relative" 文件路径,包括文件名。
    • 如果您的根与上面的不同,您将需要更改此文件路径以反映差异(如上所述)。

但是,如果您转到上面的路径,您会注意到目录中没有该名称的文件。因此,将显示默认的 nginx 错误页面。

要更改此设置,只需制作一个自定义 HTML 页面作为您的 404 错误页面,并将其作为“404.html”保存在您的根目录中。然后,上述路径(error_page 404 /404.html;)在出现404错误时将能够显示您的自定义页面。


我相当确定您可以为您可能希望涵盖的任何其他 HTTP 错误代码添加必要的 "error_page" 行,或者将多个错误代码路由到相同的通用错误页面(但我没有尝试过这个)。另外,我相当确定其他服务器类型的设置是相同的,但同样,我还没有尝试过。

如果这不正确(或可以做得更好),或者这是否会导致以后出现意外问题,请告诉我。