热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Nginx入门讲解

Nginx入门讲解Nginx

Nginx入门讲解


Nginx Web服务介绍

nginx是个高性能的http和反向代理服务器:

  • IMAP/POP3/SMTP服务器
  • nginx性能稳定、性能强大、非常节约系统资源
  • Nginx是高性能、轻量级的服务器;
  • 越来越多的企业使用nginx来代替Apache;

nginx使用越来越广泛:

  • 百度
  • 360
  • 阿里
  • 新浪
  • 腾讯等等都有在使用nginx

nginx对比apache的优点:

  • 高并发响应性能非常好,官方Nginx处理静态文件并发5w/s;
  • 负载均衡及反向代理性能非常强;
  • 系统内存和CPU占用率低;
  • 可对后端服务进行健康检查;
  • 支持PHP cgi方式和FastCGI方式;
  • 可以作为缓存服务器、邮件代理服务器;
  • 配置代码简洁且容易上手。

Nginx的原理剖析

  • Nginx主要是使用各种模块进行工作;
  • 三类主要的模块
    • 核心模块:
      • HTTP模块;
      • EVENT模块
      • MAIL模块
        • 其实我这里是理解为location模块;指向URL的资源
    • 基础模块:
      • HTTP Access模块;
        • 这里我理解为状态模块的,当然应该是不止的
      • HTTP FastCGI模块;
        • php模块
      • HTTP Proxy模块;
        • 反向代理、或者代理模块
      • HTTP Rewrite模块;
        • 重写模块?
    • 第三方模块:
      • HTTP Upstream Request Hash模块;
      • Notice模块
      • HTTP Access Key模块;
      • Limit_req模块;
      • Upstream check module模块;

nginx的模块从功能上区分:

  • Handlers(处理器模块):
    • 此类模块直接处理请求–>用户浏览器请求什么资源–>传给服务器,
    • 并进行输出内容和修改headers信息等操作–>服务器反馈内容给到用户,
    • Handlers处理器模块一般只能有一个–>这个待理解;
  • Filters (过滤器模块):
    • 此类模块主要对其他处理器模块输出的内容进行修改操作
      • 可以通过location调整输出内容;
    • 最后由Nginx输出;
  • Proxies (代理类模块):
    • 此类模块是Nginx的HTTP Upstream之类的模块
    • 这些模块主要与后端一些服务比如FastCGI等进行交互,实现服务代理和负载均衡等功能。

Nginx的工作原理

nginx工作是通过内核和模块帮忙处理的;因此非常依赖配置文件;

  • 学习好nginx服务,就必须学习好配置文件
  • nginx的配置文件是分层次理解、全局、http、server、location等等

而配置文件里面规定很多个location;

  • 通过location的定义来处理用户的请求–>location可以处理不通的页面请求;
    • 比如说是静态页面;
    • 比如说是PHP页面;都可以通过location来定义;

因此,如果想要搞懂nginx的工作过程;必须弄明白nginx的配置文件结构

简单地理解:

  • 用户–>通过http请求–>nginx服务器响应–>选择响应的头–>然后调用模块处理–>最后返回给到用户

nginx的高并发讲解

nginx的高并发是业内出了名的;它主要就是采用了epoll模型;

  • epoll是Linux内核2.6以上才出现的;
  • epoll就是高并发的原因所在;

Nginx采用epoll模型,支持异步非阻塞;

  • epoll的特点:
    • epoll对于句柄事件的选择不是遍历的,是事件响应;
    • 就是句柄上事件来就马上选择出来,不需要遍历整个句柄链表,因此效率非常高。

Apache则是使用了select模型

  • select特点:
    • select 选择句柄的时候,是遍历所有句柄;
    • 在句柄有事件响应时,select需要遍历所有句柄才能获取到哪些句柄有事件通知,因此效率是非常低。

nginx在默认是监听80端口的,在启动的时候会有一个master进程;

  • master进程生成多个工作进程;但是master进程只有一个;
  • worker进程都是从master进程fork出来
    • 在Master进程里面,建立好需要listen的socket(listenfd)之后,
    • 会fork出多个worker进程。
  • 所有worker进程的listenfd会在新连接到来时变得可读,
    • 为保证只有一个进程处理该连接,
    • 所有worker进程在注册listenfd读事件前抢accept_mutex,
    • 抢到互斥锁的那个进程注册listenfd读事件,在读事件里调用accept接受该连接。
  • 一个worker进程在accept这个连接之后
    • 就开始读取请求、解析请求、处理请求,产生数据后,再返回给客户端;
    • 最后才断开连接,这样形成一个完整的请求流程;

nginx的配置文件架构:

通常源码包安装的nginx配置文件,和yum安装的配置文件有稍微的差异,但是大致上是一样的,只是server是通过include引用的独立配置文件;

...
events {...
}http {...server {....location / {root html;...}}
}

nginx的配置指令可以分为两大类:指令块单个指令;

指令块就是像events,http,server等;

单独指令就是像root html;这样的。

nginx规定指令块可以嵌套,如http指令块可以嵌套server指令,server指令块中可以嵌套location指令,指令可以同时出现在不同的指令块,比如:root指令可以同时出现在http、server和location指令块中

这里需要注意:location中定义的指令块会覆盖server、http的同名指令

通俗说:

  • 小的指令块作用比大的指令块管用

推荐阅读
  • LVS实现负载均衡的原理LVS负载均衡负载均衡集群是LoadBalance集群。是一种将网络上的访问流量分布于各个节点,以降低服务器压力,更好的向客户端 ... [详细]
  • 如何实现织梦DedeCms全站伪静态
    本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ... [详细]
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 在重复造轮子的情况下用ProxyServlet反向代理来减少工作量
    像不少公司内部不同团队都会自己研发自己工具产品,当各个产品逐渐成熟,到达了一定的发展瓶颈,同时每个产品都有着自己的入口,用户 ... [详细]
  • Imtryingtofigureoutawaytogeneratetorrentfilesfromabucket,usingtheAWSSDKforGo.我正 ... [详细]
  • 31.项目部署
    目录1一些概念1.1项目部署1.2WSGI1.3uWSGI1.4Nginx2安装环境与迁移项目2.1项目内容2.2项目配置2.2.1DEBUG2.2.2STAT ... [详细]
  • 本文介绍了操作系统的定义和功能,包括操作系统的本质、用户界面以及系统调用的分类。同时还介绍了进程和线程的区别,包括进程和线程的定义和作用。 ... [详细]
  • svnWebUI:一款现代化的svn服务端管理软件
    svnWebUI是一款图形化管理服务端Subversion的配置工具,适用于非程序员使用。它解决了svn用户和权限配置繁琐且不便的问题,提供了现代化的web界面,让svn服务端管理变得轻松。演示地址:http://svn.nginxwebui.cn:6060。 ... [详细]
  • JavaWeb中读取文件资源的路径问题及解决方法
    在JavaWeb开发中,读取文件资源的路径是一个常见的问题。本文介绍了使用绝对路径和相对路径两种方法来解决这个问题,并给出了相应的代码示例。同时,还讨论了使用绝对路径的优缺点,以及如何正确使用相对路径来读取文件。通过本文的学习,读者可以掌握在JavaWeb中正确找到和读取文件资源的方法。 ... [详细]
author-avatar
多米音乐_35547384
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有