浏览 1.2k
NGINX是一种现代技术,主要用于负载平衡,但用途更多。尽管它看起来像是一项非常复杂的技术,但是如果您了解基础知识,那么使用NGINX进行操作将非常简单。根据我的经验,我还认为NGINX很少,但是在学习了基础知识并继续前进之后,这非常简单容易。因此,在深入研究配置之前,我先为您介绍NGINX。
NGINX是可以用作反向代理,负载均衡器,邮件代理或HTTP缓存的Web服务器。它可以部署在您的本地计算机或任何云中。自发布以来,Nginx便因其轻巧的资源利用率以及在最少的硬件上轻松扩展的能力而变得越来越流行。NGINX有很多产品,但是在本文中,我将解释使用NGINX开放源代码版本。
除了NGINX之外,行业中还使用了许多其他负载均衡器,例如。
NGINX的安装方式可能会有所不同,具体取决于操作系统。请参阅链接,安装NGINX - http://nginx.org/en/docs/install.html。
brew install nginx
brew services start nginx
NGINX默认的配置文件nginx.conf
位于/usr/local/nginx/conf
,/etc/nginx
或/usr/local/etc/nginx
。与其他产品一起配置NGINX时,您可能需要自定义的NGINX配置。在这种情况下,您可以创建新的配置文件并导入到默认的NGINX配置文件nginx.conf
。
NGINX配置文件由指令组成。这些指令控制NGINX模块。指令有两种类型,即简单指令和块指令。
简单的指令由名称和参数组成,这些参数和参数之间用空格分隔,并以分号(;
)结束。
名称参数;
块伪指令具有与简单伪指令相同的结构,但它以分号({
和}
)结尾,而不是分号。如果一个块指令在括号内可以有其他指令,则称为上下文。这样的上下文可以是event,http,server,location等。
放在任何上下文之外的指令都被认为是在主要上下文中。在events
和http
指令驻留在main
上下文server
中http
,并location
在server
。
#
标志后的其余行被视为注释。
这是一个示例NGINX代理配置文件。
上游sample.server.com {
服务器server1_ip:port;
服务器server2_ip:port;
}
服务器{
收听80;
server_name some.server.com;
位置/ {
proxy_pass http://sample.server.com;
}
}
在此配置文件中,有上游,服务器,监听,服务器名,位置,pass_proxy指令。
上游定义服务器组。服务器可以在不同的端口上侦听。另外,可以混合使用侦听TCP和UNIX域套接字的服务器。上游名称应该是唯一的。每个服务器都用关键字server定义。
因此,让我们假设你有两台服务器作为服务器1的IP172.42.42.10
和服务器2与IP 172.42.42.20
,命名为上游sample.server.com
应定义为,
上游sample.server.com {
服务器172.42.42.10:8080;
服务器172.42.42.20:8081;
}
默认上游使用加权循环平衡方法。在上游内部,还有另一个名为server的指令,它定义服务器的地址和其他参数。以下关键字可用于服务器配置流量路由。
weight
—使用此关键字,您可以控制服务器之间的流量。默认情况下,1
上游sample.server.com {
服务器172.42.42.10:8080重量= 2 ;
服务器172.42.42.20:8081;
}
在上面的示例中,每3个请求将如下分配:2个请求到达172.42.42.10:8080
(server1),另一个请求到达172.42.42.20:8081
(server2)。如果在与服务器通信期间发生错误,该请求将被传递到下一个服务器,依此类推,直到尝试所有正常运行的服务器为止。如果无法从任何一台服务器获得成功的响应,则客户端将收到与最后一台服务器的通信结果。
backup
—将服务器标记为备用服务器。当主服务器不可用时,将传递请求。
有关ngx_http_upstream_module的更多详细信息
服务器块设置虚拟服务器的配置。基于IP的虚拟服务器(基于IP地址)和基于名称的虚拟服务器(基于“主机”请求标头字段)之间没有明确区分。服务器名称使用关键字server_name定义。 指令listen定义端口服务器应监听的端口。NGINX默认端口80为HTTP通信打开,端口443为HTTPS通信打开。
服务器{
收听80;
server_name some.server.com;
}
当请求发送到NGINX服务器时,NGINX首先确定应由哪个服务器处理该请求。与上述情况一样,主机名必须为some.server.com
。您还可以定义多个主机名和/或使用多个服务器块,
服务器{
收听80;
server_name some.server.com www.some.server.com;
}服务器{
收听80;
server_name some.server1.com www.some.server1.com;
}服务器{
收听80;
server_name some.server2.com www.some.server2.com;
}
如果请求没有主机,您可以将服务器设置为
服务器{
收听80;
server_name “”;
返回444;
}
在这里,服务器名称设置为一个空字符串,该字符串将与没有“ Host”头字段的请求进行匹配,并且返回特殊的NGINX的非标准代码444,以关闭连接。
您可以通过以下链接阅读有关如何设置服务器名称的更多详细信息:request_processing。
在服务器块内部,定义了一个位置块。根据请求URI设置此参数。甲位置可以通过一个前缀字符串来限定,或者由正则表达式。
例如,您有两个URI作为www.example.com/to/example和www.example.com/sample。现在,您可以看到两个URI具有相同的主机名,即www.example.com。因此,您可以将服务器名称定义为www.example.com。将看到如何配置NGINX。
使用location / {....}
会将您的所有请求通过一台服务器传递。
上游sample.server.com {
服务器172.42.42.40:8080;
服务器172.42.42.40:8081;
}
服务器{
收听80;
server_name www.example.com;
位置/ {
proxy_pass http://sample.server.com;
}
}
现在说您的两个URI需要不同的配置,例如超时,无重试等。
上游sample.server.com {
服务器172.42.42.40:8080;
服务器172.42.42.40:8081;
}
服务器{
收听80;
server_name www.example.com;
位置/ to {
***** CONFIGURATIONS *****
proxy_pass http://sample.server.com;
}
location / to / example {
***** CONFIGURATIONS *****
proxy_pass http://sample.server.com;
}
location / sample {
***** CONFIGURATIONS *****
proxy_pass http://sample.server.com;
}
}
在以上示例中,
www.example.com/to
被发送到顶部位置。www.example.com/to/examples
被发送到中间位置。www.example.com/sample
发送到底部位置。您可以为每个位置添加不同类型的配置。有关更多信息,请查看文章http://nginx.org/en/docs/http/ngx_http_core_module.html#location。
pass_proxy指令用于将位置映射到上游。这意味着,当请求到达该位置时,通过proxy_pass将该请求指向上游,在该上游将请求发送到适当的服务器。
希望本文对理解NGINX中的基本配置有所帮助。我提供了链接以供进一步阅读。请在评论中留下反馈。喜欢和分享欢呼!!!
按点赞数排序
按时间排序