Nginx工作原理及基本使用

Nginx工作原理

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

  • master主进程主要是管理worker进程,对网络事件进行收集和分发:
    1.接收来自外界的信号
    2.向各worker进程发送信号
    3.监控worker进程的运行状态,当worker进程退出后(异常情况下),会自动重新启动新的worker进程
  • nginx用一个独立的worker进程来处理一个请求,一个worker进程可以处理多个请求:
  • 当一个worker进程在accept这个连接之后,就开始读取请求,解析请求,处理请求,产生数据后,再返回给客户端,最后才断开连接。
  • 一个请求,完全由worker进程来处理,而且只在一个worker进程中处理。采用这种方式的好处:
  • 节省锁带来的开销。对于每个worker进程来说,独立的进程,不需要加锁,所以省掉了锁带来的开销,同时在编程以及问题查上时,也会方便很多
  • 独立进程,减少风险。
  • 采用独立的进程,可以让互相之间不会影响,一个进程退出后,其它进程还在工作,服务不会中断,master进程则很快重新启动新的worker进程。
  • 在一次请求里无需进程切换
  • Nginx的IO通常使用epoll,epoll函数使用了I/O复用模型。与I/O阻塞模型比较,I/O复用模型的优势在于可以同时等待多个(而不只是一个)套接字描述符就绪。Nginx的epoll工作流程如下:
    • master进程先建好需要listen的socket后,然后再fork出多个woker进程,这样每个work进程都可以去accept这个socket
    • 当一个client连接到来时,所有accept的work进程都会受到通知,但只有一个进程可以accept成功,其它的则会accept失败,Nginx提供了一把共享锁来保证同一时刻只有一个work进程在accept连接,从而解决惊群问题
    • 当一个worker进程accept这个连接后,就开始读取请求,解析请求,处理请求,产生数据后,再返回给客户端,最后才断开连接,这样一个完成的请求就结束了
  • Nginx最大连接数:
    • worker_processes:worker角色的进程个数
    • worker_connections:每一个worker进程能并发处理(发起)的最大连接数(包含所有连接数)
    • Nginx作为http服务器的时候:max_clients = worker_processes * worker_connections
    • Nginx作为反向代理服务器的时候:max_clients = worker_processes * worker_connections/4 (/4原因:因为浏览器默认会开启2个连接到nginx
      server,而且nginx还会为每个连接使用fds(file
      descriptor文件描述符)从连接池建立connection到upstream后端。)
  • Nginx主要通过nginx.conf文件进行配置使用。在nginx.conf文件中主要分为:
    • 全局块:一些全局的属性,在运行时与具体业务功能(比如http服务或者email服务代理)无关的一些参数,比如工作进程数,运行的身份等
    • event块:参考事件模型,单个进程最大连接数等
    • http块:设定http服务器
    • server块:配置虚拟主机
    • location块:配置请求路由及页面的处理情况等

location配置:
在这里插入图片描述

虚拟主机配置实战

虚拟主机概念
所谓虚拟主机,在Web服务里就是一个独立的网站站点(www.baidu.org),这个站点对应独立的域名(也可能是IP或端口),具有独立的程序及资源目录,可以独立地对外提供服务供用户访问。
这个独立的站点在配置里是由一定格式的标签段标记,对于Apache软件来说,一个虚拟主机的标签段通常被包含在http块中。
虚拟主机类型
常见的虚拟主机类型有如下几种。

基于域名的虚拟主机
所谓基于域名的虚拟主机,意思就是通过不同的域名区分不同的虚拟主机,基于域名的虚拟主机是企业应用最广的虚拟主机类型,几乎所有对外提供服务的网站都是使用基于域名的虚拟主机,例如:www.etiantian.org

基于端口的虚拟主机
同理,所谓基于端口的虚拟主机,意思就是通过不同的端口来区分不同的虚拟主机,此类虚拟主机对应的企业应用主要为公司内部的网站,例如:一些不希望直接对外提供用户访问的网站后台等,访问基于端口的虚拟主机地址里要带有端口,例如:http://www.baidu.com:80

基于IP的虚拟主机
同理,所谓基于IP的虚拟主机,意思就是通过不同的IP区分不同的虚拟主机,此类虚拟主机对应的企业应用非常少见,一般不同业务需要使用多IP的场景都会在负载均衡器上进行VIP绑定,而不是在Web上通过绑定IP区分不同的虚拟机。
三种虚拟主机类型均可独立使用,也可以互相混合一起使用,同学们应把基于域名的虚拟主机类型当作重点来学习掌握,其他的两个类型了解即可。

基于域名的虚拟主机配置实战
说明:本节内容再生产场景中是最常用到的,因此,同学们要优先并且熟练掌握。
修改配置文件Nginx.conf,编辑活自己重写

worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    server {
        listen       80;
        server_name  localhost;
        location / {
            root   html/www;
            index  index.html index.htm;
        }
    }
}

编辑完配置文件后,我们需要检查语法

[root@localhost conf]# /application/nginx/sbin/nginx -t
nginx: the configuration file /application/nginx-1.10.2//conf/nginx.conf syntax is ok
nginx: configuration file /application/nginx-1.10.2//conf/nginx.conf test is successful

然后由于web的存放路径是相对路径,因此需要在html/下创建相应的目录
如图:
在这里插入图片描述
在这里插入图片描述

[root@localhost html]# cd /application/nginx/html/
[root@localhost html]# ls
50x.html  index.html            #原本的网页文件
[root@localhost html]# mkdir www   #创建一个目录叫做www
[root@localhost html]# echo "I am www" > www/index.html  #写入网页文件
[root@localhost html]# cat www/index.html   #查看一下
I am www
[root@localhost html]# curl 192.168.0.100  #测试链接
I am www

接下来继续增加一个域名的网站:
在这里插入图片描述
给第二个网站添加网页文件,同第一个网页一样。

这是因为通过IP地址来访问的话,nginx并不知道你想要访问哪个站点,因此,他默认你是要访问他配置文件里的第一个站点,也就是www.zxy.com
通过修改hosts映射我们可以访问不同的站点。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值