如何在nginx中生成用户自定义的"404未找到页面"?

3 投票
2 回答
778 浏览
提问于 2025-04-18 08:40

我在我的nginx服务器上部署了一个示例的django项目,使用了gunicorn。我想在用户输入错误的URL时,显示我自己设计的404页面未找到的HTML页面。我在我的nginx.conf文件中尝试了这样设置:

server {
listen localhost:8899;
root /home/mulagala/Desktop/projects/28-05-2014/mysite/mysite/templates
access_log  /var/log/nginx/example.log;
error_log /var/log/nginx/example.error.log;

location / {
    proxy_pass http://127.0.0.1:8060;
}

# redirect server error pages to the static page /40x.html
#
  error_page  404              /404.html;
  location  = /404.html {
    }

# redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
    }


location /static/ {
    autoindex on;
    alias /home/mulagala/Desktop/projects/28-05-2014/mysite/static/;
}
} 

但是当我输入错误的URL时,仍然看到django默认的消息页面未找到 (404),并且显示了我所有的URL。我需要在我的django项目中做什么改变吗?或者还有其他需要注意的地方吗?我哪里出错了?任何帮助都非常感谢。

2 个回答

0

这里有一个Nginx配置的例子,用来显示404错误页面,这个是用nginx来处理,而不是用django自己来处理:

upstream faarco {
    server faarco_app:8000;
}

limit_req_zone $binary_remote_addr zone=one:10m rate=50r/s;

server {
    client_max_body_size 20m;

    listen 80;

    location / {
        proxy_pass http://faarco;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $host;
        proxy_redirect off;
        proxy_intercept_errors on;  # note
        error_page 404 /custom_404.html;  # note
    }

    location /static/ {
        alias /code/static/;
    }

    location /media/ {
          root /code/;
    }

    error_page 404 /custom_404.html;
    location = /custom_404.html {  # note
        root /code/static/error_pages;
        internal;
    }
}

确保/code/static/error_pages/custom_404.html这个文件和路径是存在的,并且权限设置为755

3

你不需要这个 error_page 404 的设置,并且要确保你有 proxy_intercept_errors off;。如果这两个条件都满足,nginx 就会让应用程序(在这里是 Django)自己返回它的 404 页面。

这个配置文件应该没问题:

server {
    listen localhost:8899;
    root /home/mulagala/Desktop/projects/28-05-2014/mysite/;
    access_log /var/log/nginx/example.log;
    error_log /var/log/nginx/example.error.log;

    location / {
        proxy_pass http://127.0.0.1:8060;
    }

    location /static/ {
        autoindex on;
        alias /home/mulagala/Desktop/projects/28-05-2014/mysite/static/;
    }
} 

撰写回答