了解NGINX配置文件
了解NGINX配置文件的结构以使您的服务器获得最佳性能非常重要。
此外,通过在NGINX配置中的正确上下文中应用指令,将使您能够消除重复的代码并更好地管理基础架构。
因此,为了帮助您理解NGINX配置文件的结构,本文将重点介绍NGINX配置文件的详细结构。
什么是Nginx上下文?
让我们开始检查NGINX配置文件的位置。
核心配置文件(nginx.conf)可以在/etc/nginx中找到。
该位置将根据NGINX的安装过程而有所不同。
在文本编辑器中打开核心NGINX配置文件。
首先,您会注意到配置是用花括号{和}包围的树状结构组织的。
用括号括起来的这些位置称为用于放置配置指令的上下文。
此外,配置指令及其参数以分号结尾。
在NGINX中,上下文可以嵌套在其他上下文中,从而创建层次结构。
在以下示例中,HTTP上下文声明了HTTP协议的设置。
虚拟主机设置在服务器上下文中声明,并包含在http上下文中。
服务器上下文中包含用于存储URL设置的位置上下文。
# Global context ... ... # http context http{ ... ... # Server context server { listen 80; server_name example.com; ... ... # Location context location/{ root /var/www/html; try_files $uri $uri/=404; ... ... } } # Server context server { ... ... # Location context location/{ ... ... } } ... ... }
NGINX配置文件–主要上下文
主要上下文用于全局设置NGINX的设置,并且是唯一不被花括号包围的上下文。
通常,主上下文位于核心NGINX配置文件的开头。
主上下文的指令不能在任何其他上下文中继承,因此不能被覆盖。
user nginx; worker_processes auto; pid /run/nginx.pid; ... ...
NGINX配置文件–事件上下文
事件上下文用于设置连接处理的全局选项。
事件上下文包含在主上下文中,并且只能有一个这样的上下文。
您可以在此上下文中放置的指令是设置连接处理方法,连接数以及其他一些指令。
# main context events { # events context worker_connections 768; multi_accept on; } ... ...
NGINX配置文件– HTTP上下文
HTTP上下文包含用于处理HTTP和HTTPS流量的指令。
HTTP上下文是主上下文的子级,在为您的域声明了虚拟主机设置的每个服务器上下文中,绝对需要HTTP上下文。
user nginx; worker_processes auto; pid /run/nginx.pid; ... ... events { # events context worker_connections 768; multi_accept on; ... ... } http { sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; ... ... }
NGINX配置文件–服务器上下文
NGINX虚拟主机设置在服务器上下文中定义,而服务器上下文又包含在HTTP上下文中。
HTTP上下文中可以有多个服务器上下文。
服务器上下文中的指令控制与特定域或者IP地址关联的资源请求的处理。
user nginx; worker_processes auto; pid /run/nginx.pid; ... ... events { # events context worker_connections 768; multi_accept on; ... ... } http { sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; ... ... server { listen 80; server_name domain1.com; root /var/www/html/wordpress; ... } server { listen 80; server_name domain2.com; root /var/www/html/drupal; ... } }
NGINX配置文件–位置上下文
位置上下文用于定义指令以处理客户端请求。
当对资源的请求到达NGINX时,它将尝试将URI与位置之一进行匹配并进行相应的处理。
可以在服务器块内定义多个位置上下文。
此外,位置上下文也可以嵌套在另一个位置上下文中。
http { ... ... server { listen 80; server_name domain1.com; root /var/www/html/wordpress; ... location /some_url { # configuration for processing URIs starting with /some_url } location /another_url { # configuration for processing URIs starting with /another_url } } server { listen 80; server_name domain2.com; root /var/www/html/drupal; ... location /some_url { # configuration for processing URIs starting with /some_url } location /some_other_url { # configuration for processing URIs starting with /some_other_url } } }
上游环境
允许上游上下文定义NGINX可以代理请求的后端服务器池。
上下文使NGINX能够在代理请求时执行负载平衡。
上游上下文在HTTP上下文内部和任何服务器上下文外部定义。
一旦定义了上游服务器,就可以在服务器上下文中使用相同的名称,以将请求传递到后端服务器池。
http{ ... ... upstream backend_servers { server host1.example.com; server host2.example.com; server host3.example.com; } server { listen 80; server_name example.com; location/{ proxy_pass https://backend_servers; } } }
邮件内容
NGINX可以将IMAP,POP3和SMTP协议代理到上游邮件服务器之一或者托管邮件帐户的外部邮件服务。
为此,NGINX使用邮件上下文,该上下文允许在代理邮件连接的所有方面使用配置指令。
邮件上下文是在主上下文中定义的,即与HTTP上下文处于同一级别。
# main context mail { server_name mail.example.com; auth_http localhost:9000/cgi-bin/nginxauth.cgi; proxy_pass_error_message on; ... } http { } ... ...
NGINX配置文件–如果上下文
if-context允许有条件地执行其中定义的指令。
上下文与任何其他编程语言中的if语句相同。
由于此处讨论的某些限制,应尽可能避免if上下文。
http { server { location /some_url { if (test_condition) { # do some stuff here } } } }
Limit_except上下文
limit_except上下文允许阻止使用除明确允许的所有HTTP方法之外的所有HTTP方法。
在位置上下文中,您可以限制某些HTTP方法的使用,例如禁止客户端使用limit_except上下文发送POST请求。
只需在limit_except上下文中定义两个元素,第一个是允许的方法,第二个是受限制影响的受众。
... ... location /wp-admin/{ limit_except GET { allow 127.0.0.1; deny all; } } ... ...
上面的limit_except示例允许所有访问者在/wp-admin位置使用GET标头。
如果其他HTTP标头仅来自本地地址,则允许使用其他HTTP标头。
NGINX配置文件的其他上下文
除了到目前为止我们已经讨论过的上下文,NGINX中几乎没有其他可用的上下文,下面将进行描述。
这些上下文取决于可选模块,很少使用。
split_clients:split_client上下文用于将客户端请求分为两个或者多个类别。
此上下文在http上下文内部定义,主要用于A/B测试。geo:geo上下文用于对客户端IP地址进行分类。
它根据连接的IP地址映射变量的值。charset_map:charset_map上下文用于将特定的字符集添加到" Content-Type"响应头字段。
另外,使用上下文可以将数据从一种字符集转换为另一种字符集,但有一些限制。map:map上下文创建变量,其值取决于其他变量的值,并在http上下文中定义。
perl/perl_set:perl上下文用于在Perl中实现位置和变量处理程序,并将Perl调用插入SSI。
此外,使用perl_set上下文可以为特定变量安装Perl处理程序。类型:类型上下文用于映射具有正确文件扩展名的MIME类型。
类型上下文可以出现在http,服务器或者位置上下文中。
默认的MIME类型通过NGINX核心配置文件nginx.conf加载。