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

Rya*_*tte 2 nginx

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

# /etc/nginx/sites-available/my-site
server {
    ...
}
Run Code Online (Sandbox Code Playgroud)

但我想sendfile off;为那个网站设置。我可以http在文件的开头添加一个块吗?

# /etc/nginx/sites-available/my-site
http {
    sendfile off;
}
server {
    ...
}
Run Code Online (Sandbox Code Playgroud)

这甚至会起作用吗?它会对所有网站产生全球影响吗?

Joe*_*and 6

我认为 nginx 确实非正式地支持多个 http 块,但通常你只会有一个。

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

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

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

Syntax: sendfile on | off;
Default:    sendfile off;
Context:    http, server, location, if in location
Run Code Online (Sandbox Code Playgroud)

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

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


des*_*ess 5

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

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

#...
events {
    #...
}

http {
    #...
    include /etc/nginx/conf.d/*.conf;
    #...
    server {
    #...
    }
}
Run Code Online (Sandbox Code Playgroud)

所以,你的例子可能只是:

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