单个 Nginx 站点可以有自己的 http 块吗

单个 Nginx 站点可以有自己的 http 块吗

假设我有一个网站的 Nginx 配置。

# /etc/nginx/sites-available/my-site
server {
    ...
}

但我想sendfile off;针对该网站进行设置。我可以http在文件开头添加一个块吗?

# /etc/nginx/sites-available/my-site
http {
    sendfile off;
}
server {
    ...
}

这真的有用吗?这会对所有网站产生全局影响吗?

答案1

我认为 nginx 确实非官方地支持多个 http 块,但通常只有一个。

这个想法是,您有一个 http 块/上下文,然后在 http 块内有一个或多个服务器块。在服务器块内,您可以有一个或多个位置块。

配置设置是继承的,可以使用上述嵌套方法覆盖。

关于sendfile,它可以在任何块内配置:

Syntax: sendfile on | off;
Default:    sendfile off;
Context:    http, server, location, if in location

(看:http://nginx.org/en/docs/http/ngx_http_core_module.html#sendfile

因此,您只需将“sendfile off;”添加到您的服务器块中,这将覆盖在 http 块中设置的 sendfile 值。

答案2

简短回答:不需要,在您的站点配置中您已经在 http{} 块中。

例如,CentOS 7 的默认 nginx.conf 如下所示:

#...
events {
    #...
}

http {
    #...
    include /etc/nginx/conf.d/*.conf;
    #...
    server {
    #...
    }
}

因此,您的示例可能只是:

# /etc/nginx/sites-available/my-site
sendfile off;
# Any http block specific directives (like map) can also go here
}
server {
    ...
}

答案3

不,nginx 不支持多个 http 块...如果您尝试,您将收到错误:

"http" directive is duplicate in /etc/nginx/nginx.conf:xyz

相关内容