点赞
评论
收藏
分享
举报
配置NGINX的基础-如何在NGINX上进行基本配置
发表于2021-03-17 10:30

浏览 1.1k

NGINX是一种现代技术,主要用于负载平衡,但用途更多。尽管它看起来像是一项非常复杂的技术,但是如果您了解基础知识,那么使用NGINX进行操作将非常简单。根据我的经验,我还认为NGINX很少,但是在学习了基础知识并继续前进之后,这非常简单容易。因此,在深入研究配置之前,我先为您介绍NGINX。

NGINX简介

NGINX是可以用作反向代理负载均衡器邮件代理或HTTP缓存的Web服务器。它可以部署在您的本地计算机或任何云中。自发布以来,Nginx便因其轻巧的资源利用率以及在最少的硬件上轻松扩展的能力而变得越来越流行。NGINX有很多产品,但是在本文中,我将解释使用NGINX开放源代码版本。

除了NGINX之外,行业中还使用了许多其他负载均衡器,例如。

  • Traefik-一个以微服务为中心的现代应用程序负载平衡器和用Golang编写的反向代理。
  • 跷跷板-另一种用Golang编写的开源负载均衡器。它最初是由Google SRE创建的,目的是为负载均衡内部Google基础架构流量提供强大的解决方案。
  • HAProxy-提供反向代理以及TCP和HTTP流量的负载平衡。
  • Neutrino —是最初由eBay开发的基于Scala的软件负载平衡器。Neutrino的优势在于其运行时环境JVM的广泛兼容性。

安装NGINX

NGINX的安装方式可能会有所不同,具体取决于操作系统。请参阅链接,安装NGINX - http://nginx.org/en/docs/install.html

在Mac OS上安装NGINX

  1. 执行命令安装NGINX- brew install nginx
  2. 运行命令以启动NGINX- brew services start nginx
  3. 打开浏览器,然后输入http://127.0.0.1:8080/

NGINX如何工作?

NGINX默认的配置文件nginx.conf位于/usr/local/nginx/conf/etc/nginx/usr/local/etc/nginx。与其他产品一起配置NGINX时,您可能需要自定义的NGINX配置。在这种情况下,您可以创建新的配置文件并导入到默认的NGINX配置文件nginx.conf

如何创建NGINX配置文件

NGINX配置文件由指令组成。这些指令控制NGINX模块。指令有两种类型,即简单指令块指令

简单的指令由名称和参数组成,这些参数和参数之间用空格分隔,并以分号(;)结束。

名称参数;

块伪指令具有与简单伪指令相同的结构,但它以分号({})结尾,而不是分号。如果一个块指令在括号内可以有其他指令,则称为上下文。这样的上下文可以是eventhttpserverlocation等。

放在任何上下文之外的指令都被认为是在主要上下文中。在eventshttp指令驻留在main上下文serverhttp,并locationserver

#标志后的其余行被视为注释。

这是一个示例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/examplewww.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将该请求指向上游,在该上游将请求发送到适当的服务器。

重要位置:

  • 在-> / usr / local / etc / nginx / servers /中添加配置
  • 默认配置-> /usr/local/etc/nginx/nginx.conf
  • 日志将位于-> / usr / local / var / log / nginx /
  • 默认的webroot是-> / usr / local / var / www /
  • 默认监听地址-> http:// localhost:8080

希望本文对理解NGINX中的基本配置有所帮助。我提供了链接以供进一步阅读。请在评论中留下反馈。喜欢和分享欢呼!!!

参考


已修改于2023-03-08 12:51
创作不易,留下一份鼓励
阿尔巴

暂无个人介绍

关注



写下您的评论
发表评论
全部评论(0)

按点赞数排序

按时间排序

关于作者
阿尔巴
这家伙很懒还未留下介绍~
12
文章
10
问答
11
粉丝
相关文章
本文地址: https://www.laruence.com/2010/05/20/1495.html转载请注明出处现在普遍的Nginx+PHPcgi的做法是在配置文件中, 通过正则匹配(Nginx(PHP/fastcgi)的PATH_INFO问题)设置SCRIPT_FILENAME,今天小顿发现了一个这种方式的安全漏洞.比如,有http://www.laruence.com/fake.jpg,那么通过构造如下的URL,就可以看到fake.jpg的二进制内容:http://www.laruence.com/fake.jpg/foo.php为什么会这样呢?比如,如下的nginxconf:location~\.php($|/){     fastcgi_pass127.0.0.1:9000;     fastcgi_indexindex.php;     set$script$uri;&n
点赞 4
浏览 1.3k
Sticky是nginx的一个模块,它是基于cookie的一种nginx的负载均衡解决方案,通过分发和识别cookie,来使同一个客户端的请求落在同一台服务器上,默认标识名为route1.客户端首次发起访问请求,nginx接收后,发现请求头没有cookie,则以轮询方式将请求分发给后端服务器。2.后端服务器处理完请求,将响应数据返回给nginx。3.此时nginx生成带route的cookie,返回给客户端。route的值与后端服务器对应,可能是明文,也可能是md5、sha1等Hash值4.客户端接收请求,并保存带route的cookie。5.当客户端下一次发送请求时,会带上route,nginx根据接收到的cookie中的route值,转发给对应的后端服务器。NginxStickyModulemodifiedandextendedversion;seeChangelog.txtDescriptionAnginxmoduletoaddastickycookietobealwaysforwardedtothesameupstreamserve
点赞 0
浏览 2.4k
原文作者:LiamCrillyofF5原文链接:借助NGINXJavaScript模块,充分利用JavaScript的强大功能和便利性以快速处理每个请求-NGINX 转载来源:NGINX官方网站编者按——题为“NGINXJavaScript模块简介”的博文已重定向到此处。本文已更新,所涉及的NGINXJavaScript模块指令和特性截至2021年4月均受支持。 NGINXJavaScript模块(njs)现已作为NGINX开源版1.11.10和 NGINXPlusR12 中的稳定模块正式推出。[该模块最初称为nginxScript,一些早期博文中均使用这一名称。]自 2015年9月 NGINXJavaScript推出以来,我们一直在稳步推进各项工作,为这一稳定模块添加了不同特性和语言支持。  NGINXJavaScript是面向NGINX和NGINXPlus的一种独特的JavaScript实现,专为服务器端用例和按请求处理
点赞 0
浏览 1.5k