【发布时间】:2021-10-11 10:48:45
【问题描述】:
我想托管用户上传的 HTML 文件,如果他们提供了自定义 404,我需要显示它,否则显示我自己的 404。
示例工作流程:
- 访问者尝试访问 example.com/pages/page1.html
-
pages/page1.html不存在但 $user 已上传404.html所以显示它 - $user 没有提供
404.html所以自己显示简单的消息
到目前为止,我已经介绍了第 1 步和第 2 步,但无法为最后一步制定逻辑。
我的 /simplified/ 配置:
# each user has their own storage path etc
# just to illustrate
map $host $user {
dog.example.com group/1/2/3;
cat.example.com group/4/5/1;
dog-want-cookie.example.com group/9/9/9;
}
server {
listen 8000;
server_name ~^(?<vhost>[^.]*)\.example\.com$;
root /sites/$user;
location / {
try_files $uri $uri/index.html @not_found;
}
location @not_found {
internal;
error_page 404 /404.html;
}
}
不确定在哪里为我自己的错误“页面”“调用”配置。
location @my404 {
return 404 "Page not found.";
}
我在 Debian 上使用 Nginx 1.19.3。
【问题讨论】:
-
你是打算自己写
404.html还是使用Nginx默认的404响应作为后备? -
我想使用我自己的 404 作为后备。最好通过简单地返回带有消息的错误(绕过模板查找/渲染)来实现这一点,如上面的
location @my404。
标签: nginx configuration