Nginx(3):上手Nginx,从配置文件开始

网友投稿 697 2022-05-30

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

@[toc]

组成部分

看到一张还不错的图:

Nginx(3):上手Nginx,从配置文件开始

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

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; # 指定客户端编码格式 }

HTTP Nginx

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:pthreads php 安装全过程(二)
下一篇:Python爬虫必备技能,xpath的用法和实战
相关文章