Nginx

Nginx简介

  • Nginx是什么?

百度百科:
Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。
Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。

  • Nginx能做什么?
    • HTTP服务器(Web服务器)
      性能非常高,能够承受高负载(官方测试Nginx能够支持5万并发链接,实际生产环境中可以支撑2-4万并发连接数)
      内存消耗少,10000个没有活动的连接才占⽤2.5M的内存
      配置简单,开源免费
    • 反向代理服务器
    • 负载均衡服务器
    • 动静分离
  • Nginx优点
    • Nginx可以在⼤多数类unix操作系统上编译运⾏,⽽且也有windows版本
    • 上手简单,配置不复杂
    • 高并发,高性能
    • 稳定性特别好,宕机概率低

Nginx安装

  • 安装Nignx依赖
yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel
  • 上传Nignx安装包到linux服务器,下载地址:http://nginx.org(本文章使用的是nginx-1.18.0)
  • 解压Nginx安装包
tar -xvf nginx-1.18.0.tar
  • 进入解压之后的目录 nginx-1.18.0
cd nginx-1.18.0
  • 编译安装Nginx
./configure
make && make install
  • 完毕之后在/usr/local/下会产⽣⼀个nginx⽬录,进入该目录下的sbin目录,执行启动脚本
cd /usr/local/nginx/sbin
./nginx
  • Nginx安装完毕,浏览器访问服务器地址(Nginx默认监听80端口),浏览器出现Nginx欢迎页

Nginx之反向代理

  • 编辑nginx目录下conf目录下文件nginx.conf文件
vi /usr/local/nginx/conf/nginx.conf
  • 修改http模块下server配置
http{
	...
    server {
        listen       80;
        server_name  localhost;
        
        location / {
			proxy_pass http://127.0.0.1:8080/;
        }
        ...
    }
    ...
}

Nginx之负载均衡

Nginx负载均衡策略

  • 轮询
    默认策略,每个请求按时间顺序逐⼀分配到不同的服务器,如果某⼀个服务器下线,能⾃动剔除
upstream lagouServer{
	server 127.0.0.1:8080;
	server 127.0.0.1:8081;
}
  • 权重
    weight代表权重,默认每⼀个负载的服务器都为1,权重越⾼那么被分配的请求越多(⽤于服务器性能不均衡的场景)
upstream lagouServer{
	server 127.0.0.1:8080 weight=1;
	server 127.0.0.1:8081 weight=2;
}
  • ip_hash
    每个请求按照ip的hash结果分配,每⼀个客户端的请求会固定分配到同⼀个⽬标服务器处理,可以解决session问题
upstream lagouServer{
	ip_hash;
	server 127.0.0.1:8080;
	server 127.0.0.1:8081;
}
  • least_conn
    最少连接方式,那个服务器连接最少往哪个服务器转发请求
upstream lagouServer{
	least_conn;
	server 127.0.0.1:8080;
	server 127.0.0.1:8081;
}
  • 编辑nginx目录下conf目录下文件nginx.conf文件
vi /usr/local/nginx/conf/nginx.conf
  • 在http模块中新增如下配置:
http{
	...
	upstream testServer{
        server 127.0.0.1:8080;
		server 127.0.0.1:8081;
    }
    ...
}
  • 修改http模块下server配置
http{
	...
    server {
        listen       80;
        server_name  localhost;
        
        location / {
			proxy_pass http://testServer/;
        }
        ...
    }
    ...
}
  • 一致性hash负载均衡
    • github下载nginx⼀致性hash负载均衡模块 https://github.com/replay/ngx_http_consistent_hash
    • 将下载的压缩包上传到nginx服务器,并解压
    • 已经编译安装过nginx,此时进⼊当时nginx的源码⽬录,执⾏如下命令
    ./configure --add-module=/root/ngx_http_consistent_hasn-master
    make && make install
    
    • nginx.conf⽂件中配置如下
    upstream testServer{
    	consistent_hash $request_uri;
        server 127.0.0.1:8080;
    	server 127.0.0.1:8081;
    }
    

Nginx之动静分离

动静分离就是讲动态资源和静态资源的请求处理分配到不同的服务器上,⽐较经典的组合就是Nginx+Tomcat架构(Nginx处理静态资源请求, Tomcat处理动态资源请求),那么其实之前 Nginx反向代理⽬标服务器Tomcat,能看到⽬标服务器ROOT项⽬的index.jsp,这本身就是
Tomcat在处理动态资源请求了。
所以,只需要配置静态资源访问即可。

#静态资源处理,直接去nginx服务器目录中加载
location /static/ {
	root staticData;
}

Nginx底层进程机制

Nginx启动后,以daemon多进程⽅式在后台运⾏,包括⼀个Master进程和多个Worker进程.
在这里插入图片描述

  • master进程
    master进程创建之后,会建⽴好需要监听的的socket,然后从master进程再fork出多个worker进程。所以,所有worker进程的监听描述符listenfd在新连接到来时都变得可读。
    主要是管理worker进程,⽐如:
    • 接收外界信号向各worker进程发送信号(./nginx -s reload)
    • 监控worker进程的运⾏状态,当worker进程异常退出后Master进程会⾃动重新启动新的worker进程等
  • worker进程
    worker进程具体处理⽹络请求。多个worker进程之间是对等的,他们同等竞争来⾃客户端的请求, 各进程互相之间是独⽴的。⼀个请求,只可能在⼀个worker进程中处理,⼀个worker进程,不可能处理其它进程的请求。 worker进程的个数是可以设置的,⼀般设置与机器cpu核数⼀致。
    nginx使⽤互斥锁来保证只有⼀个workder进程能够处理请求,拿到互斥锁的那个进程注册listenfd读事件,在读事件⾥调⽤accept接受该连接,然后解析、处理、返回客户端。

nginx多进程模型好处

  • 每个worker进程都是独⽴的,不需要加锁,节省开销
  • 每个worker进程都是独⽴的,互不影响,⼀个异常结束,其他的照样能提供服务
  • 多进程模型为reload热部署机制提供了⽀撑
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值