暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Nginx中间件运维实战

IT那活儿 2022-05-14
1785

点击上方“IT那活儿”,关注后了解更多内容,不管IT什么活儿,干就完了!!!

1

nginx简介
Nginx(“engine x”)是俄罗斯人Igor Sysoev(塞索耶夫)编写的一个高性能HTTP和反向代理服务器。
很长一段时间以来,它一直在许多负载很重的俄罗斯网站上运行,包括 Yandex、Mail.Ru、VK和 Rambler。 国内主流的互联网公司,如:百度、腾讯、阿里、新浪、360、网易新闻、水木社区、豆瓣、迅雷在线等多家网站使用 Nginx 作为Web服务器或反向代理服务器。

2

nginx优点
  • 高并发响应性能非常好:根据给出的数据,能够支持高达5w/s的并发连接数的响应。

  • 内存消耗小:开启10个nginx才占150M内存 ,nginx处理静态文件比apache 占用更少的内存及资源,所有它是轻量级的(为Apache的1/5-1/10)。

  • 配置代码简洁且容易上手:配置简单,基本在一个conf文件中配置,性能比较稳定。

  • 支持负载均衡、反向代理、虚拟主机等。

  • Nginx内置健康检查功能:可对后端服务进行健康检查。

  • 支持Rwrite重写规则。

  • 低成本:Nginx可以做高并发的负载均衡,且Nginx是开源免费的;

    支持PHP cgi方式和FastCGI方式。

  • 可以作为缓存服务器、邮件代理服务器。

3

nginx使用场景
  • http服务器:nginx是一个http服务可独立提供http服务。可以做网页静态服务器。

  • 虚拟主机:可以实现在一台服务器虚拟出多个网站,例如个人网站使用的虚拟机。

  • 反向代理:是指以代理服务器身份来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端。

  • 负载均衡:负载均衡的大致原理是指采用一定的分配策略将”网络负载”均衡的分摊到网络集群的多个服务器上。

  • nginx中也可以配置安全管理:比如可以使用Nginx搭建API接口网关,对每个接口服务进行拦截。

4

nginx体系架构
Nginx由内核和模块组成,其中,内核的设计非常微小和简洁。由于模块化的设计,所以各种功能均是由对应的模块来完成。
相比传统Web服务器,Nginx表现得更具有专业性。在架构上Nginx受到各种操作系统中高级事件机制处理模式的启发,Nginx实现了整体基于master/slave的核心框架,形成了模块化,事件驱动(event-driver)机制,异步处理,单线程非阻塞的架构模式。
Nginx模块从结构上分为基础模块、核心模块、第三方模块,模块间是分层次的:
  • 核心模块:HTTP模块、EVENT模块和MAIL模块等。
  • 基础模块:HTTP Access模块、HTTP FastCGI模块、HTTP Proxy模块和HTTP Rewrite模块。
  • 第三方模块:HTTP Upstream Request Hash模块、Notice模块和HTTP Access Key模块、Limit_req模块、Upstream check module等。

Nginx默认采用多进程工作方式,nginx启动后,会运行一个master进程和多个worker进程。其中master充当整个进程组与用户的交互接口,同时对进程进行监护,管理worker进程来实现重启服务、平滑升级、更换日志文件、配置文件实时生效等功能。
worker用来处理基本的网络事件,worker之间是平等的,他们共同竞争来处理来自客户端的请求。

5

Nginx安装
./configure --prefix=/data/gzopen/nginx_8589--user=gzopen --group=gzopen \--with-http_ssl_module --with-http_stub_status_module \--with-http_sub_module --with-http_realip_module \--with-http_gzip_static_module --with-http_addition_module \--with-ipv6 --with-stream --with-stream_ssl_preread_module \--with-stream_ssl_module --with-pcre=../pcre-8.43  \-with-openssl=../openssl-1.1.1c \--with-zlib=../zlib-1.2.11
复制
最后执行以后命令安装Nginx:
makemake install
复制

 

6

Nginx配置
配置文件主要由三部分组成:
  • global(全区块)

  • event(事件块)

  • http(http块)

# global       //定义Nginx服务器整体运行的配置指令。
user nginx;worker_processes  8;error_log  logs/error.log;#error_log logs/error.log notice;#error_log logs/error.log info;pid        logs/nginx.pid;worker_rlimit_nofile 65535;
复制
# event      主要影响 Nginx 服务器与用户的网络连接。
events {use epoll;worker_connections  20480;}
复制
# http      代理、缓存和日志定义等绝大多数功能和第三方模块的配置。
http {include       mime.types; #主模块指令default_type  application/octet-stream;log_format  main $remote_addr  $remote_user $time_local $request $status $body_bytes_sent $http_referer $http_user_agent $http_x_forwarded_for $request_time;proxy_buffer_size    32k;proxy_buffers        4 64k;proxy_busy_buffers_size 128k; #高负荷下缓冲大小proxy_temp_file_write_size 128k; #缓存文件夹大小proxy_connect_timeout 90; #代理连接超时间proxy_read_timeout 90; #代理接收超时间proxy_send_timeout 90; #后端服务器数据回传时间server_names_hash_bucket_size 128; #服务器名字的hash表大小keepalive_timeout 90; #长连接超时时间large_client_header_buffers 4 32k;client_header_buffer_size 32k;client_max_body_size 16m;client_body_buffer_size 128k;server {listen       10086;server_name www.gz.10086.com;location /10086 { #定义locationproxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;#配置反向代理proxy_pass http://135.10.100.90:8088;}}
复制

7

nginx常用运维命令
  • 测试配置是否正确:

nginx -t | nginx -c nginx.conf -t
复制

  • 启动nginx:

nginx | nginx -c nginx.conf
复制

  • 停止nginx:

nginx -s stop
复制

  • 重新加载nginx进程:

nginx -s reload
复制

  • 其它控制指令:


nginx -s signal   quit    #优雅的停止守护进程(SIGQUIT)   reopen  #重新打开日志文件
复制

8

nginx负载均衡使用
nginx的upstream负载均衡目前支持的几种负载均衡算法:
  • rr(默认):按客户端请求顺序把客户端的请求逐一分配到不同的后端节点服务器。

  • weight: 权重方式,数字越大,权重越大。

  • ip_hash:根据每个请求访问IP的hash结果分配。(会话保持)

  • url_hash: 根据访问的url的hash结果分配。(需hash软件包)

  • fair: 根据后端服务器响应时间最短请求智能分配。(upstream_fair模块)

参数:
  • weight:默认为1,weight越大,负载的权重就越大。

  • down:表示当前的server暂时不参与负载均衡。

  • backup:备份服务器。当其他所有的非backup机器出现故障或者忙的时候,才会请求backup机器,因此这台机器的访问压力最低。

  • max_fails:允许请求失败的最大次数,默认为1,当超过该值时,返回proxy_next_upstream模块定义的错误。

  • fail_timeout:请求失败超时时间,默认10是。表示如果某台服务器在fail_timeout时间内出现了max_fails次连接失败,则nginx会认为该server已失效,在接下来的fail_timeout时间内,nginx不再将请求发给失效的server。

upstream myapp1 {192.168.100.111;192.168.100.112;
复制


9

nginx路由策略
location指令的作用是根据用户请求的URI来执行不同的应用,也就是根据用户请求的网站URL进行匹配,匹配成功即进行相关的操作。
=   开头表示精确匹配;
^~  开头表示uri以某个常规字符串开头,不是正则匹配;
~   开头表示区分大小写的正则匹配;
~*  开头表示不区分大小写的正则匹配;
/   通用匹配, 如果没有其它匹配,任何请求都会匹配到。
Location规则匹配优先级:

 

END




本文作者:陈洪刚

本文来源:IT那活儿(上海新炬王翦团队)

文章转载自IT那活儿,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论