我目前正在配置 nginx 对一些错误页面和其他“默认”媒体文件(例如 favicon.ico 和 robots.txt)的处理,但我遇到了一个小问题,让某些错误页面按照我想要的方式工作.
基本上,我要做的是为该服务器的根目录下的服务器提供某些文件,例如/var/www/someserver.com/robots.txt。如果该文件不存在,我希望 nginx 转到“默认”,即 /var/www/default/robots.txt。这是我如何(成功)配置的基本要点:
server {
...
root /var/www/someserver.com;
location ~* ^/(robots\.txt)$ {
error_page 404 = @default;
}
location @default {
root /var/www/default;
}
}
Run Code Online (Sandbox Code Playgroud)
这很好用。
我正在尝试对错误页面做同样的事情,但我无法做到这一点:
server {
...
root /var/www/someserver.com;
error_page 404 /404.html;
location ~* ^/(404\.html)$ {
error_page 404 = @default;
}
location @default {
root /var/www/default;
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,如果您访问 someserver.com/404.html,它会首先尝试加载 /var/www/someserver.com/404.html 然后回退到 /var/www/default /404.html 如果没有找到。但是,如果您访问 someserver.com/blahblah,它只会显示 404 页面(如果它设置在 /var/www/someserver.com/ 中)。如果该文件不存在,它不会回退到默认目录。
无论如何,您可能可以完成我想要完成的任务(这就是我包含第一个工作示例的原因)。
有任何想法吗?
编辑:
根据 Martin F 的回答,这就是我最终整理的内容:
# Doesn't work when …
Run Code Online (Sandbox Code Playgroud) 这是一个奇怪的错误,我不确定它来自哪里。这是我正在做的事情的快速总结。
我正在尝试使用 s3fs(FUSE over Amazon)将 FUSE 驱动器安装到运行 Ubuntu 10.10 的 Amazon EC2 实例。s3fs 是根据说明等从源代码编译的。我还在 /etc/fstab 中添加了一个条目,以便驱动器在启动时安装。这是/etc/fstab
看起来的样子:
# /etc/fstab: static file system information.
# <file system> <mount point> <type> <options> <dump> <pass>
proc /proc proc nodev,noexec,nosuid 0 0
LABEL=uec-rootfs / ext4 defaults 0 0
/dev/sda2 /mnt auto defaults,nobootwait,comment=cloudconfig 0 2
/dev/sda3 none swap sw,comment=cloudconfig 0 0
s3fs#mybucket /mnt/s3/mybucket fuse default_acl=public-read,use_cache=/tmp,allow_other 0 0
Run Code Online (Sandbox Code Playgroud)
所以好消息是这很好用。重新启动时,连接正确安装。我也可以这样做:
$ sudo umount /mnt/s3/mybucket
$ sudo mount -a
$ mountpoint /mnt/s3/mybucket
/mnt/s3/mybucket is a mountpoint
Run Code Online (Sandbox Code Playgroud)
很棒,对吧? …