[转帖]Nginx(3):上手Nginx,从配置文件开始

nginx,上手,配置文件,开始 · 浏览次数 : 0

小编点评

**nginx全局配置events模块** **stream**模块用于配置多台服务器的TCP负载均衡。 **主要参数:** * **worker_connections**: 指定每个worker进程能处理的最大连接数。默认值为65536。 * **upstream**: 用于定义多个服务器组的配置。 * **server**: 用于定义每个服务器的信息,包括IP地址、端口号、权重等。 **示例配置:** ```nginx events { worker_connections 1024; stream { upstream MyServer { server 192.168.190.129:6000 weight=1 max_fails=3 fail_timeout=30s; server 192.168.190.129:6002 weight=1 max_fails=3 fail_timeout=30s; } server { proxy_connect_timeout 1s; listen 8000; proxy_pass MyServer; } } } ``` **注释:** * **worker_connections**指定每个worker进程能处理的最大连接数为1024。 * **upstream**定义了两个服务器组,分别处理端口为6000和6002的请求。 * **server**定义了每个服务器的信息,包括IP地址、端口号、权重等。 * **stream**定义了使用多个服务器组进行TCP负载均衡的配置。

正文

https://cloud.tencent.com/developer/article/1886147?areaSource=&traceId=

 

 

其实吧,我配置 tcp 负载均衡的时候也就弄了一下配置文件,也没了解太多的东西。

文章目录

组成部分

看到一张还不错的图:


我也知道,这么多东西哪里背的住,但是有个速查文档也不错啊。

main 全局配置

nginx在运行时与具体业务功能(比如http服务或者email服务代理)无关的一些参数,比如工作进程数,运行的身份等。

user  www www;	# 指定nginx进程使用什么用户启动
worker_processes 4;	# 指定启动多少进程来处理请求,一般情况下设置成CPU的核数。
#如果开启了ssl和gzip更应该设置成与逻辑CPU数量一样甚至为2倍,可以减少I/O操作。
#使用grep ^processor /proc/cpuinfo | wc -l查看CPU核数。

worker_cpu_affinity 0001 0010 0100 1000;	
# 在高并发情况下,通过设置将CPU和具体的进程绑定来降低由于多核CPU切换造成的寄存器等现场重建带来的性能损耗。
# 如worker_cpu_affinity 0001 0010 0100 1000; (四核)

error_log  /var/logs/nginx_error.log  crit;	# 定义全局错误日志文件。
# 日志输出级别有debug、info、notice、warn、error、crit可供选择,其中,debug输出日志最为最详细,而crit输出日志最少。

pid        /usr/local/webserver/nginx/nginx.pid;

worker_rlimit_nofile 65535;	# 用于指定一个nginx进程可以打开的最多文件描述符数目,这里是65535,需要使用命令“ulimit -n 65535”来设置。

events模块

events{
  use epoll;	# 事件模块指令,用来指定Nginx的工作模式。
  worker_connections 65536;	# 每一个worker进程能并发处理(发起)的最大连接数(包含与客户端或后端被代理服务器间等所有连接数)。
}

1、Nginx支持的工作模式有select、poll、kqueue、epoll、rtsig和/dev/poll。kqueue和epoll是高效的工作模式,不同的是epoll用在Linux平台上,而kqueue用在BSD系统中。对于Linux系统,epoll工作模式是首选。在操作系统不支持这些高效模型时才使用select。

2、最大连接数 = worker_processes * worker_connections/4,所以这里客户端最大连接数是65536。当nginx作为http服务器时,计算公式里面是除以2。进程的最大连接数受Linux系统进程的最大打开文件数限制,在执行操作系统命令ulimit -n 65536后worker_connections的设置才能生效。


stream

做tcp负载均衡的话在这下面插一下stream,像这样:

events {
    worker_connections  1024;
}

stream {
	upstream MyServer{	# 定义一个upstream组,名为MyServer
		# 这里配置成要访问的 IP:Port
		# 这里选用权重轮询负载算法,weight为权重
		server 192.168.190.129:6000 weight=1 max_fails=3 fail_timeout=30s;
		server 192.168.190.129:6002 weight=1 max_fails=3 fail_timeout=30s;
		# max_fails :表示失败几次,则标记server已宕机,剔出上游服务。
        # fail_timeout :表示失败的重试时间。
	}
	server {
		proxy_connect_timeout 1s; 
		listen 8000; 
		proxy_pass MyServer;	# 把TCP通信发送到upstream的哪个server中去,可以指定端口,但是这里没必要
		tcp_nodelay on;
	}
}

http {

负载均衡算法

前面提到了权重负载,这里再列举几种: a):least-connected :对于每个请求,nginx plus选择当前连接数最少的server来处理

upstream MyServer{
 least_conn;
 server 192.168.190.129:6000;
 server 192.168.190.129:6001;
 server 192.168.190.129:6002;
}

b)ip_hash :客户机的IP地址用作散列键,用于确定应该为客户机的请求选择服务器组中的哪个服务器,这样一台客户端就绑定了一台服务器了。

upstream MyServer{
      ip_hash;
      server 192.168.190.129:6000;
	  server 192.168.190.129:6001;
	  server 192.168.190.129:6002;
}

与之对应的还有url_hash。

c)fair,按后端服务器的响应时间来分配请求,响应时间短的优先分配。

upstream MyServer{
    server 192.168.1.10:8080;
    server 192.168.1.11:8080;
    fair;
}

指令参数

a)max_conns,限制每台server的连接数,用于保护避免过载,可起到限流作用 。

upstream MyServer{
 server 192.168.190.129:6000 max_conns=2;
 server 192.168.190.129:6001 max_conns=2;
 server 192.168.190.129:6002 max_conns=2;
}

b)slow_start

upstream MyServer{
 server 192.168.190.129:6000 weight=6 slow_start=60s;
 server 192.168.190.129:6001 weight=2;
 server 192.168.190.129:6002;
}

1、该参数不能使用在 hash 和 random load balancing 中。 2、如果在 upstream 中只有一台 server,则该参数失效

c)down、backup: down 用于标记服务节点不可用,backup 表示当前服务器节点是备用机,只有在其他的服务器都宕机以后,自己才会加入到集群中,被用户访问到。

upstream MyServer{
	server 192.168.51.5:8080 down;
	server 192.168.51.6:8080 weight=1;
	server 192.168.51.5:8080 backup;
}

backup 参数不能使用在 hash 和 random load balancing 中。

d)Keepalived 提高吞吐量

upstream MyServer{
	·····
	keepalive 32;	# 设置连接池大小
}


http服务器

http{
  include       mime.types;	# 主模块指令,实现对配置文件所包含的文件的设定,可以减少主配置文件的复杂度。
  default_type  application/octet-stream;	# 属于HTTP核心模块指令,这里设定默认类型为二进制流
  #charset  gb2312;	# 指定客户端编码格式
  }

与[转帖]Nginx(3):上手Nginx,从配置文件开始相似的内容:

[转帖]Nginx(3):上手Nginx,从配置文件开始

https://cloud.tencent.com/developer/article/1886147?areaSource=&traceId= 其实吧,我配置 tcp 负载均衡的时候也就弄了一下配置文件,也没了解太多的东西。 文章目录 组成部分 main 全局配置 events模块 stream

[转帖]Keepalived如何实现Nginx高可用

https://www.jb51.net/article/266305.htm Keepalived安装可参考Mysql+Keepalived实现双主热备 Master上的keepalived.conf 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19

[转帖]Nginx(四)负载均衡

一 nginx目录的说明 1 nginx/ 3 |-- client_body_temp 4 |-- conf #这是Nginx所有配置文件的目录,极其重要 5 | |-- fastcgi.conf 'fastcgi相关参数的配置文件' 6 | |-- fastcgi.conf.default #f

[转帖]Nginx HTTP模块

https://www.cnblogs.com/lizexiong/p/15039009.html 导航: 这里将Nginx的一些配置进行整合。根据导航比较容易找到对应的文档。资料来自于weixueyuan 1.Nginx核心配置详解 2.Nginx HTTP模块 3.Nginx搭建 Web服务 4

[转帖]Nginx核心配置详解

https://www.cnblogs.com/lizexiong/p/15036707.html 导航: 这里将Nginx的一些配置进行整合。根据导航比较容易找到对应的文档。资料来自于weixueyuan 1.Nginx核心配置详解 2.Nginx HTTP模块 3.Nginx搭建 Web服务 4

[转帖]Nginx代理服务器

https://www.cnblogs.com/lizexiong/p/15045187.html 导航: 这里将Nginx的一些配置进行整合。根据导航比较容易找到对应的文档。资料来自于weixueyuan 1.Nginx核心配置详解 2.Nginx HTTP模块 3.Nginx搭建 Web服务 4

【转帖】nginx变量使用方法详解-3

https://www.diewufeiyang.com/post/577.html 也有一些内建变量是支持改写的,其中一个例子是 $args. 这个变量在读取时返回当前请求的 URL 参数串(即请求 URL 中问号后面的部分,如果有的话 ),而在赋值时可以直接修改参数串。我们来看一个例子: Bas

[转帖]nginx(三十二)rewrite模块

一 官方rewrite模块 ① 模块涉及的指令 ② 基本简介 rewrite模块会根据'PCRE正则'匹配'重写URI' pcre下载地址 pcretest测试正则表达式 ③ break 疑惑点: 结束'该作用域'下剩余的指令,还是'只是该rewrite模块的'指令? 1)配置demo 2)不带参数

[转帖]Nginx Rewrite重写功能

目录 一、rewrite的概述1.1、概述1.2 跳转场景1.3 跳转实现1.4 Rewrite实际场景 二、常用的nginx正则表达式三、rewrite命令3.1 rewrite的语法格式3.2 fiag标记说明 四、location4.1 location大致分为三类4.2 location 常

[转帖]Nginx 40 问~~~

https://zhuanlan.zhihu.com/p/485159477 Nginx是一个 轻量级/高性能的反向代理Web服务器,用于 HTTP、HTTPS、SMTP、POP3 和 IMAP 协议。他实现非常高效的反向代理、负载平衡,他可以处理2-3万并发连接数,官方监测能支持5万并发,现在中国