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

浏览 1.2k

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
粉丝
相关文章
问题引入 使用C语言编程时,一般使用malloc和free进行动态内存申请和释放。如果一不小心忘记了调用free进行释放,很容易造成内存泄露。另一方面,频繁地进行malloc和free操作,很容易造成内存碎片。与此同时,因为malloc支持多线程同时操作,所以,使用同步锁是不可避免的。当然,根据malloc的实现原理,线程在进行malloc操作的时候,如果不能获得同步锁,就会另外在进程的heap区域开辟一段子区域进行内存申请,这样有效地避免长时间等待。但是频繁尝试去获得锁也需要一定的时间开销。问题解决 NGINX是一个对性能要求很高的系统。大到架构设计,小到细节实现都对性能提升做了充分的考虑。所以,对应内存管理,除了封装了libc库中的malloc和free操作以外。NGINX也实现了自己的内存管理系统,有效地减少了内存碎片的产生,降低了内存泄露发生的概率,减少了同步操作(尝试)的次数。这些都对NGINX本身性能的提升有一定的帮助。 NGINX自身的内存管理系统最重要的特点就是加强中央集权管理。把内存的申请,释放牢牢地掌握在自己手里。具体来说就是:·&nb
点赞 4
浏览 2.6k
上一篇文章中,我介绍了如何定制属于你自己的Nginx,本文将介绍nginx.conf文件的配置语法、使用方式,以及如何学习新模块提供的配置指令。每个Nginx模块都可以定义自己的配置指令,所以这些指令的格式五花八门。比如content_by_lua_block后跟着的是Lua语法,limit_req_zone后则跟着以空格、等号、冒号等分隔的多个选项。这些模块有没有必然遵循的通用格式呢?如果有,那么掌握了它,就能快速读懂生产环境复杂的nginx.conf文件。其次,我们又该如何学习个性化十足的模块指令呢?其实,所有Nginx模块在介绍它的配置指令时,都遵循着相同的格式:Syntax、Default、Context、Description,这能降低我们的学习门槛。如果你还不清楚这一套路,那就只能学习其他文章翻译过的二手知识,效率很低。比如搭建静态资源服务用到的root、alias指令,该如何找到、阅读它的帮助文档?为什么官方更推荐使用root指令?alias指令又适合在哪些场景中使用呢?nginx.conf配置文件中的语法就像是一门脚本语言,你既可以定义变量(set指令),也可以控制条
点赞 5
浏览 2.1k
原文作者:MikhailIsachenkovofF5,TimoStarkofF5原文链接:使用KernelTLS和SSL_sendfile()提高NGINX性能-NGINX转载来源:NGINX官方网站TLS(传输层安全协议)是一种极为受欢迎的加密协议。在内核(kernel)中实施TLS(即kTLS)可显著降低在用户空间与内核之间复制操作的需求,从而提高NGINX的性能。  通过结合使用kTLS和sendfile(),数据可以直接在内核空间加密,然后再传递到网络堆栈进行传输。这使得我们不再需要将数据复制到用户空间、利用TLS库进行加密、再返回内核空间进行传输的这一过程。kTLS还可以将TLS的处理过程卸载到硬件,包括将TLS对称加密处理任务卸载到网络设备。现代Linux和FreeBSD内核支持将TLS卸载到内核,而NGINX开源版现在也同样能做到!NGINX1.21.4在使用SSL_sendfile()传输静态文件时引入了kTLS支持,可以极大地改善性能。如下所述,内核和
点赞 0
浏览 1.3k