小编Jim*_*m D的帖子

如何在 nginx 中设置回退错误页面?

我目前正在配置 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)

nginx

10
推荐指数
2
解决办法
4万
查看次数

为什么在远程(通过 Fabric)执行时 mount -a 没有正确安装保险丝驱动器?

这是一个奇怪的错误,我不确定它来自哪里。这是我正在做的事情的快速总结。

我正在尝试使用 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)

很棒,对吧? …

fuse fabric s3fs

3
推荐指数
1
解决办法
3168
查看次数

标签 统计

fabric ×1

fuse ×1

nginx ×1

s3fs ×1