栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

Nginx知识

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Nginx知识

什么是Nginx?

Nginx是一个 轻量级/高性能的反向代理Web服务器,用于 HTTP、HTTPS、SMTP、POP3 和 IMAP 协议。他实现非常高效的反向代理、负载平衡,他可以处理2-3万并发连接数,官方监测能支持5万并发,现在中国使用nginx网站用户有很多,例如:新浪、网易、 腾讯等。

Nginx 有哪些优点?
  • 跨平台、配置简单。
  • 非阻塞、高并发连接:处理 2-3 万并发连接数,官方监测能支持 5 万并发。
  • 内存消耗小:开启 10 个 Nginx 才占 150M 内存。
  • 成本低廉,且开源。
  • 稳定性高,宕机的概率非常小。
  • 内置的健康检查功能:如果有一个服务器宕机,会做一个健康检查,再发送的请求就不会发送到宕机的服务器了。重新将请求提交到其他的节点上。
Nginx应用场景?
  • http服务器。Nginx是一个http服务可以独立提供http服务。可以做网页静态服务器。
  • 虚拟主机。可以实现在一台服务器虚拟出多个网站,例如个人网站使用的虚拟机。
  • 反向代理,负载均衡。当网站的访问量达到一定程度后,单台服务器不能满足用户的请求时,需要用多台服务器集群可以使用nginx做反向代理。并且多台服务器可以平均分担负载,不会应为某台服务器负载高宕机而某台服务器闲置的情况。
  • nginz 中也可以配置安全管理、比如可以使用Nginx搭建API接口网关,对每个接口服务进行拦截。
Nginx怎么处理请求的?
server{         # 第一个Server区块开始,表示一个独立的虚拟主机站点
   listen       80;#提供服务的端口,默认80
   server_name  localhost;#提供服务的域名主机名
   location / {#第一个location区块开始
      root    html; # 站点的根目录,相当于Nginx的安装目录
      index   index.html index.html; #莫仍的首页文件,多个用空格分开
} # 第一个location区块结果
  • 首先,Nginx 在启动时,会解析配置文件,得到需要监听的端口与 IP 地址,然后在 Nginx 的 Master 进程里面先初始化好这个监控的Socket(创建 S ocket,设置 addr、reuse 等选项,绑定到指定的 ip 地址端口,再 listen 监听)。
  • 然后,再 fork(一个现有进程可以调用 fork 函数创建一个新进程。由 fork 创建的新进程被称为子进程 )出多个子进程出来。
  • 之后,子进程会竞争 accept 新的连接。此时,客户端就可以向 nginx 发起连接了。当客户端与nginx进行三次握手,与 nginx 建立好一个连接后。此时,某一个子进程会 accept 成功,得到这个建立好的连接的 Socket ,然后创建 nginx 对连接的封装,即 ngx_connection_t 结构体。
  • 接着,设置读写事件处理函数,并添加读写事件来与客户端进行数据的交换。
  • 最后,Nginx 或客户端来主动关掉连接,到此,一个连接就寿终正寝了。
Nginx 是如何实现高并发的?

如果一个 server 采用一个进程(或者线程)负责一个request的方式,那么进程数就是并发数。那么显而易见的,就是会有很多进程在等待中。等什么?最多的应该是等待网络传输。

而 Nginx 的异步非阻塞工作方式正是利用了这点等待的时间。在需要等待的时候,这些进程就空闲出来待命了。因此表现为少数几个进程就解决了大量的并发问题。

Nginx是如何利用的呢,简单来说:同样的 4 个进程,如果采用一个进程负责一个 request 的方式,那么,同时进来 4 个 request 之后,每个进程就负责其中一个,直至会话关闭。期间,如果有第 5 个request进来了。就无法及时反应了,因为 4 个进程都没干完活呢,因此,一般有个调度进程,每当新进来了一个 request ,就新开个进程来处理。

Nginx目录结构有哪些?
tree /usr/ local/nginx
/usr/local/nginx

|-- client_body_temp
|-- conf                           #Nginx所有配置文件的目录
    |-- fastcgi.conf               # fastcgi相关参数的配置文件
    |--  fastcgi.conf.default      # fastcgi.conf的原始备份文件
    |-- fastcgi_params             # fastcgi的参数文件
    |-- fastcgi_params.default
    |-- koi-utf
    |-- koi-winl- mime.types       #媒体类型
    |-- mime.types.default
    |-- nginx.conf                 #Nginx主配置文件
    |-- nginx.conf.default
    |-- scgi_params                #scgi相关参数文件
    |-- scgi_params.default
    |-- uwsgi_params               #uwsgi相关参教文件
    |-- uwsgi_params.default
    |-- win-utf
|-- fastcgi_temp                   # fastcgi临时徵据目录
|-- html                           #Nginx就认站点目录
    |-- 5ox.html                   #锗误页面优雅替代显示文件,例如当出现502错误时会调用此页面
    |-- index.html                 #默认的首页文件
|-- logs                           # Nginx日志目录
    |-- access.log                 #访闻日志文件
    |-- error.log                  #错误日志文件
    |--  nginx.pid                 # pid文件,Nginx进程启动后,会把所有进程的ID号写到此文件
|-- proxy_temp                     #临时月录
|-- sbin                           # Nginx命令目录
    |-- nginx                      # Nginx的启动命令
|-- scgi_temp                      # 临时目录
|--uwsgi_temp                      # 临时目录 
Nginx配置文件nginx.conf有哪些属性模块?
worker_processes  1;                                    # worker进程的数量
events {                                                 # 事件区块开始
    worker_connections  1024;                           # 每个worker进程支持的最大连接数
}                                                        # 事件区块结束
http {                                                   # HTTP区块开始
    include       mime.types;                           # Nginx支持的媒体类型库文件
    default_type  application/octet-stream;             # 默认的媒体类型
    sendfile        on;                                 # 开启高效传输模式
    keepalive_timeout  65;                              # 连接超时
    server {                                             # 第一个Server区块开始,表示一个独立的虚拟主机站点
        listen       80;                                # 提供服务的端口,默认80
        server_name  localhost;                         # 提供服务的域名主机名
        location / {                                     # 第一个location区块开始
            root   html;                                # 站点的根目录,相当于Nginx的安装目录
            index  index.html index.htm;                # 默认的首页文件,多个用空格分开
        }                                                # 第一个location区块结果
        error_page   500502503504  /50x.html;           # 出现对应的http状态码时,使用50x.html回应客户
        location = /50x.html {                           # location区块开始,访问50x.html
            root   html;                                # 指定对应的站点目录为html
        }
    }  
    ......
为什么 Nginx 不使用多线程?

Apache: 创建多个进程或线程,而每个进程或线程都会为其分配 cpu 和内存(线程要比进程小的多,所以 worker 支持比 perfork 高的并发),并发过大会榨干服务器资源。

Nginx: 采用单线程来异步非阻塞处理请求(管理员可以配置 Nginx 主进程的工作进程的数量)(epoll),不会为每个请求分配 cpu 和内存资源,节省了大量资源,同时也减少了大量的 CPU 的上下文切换。所以才使得 Nginx 支持更高的并发。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/864609.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号