我的 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;
}