Nginx基础应用——概述

Nginx简介

Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强。

Nginx官网:http://nginx.org/

  • 什么是正向代理?
    起初代理大多是帮助内网客户端访问外网服务器用的,这是从内到外。
    当客户端无法访问外部资源的时候(比如墙这样的原因),可以通过一个正向代理去间接地访问,所以客户端需要配置代理服务器的ip。正向代理是一个位于客户端和原始服务器之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端必须要进行一些特别的设置才能使用正向代理。
    正向代理的用途:
    (1)访问原来无法访问的资源
    (2)可以做缓存,加速访问资源
    (3)对客户端访问授权,上网进行认证
    (4)代理可以记录用户访问记录(上网行为管理),对外隐藏用户信息
  • 什么是反向代理?
    后来出现了反向代理,将来自外网客户端的请求转发到内网服务器上,这是从外到内,所以叫反向代理。
    实际运行方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。
    反向代理的作用:
    (1)保证内网的安全,阻止web攻击,大型网站,通常将反向代理作为公网访问地址,Web服务器是内网。
    (2)负载均衡,通过反向代理服务器来优化网站的负载。

安装Nginx

  1. 官网下载对应的包(nginx-1.18.0.tar.gz),然后上传到liunx中(阿里云Centos7.x)
  2. 安装环境依赖
    (1)安装gcc环境
    yum install gcc-c++
    (2)安装PCRE库,用于解析正则表达式
    yum install -y pcre pcre-devel
    (3)zlib压缩和解压缩依赖,
    yum install -y zlib zlib-devel
    (4)SSL 安全的加密的套接字协议层,用于HTTP安全传输,也就是https
    yum install -y openssl openssl-devel
  3. 解压nginx-1.18.0.tar.gz,需要注意,解压后得到的是源码,源码需要编译后才能安装
    tar -zxvf nginx-1.18.0.tar.gz
  4. 编译之前,先创建nginx临时目录,如果不创建,在启动nginx的过程中会报错
    mkdir /var/temp/nginx -p
  5. 在nginx目录,输入如下命令进行配置,目的是为了创建makefile文件
    ./configure
    –prefix=/UserLime/nginx/install
    –pid-path=/var/run/nginx/nginx.pid
    –lock-path=/var/lock/nginx.lock
    –error-log-path=/var/log/nginx/error.log
    –http-log-path=/var/log/nginx/access.log
    –with-http_gzip_static_module
    –http-client-body-temp-path=/var/temp/nginx/client
    –http-proxy-temp-path=/var/temp/nginx/proxy
    –http-fastcgi-temp-path=/var/temp/nginx/fastcgi
    –http-uwsgi-temp-path=/var/temp/nginx/uwsgi
    –http-scgi-temp-path=/var/temp/nginx/scgi
    注: \ 代表在命令行中换行,用于提高可读性
    在这里插入图片描述
  6. make编译
    make
  7. 安装
    make install
  8. 进入sbin目录启动nginx
    ./nginx
  9. 打开浏览器,访问虚拟机所处内网ip即可打开nginx默认页面

nginx常用命令

./nginx -t ------------ 检查配置文件是否正确
./nginx -s stop ------------ (暴力停止)停止
./nginx -s quit ------------ (用户连接关闭后在停止)停止
./nginx -s reload ------------ 重新加载
./nginx -v ------------ 版本号
./nginx -V ------------ 展示所有的版本和配置信息
./nginx -? ------------ 帮助

如果在云服务器安装,需要开启默认的nginx端口:80
如果在虚拟机安装,需要关闭防火墙
本地win或mac需要关闭防火墙

Nginx 进程模型

master进程:主进程
worker进程:工作进程
在这里插入图片描述
nginx.conf中可以配置worker数,一般根据服务器的核数配置
在这里插入图片描述

Nginx的抢占机制

每个worker进程都是从master进程fork过来,master进程会监听来自客户端的请求,当master进程listen到来自client发送的请求时,会让所有处于空闲状态的worker进程抢夺accept_mutex(互斥锁),这里是try_lock(尝试加锁)而不是lock(加锁)。假设是lock的话,除了对client的请求的accept_mutex进行加锁成功的worker进程外,其他所有对client的accept_mutex锁进行lock加锁的worker进程都会阻塞,直到锁被释放。这势必会造成资源浪费。如果是try_lock的话,那么其他worker进程对client尝试加锁失败就会立即返回,去处理其他client的请求,因此不会有其他worker进程阻塞在这。

worker的处理方式是异步非阻塞的,当他发现请求1阻塞后,他会去处理请求2;当请求2阻塞后,又会去处理请求3。linux下worker默认使用epoll模型。,采用了epoll模型,一个worker大概可以处理6-8万的请求。所以,CPU越多,并发越大。

worker之间进行抢占锁有一个弊端:
有可能存在一个worker管理很多连接(代表它的空闲连接少),一个worker管理很少,当抢占到一个新的 tcp 连接后,因为无法得到空闲连接,而且无法将此连接转交给其它进程,最终会导致此 tcp 连接得不到处理,就中止掉了。
nginx的解决方法:
Nginx 使用一个叫 ngx_accept_disabled 的变量来控制是否去竞争 accept_mutex 锁。计算 ngx_accept_disabled 的值,这个值是 Nginx 单进程的所有连接总数的八分之一,减去剩下的空闲连接数量,得到的这个 ngx_accept_disabled 有一个规律,当剩余连接数小于总连接数的八分之一时,其值才大于 0,而且剩余的连接数越小,这个值越大。当 ngx_accept_disabled 大于 0 时,不会去尝试获取 accept_mutex 锁,并且将 ngx_accept_disabled 减 1,于是,每次执行到此处时,都会去减 1,直到小于 0。不去获取 accept_mutex 锁,就是等于让出获取连接的机会,很显然可以看出,当空余连接越少时,ngx_accept_disable 越大,于是让出的机会就越多,这样其它进程获取锁的机会也就越大。不去抢占锁,自己的连接就空闲下来了,其它进程的连接池就会得到利用,这样,Nginx 就控制了多进程间连接的平衡了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值