在 Nginx 中指定可跨多个主机名工作的位置

在 Nginx 中指定可跨多个主机名工作的位置

我的 Nginx 服务器为多个具有不同主机名的站点提供服务。我想提供包含对其他文件(在我的情况下是一张图片)的引用的美观的 http 错误。

这是使 404 错误对特定主机名起作用的配置:

server {
    listen       80;
    server_name  example.com;

    ...

    location /http-error {
        alias   /usr/share/nginx/http-error;
    }

    error_page  404              /404.html;
    location = /404.html {
        root   /usr/share/nginx/http-error;
    }
}

这允许指定目录中美观的 404 错误所需的所有文件/usr/share/nginx/http-error

但目前我必须为每个服务器名称重复这些行。有没有更有效的方法来指定一个全局location指令,该指令适用于每个主机名,除非它在主机名的服务器块中被覆盖/禁用?

答案1

Nginx 没有全局别名,因为location指令仅在上下文中可用server(以及另一个location,但最终也会在server{}块内)。error_page不过,可以直接在http{}上下文中使用。对于全局(或重复)别名,您可以使用include

http {
    error_page  404  /404.html;

    server {
        listen       80;
        server_name  example.com;
        include      /etc/nginx/global-aliases.conf;
    }

    server {
        listen       80;
        server_name  example.org;
        include      /etc/nginx/global-aliases.conf;
    }
}

/etc/nginx/global-aliases.conf

location = /404.html {
    root   /usr/share/nginx/http-error;
}

相关内容