文章目录

  • nginx 简介
    • nginx 的特性
    • nginx 的优点
    • nginx基本功能
    • nginx 扩展功能
    • nginx 的应用类别
    • nginx 的模块
    • nginx 的工作原理
  • 安装
    • 关闭防火墙和 SELinux
    • 创建 nginx 用户
    • 安装开发工具包
    • 安装依赖包和常用工具
    • 下载 nginx 的压缩包
    • 解压
    • 编译安装
    • 设置环境变量
    • 启动 nginx

nginx 简介

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

nginx 的特性

nginx 是一个很牛的高性能 Web 和反向代理服务器,它具有很多非常优越的特性:

  • 在高连接并发的情况下,nginx 是 Apache 服务器不错的替代品,能够支持高达 50000 个并发连接数的响应
  • 使用 epoll and kqueue 作为开发模型
  • nginx 作为负载均衡服务器:nginx 既可在内部直接支持和 PHP 程序对外进行服务,也可支持作为 HTTP 代理服务器对外进行服务
  • nginx 采用 C 进行编写,不论系统资源开销还是 CPU 使用效率都比 Perlbal 要好很多

nginx 的优点

  • 更快:

    • 单次请求会得到更快的响应。
    • 在高并发环境下,nginx 比其他 WEB 服务器有更快的响应。
  • 高扩展性:
    • nginx 是基于模块化设计,由多个耦合度极低的模块组成,因此具有很高的扩展性。许多高流量的网站都倾向于开发符合自己业务特性的定制模块。
  • 高可靠性:
    • nginx 的可靠性来自于其核心框架代码的优秀设计,模块设计的简单性。另外,官方提供的常用模块都非常稳定,每个 worker 进程相对独立,master 进程在一个 worker 进程出错时可以快速拉起新的 worker 子进程提供服务。
  • 低内存消耗:
    • 一般情况下,10000 个非活跃的 HTTP Keep­Alive 连接在 nginx 中仅消耗 2.5MB 的内存,这是 nginx 支持高并发连接的基础。
    • 单机支持 10 万以上的并发连接:理论上,nginx 支持的并发连接上限取决于内存,10 万远未封顶。
  • 热部署:
    • master 进程与 worker 进程的分离设计,使得 nginx 能够提供热部署功能,即在 7x24 小时不间断服务的前提下,升级 nginx 的可执行文件。当然,它也支持不停止服务就更新配置项,更换日志文件等功能。
  • 最自由的 BSD 许可协议:
    • 这是 nginx 可以快速发展的强大动力。BSD 许可协议不只是允许用户免费使用 nginx ,它还允许用户在自己的项目中直接使用或修改 nginx 源码,然后发布。

nginx基本功能

  • 静态资源的 web 服务器,能缓存打开的文件描述符
  • http、smtp、pop3 协议的反向代理服务器
  • 缓存加速、负载均衡 支持 FastCGI(fpm,LNMP),uWSGI(Python)等
  • 模块化(非 DSO 机制),过滤器 zip、SSI 及图像的大小调整
  • 支持SSL

nginx 扩展功能

  • 基于名称和 IP 的虚拟主机
  • 支持 keepalive
  • 支持平滑升级
  • 定制访问日志、支持使用日志缓冲区提高日志存储性能
  • 支持 url rewrite
  • 支持路径别名
  • 支持基于 IP 及用户的访问控制
  • nginx 基于用户的访问控制需要借助于 httpd 的 htpassword 来实现
  • 支持速率限制,支持并发数限制

nginx 的应用类别

  • 使用 nginx 结合 FastCGI 运行 PHP、JSP、Perl 等程序
  • 使用 nginx 作反向代理、负载均衡、规则过滤
  • 使用 nginx 运行静态 HTML 网页、图片
  • nginx 与其他新技术的结合应用

nginx 的模块

nginx 由内核和模块组成。其中,内核的设计非常微小和简洁,完成的工作也非常简单,仅仅通过查找配置文件将客户端请求映射到一个 location block(location 是 nginx 配置中的一个指令,用于 URL 匹配),而在这个 location 中所配置的每个指令将会启动不同的模块去完成相应的工作。

nginx 的模块从结构上分为核心模块、基础模块和第三方模块

HTTP 模块、EVENT 模块和 MAIL 模块等属于核心模块
HTTP Access 模块、HTTP FastCGI 模块、HTTP Proxy 模块和 HTTP Rewrite 模块属于基本模块
HTTP Upstream 模块、Request Hash 模块、Notice 模块和 HTTP Access Key 模块属于第三方模块
用户根据自己的需要开发的模块都属于第三方模块。正是有了如此多模块的支撑,nginx 的功能才会如此强大

nginx 模块从功能上分为三类
Handlers(处理器模块)。此类模块直接处理请求,并进行输出内容和修改 headers 信息等操作。handlers 处理器模块一般只能有一个
Filters(过滤器模块)。此类模块主要对其他处理器模块输出的内容进行修改操作,最后由 nginx 输出
Proxies(代理器模块)。就是 nginx 的 HTTP Upstream 之类的模块,这些模块主要与后端一些服务。比如 fastcgi- 等操作交互,实现服务代理和负载均衡等功能

nginx 模块分为:核心模块、事件模块、标准 HTTP 模块、可选 HTTP 模块、邮件模块、第三方模块和补丁等

nginx 基本模块:所谓基本模块,指的是 nginx 默认的功能模块,它们提供的指令,允许你使用定义 nginx 基本功能的变量,在编译时不能被禁用,包括:

  • 核心模块:基本功能和指令,如进程管理和安全。常见的核心模块指令,大部分是放置在配置文件的顶部
  • 事件模块:在 nginx 内配置网络使用的能力。常见的 events(事件)模块指令,大部分是放置在配置文件的顶部
  • 配置模块:提供包含机制具体的指令,请参考 nginx 的官方链接

nginx 的工作原理

nginx 的模块直接被编译进 nginx,因此属于静态编译方式。

启动 nginx 后,nginx 的模块被自动加载,与 Apache 不一样,首先将模块编译为一个 so 文件,然后在配置文件中指定是否进行加载。

在解析配置文件时,nginx 的每个模块都有可能去处理某个请求,但是同一个处理请求只能由一个模块来完成。

nginx 的进程架构:
启动 nginx 时,会启动一个 Master 进程,这个进程不处理任何客户端的请求,主要用来产生 worker 线程,一个 worker 线程用来处理 n 个 request。

nginx 主要由一个 master 主进程和多个 worker 进程

master 主进程主要是管理 worker 进程,对网络事件进行收集和分发:
接收来自外界的信号
向各 worker 进程发送信号
监控 worker 进程的运行状态,当 worker 进程退出后(异常情况下),会自动重新启动新的 worker 进程
nginx 用一个独立的 worker 进程来处理一个请求,一个 worker 进程可以处理多个请求:
当一个 worker 进程在 accept 这个连接之后,就开始读取请求,解析请求,处理请求,产生数据后,再返回给客户端,最后才断开连接。
一个请求,完全由 worker 进程来处理,而且只在一个 worker 进程中处理。采用这种方式的好处节省锁带来的开销。对于每个 worker 进程来说,独立的进程,不需要加锁,所以省掉了锁带来的开销,同时在编程以及问题查上时,也会方便很多
独立进程,减少风险。
采用独立的进程,可以让互相之间不会影响,一个进程退出后,其它进程还在工作,服务不会中断,master 进程则很快重新启动新的 worker 进程。在一次请求里无需进程切换

web 服务器请求资源过程

  1. 客户端发起请求,然后与服务端建立 tcp 连接
  2. 服务器接收请求
  3. 进行反向代理,然后服务器处理请求
  4. 查看访问资源的类型(可能是本地的资源,也可能是通过 NFS 挂载的资源)
  5. 构建响应报文
  6. 通过网络接口返回响应报文给客户端
  7. 服务端将本次的操作记录到日志中


详细流程
client:输入网址 –> 发起 http request –> 等待 web server 响应。
server:收到 client请求 –> 加载资源 –> 构建响应报文,发给client。
client 发起 http 请求
client 将键入的域名解析为 server 端的 IP 地址(DNS解析)。
client 与 server 进行 TCP 连接(三次握手))。
client 与 web server 数据传输.。
client 与 web server 断开 TCP 连接(四次挥手)
client 解释 HTML 文档,浏览器渲染,将在屏幕上显示渲染后的图形结果
server 收到 client 请求时
http request 请求首先到达 server 端的公网 IP 上(公网 IP 一般配置在硬件防火墙上)。
经过防火墙过滤之后,到达负载均衡层(可能涉及四层负载均衡和七层负载均衡),负载均衡将请求报文往后端 Real Server 调度。
经过 lvs 调度至后端 RS 上,此时后端提供 web 服务的一般是 nginx)Apache也可能),nginx 判断请求报文是动态资源还是静态资源(动静分离)。
静态资源:由 nginx 发起系统调用,请求内核从磁盘加载相应的资源文件,可能涉及存储服务器(资源的保存的服务器)。
动态资源:由 nginx 代理给能处理动态资源的服务器(Tomcat、PHP 等),还可能涉及访问数据库服务器。

web server 将请求的资源加载完成之后,构建响应报文发送给 client。

安装

关闭防火墙和 SELinux

[root@k ~]# systemctl stop firewalld[root@k ~]# systemctl disable firewalld
Removed /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.[root@k ~]# vim /etc/sysconfig/selinux
SELINUX=disabled[root@k ~]# reboot

创建 nginx 用户

[root@k ~]# useradd -r -M -s /sbin/nologin nginx

安装开发工具包

[root@k ~]# dnf group mark -y install "Development Tools"

安装依赖包和常用工具

[root@k ~]# yum install -y pcre-devel openssl openssl-devel gd-devel gcc gcc-c++ make wget

下载 nginx 的压缩包

[root@k ~]# wget http://nginx.org/download/nginx-1.22.0.tar.gz

解压

[root@k ~]# tar xf nginx-1.22.0.tar.gz -C /usr/local/
[root@k ~]# cd /usr/local/
[root@k local]# ls
bin  etc  games  include  lib  lib64  libexec  nginx-1.22.0  sbin  share  src

编译安装

[root@k local]# cd nginx-1.22.0/
[root@k nginx-1.22.0]# ./configure \
> --prefix=/usr/local/nginx \
> --user=nginx \
> --group=nginx \
> --with-debug \
> --with-http_ssl_module \
> --with-http_realip_module \
> --with-http_image_filter_module \
> --with-http_gunzip_module \
> --with-http_gzip_static_module \
> --with-http_stub_status_module \
> --http-log-path=/var/log/nginx/access.log \
> --error-log-path=/var/log/nginx/error.log[root@k nginx-1.22.0]# make && make install

设置环境变量

[root@k nginx-1.22.0]# echo 'export PATH=/usr/local/nginx/sbin:$PATH' > /etc/profile.d/nginx.sh[root@k nginx-1.22.0]# . /etc/profile.d/nginx.sh

启动 nginx

[root@k nginx-1.22.0]# ss -antl
State    Recv-Q   Send-Q       Local Address:Port       Peer Address:Port   Process
LISTEN   0        128                0.0.0.0:22              0.0.0.0:*
LISTEN   0        128                   [::]:22                 [::]:*                [root@k nginx-1.22.0]# nginx[root@k nginx-1.22.0]# ss -antl
State    Recv-Q   Send-Q       Local Address:Port       Peer Address:Port   Process
LISTEN   0        128                0.0.0.0:22              0.0.0.0:*
LISTEN   0        128                0.0.0.0:80              0.0.0.0:*
LISTEN   0        128                   [::]:22                 [::]:*

nginx 简介与安装相关推荐

  1. Nginx 简介和安装

    1.Nginx简介 1.Nginx(engine x)是一个高性能的Web服务器和反向代理服务器,也可以作为邮件代理服务器 2.Nginx是申俄罗斯人Igor Sysoev采用C涛言开发缉写的,第一个 ...

  2. Nginx源码安装及应用

    一:Nginx简介: Nginx ("engine x") 是一个高性能的HTTP和反向代理服务器.在高连接并发的情况下,Nginx是Apache服务器不错的替代品. Nginx作 ...

  3. FastDFS简介和安装

    官方网站 FASTDFS FastDFS简介和安装 软件包下载地址 安装gcc. 命令:yum install make cmake gcc gcc-c++ cd /usr/local/softwar ...

  4. Nginx 简介和使用

    Nginx简介 Nginx发展介绍 Nginx作者 正向代理和反向代理概念 网站代理服务器查看 Nginx环境搭建 下载 安装前准备 安装 启动 检测Nginx是否启动 关闭 重启 Nginx核心配置 ...

  5. Docker Compose 简介、安装、初步体验

    [Docker那些事]系列文章 docker 安装 与 卸载 centos Dockerfile 文件结构.docker镜像构建过程详细介绍 Dockerfile文件中CMD指令与ENTRYPOINT ...

  6. 高可用高性能负载均衡软件HAproxy详解指南-第一章(简介、安装)

    第一章:HAproxy简介及安装配置 对Linux有兴趣的朋友加入QQ群:476794643 在线交流 本文防盗链:http://zhang789.blog.51cto.com 目录 HAproxy简 ...

  7. Nginx之一:Nginx的编译安装

    一.Nginx简介 官方网址:http://nginx.org/ Nginx是由1994年毕业于俄罗斯国立莫斯科鲍曼科技大学的同学为俄罗斯rambler.ru公司开发的,开发工作最早从2002年开始, ...

  8. Prometheus简介和安装

    1.Prometheus功能 在业务层用作埋点系统: Prometheus支持多种语言(Go,java,python,ruby官方提供客户端,其他语言有第三方开源客户端).我们可以通过客户端方面的对核 ...

  9. Windows中Nginx下载、安装、配置

    这里写目录标题 一.Nginx简介 二.安装部署 1.下载完成后,解压缩,运行cmd,使用命令进行操作,不要直接双击nginx.exe,不要直接双击nginx.exe,不要直接双击nginx.exe ...

最新文章

  1. mvc ajax get请求,springMVC 中 ajax get 请求和 post 请求的坑以及参数传递
  2. C#中使用StreamReader实现文本文件的读取与写入
  3. 104.求二叉树的最大深度 Maximum Depth of Binary Tree
  4. Java数字字符串如何转化为数字数组
  5. java notify唤醒原理_Java wait和notify虚假唤醒原理
  6. 机器学习 —— 基础整理(二)朴素贝叶斯分类器;文本分类的方法杂谈
  7. 【Flink】UnsatisfieldlinkError : org.apache.hadoop.util.NativeCrc32
  8. jsp action java_jsp中Action使用session方法实例分析
  9. (转)美国的套利已经变成一门生意,而不是一门技术了
  10. 应用化工技术学计算机不,化工技术类包括哪些专业
  11. vmbox 宿主机ssh登录虚拟机
  12. phpmywind 查询结果生成csv文件并下载到本地
  13. 制作动态图表,没有比这个方法更简单的了
  14. mingw版本下qt与HTML,QT5.10开发(2) 在Windows 10下使用MinGW编译 静态Qt 5.10 release版 详细过程...
  15. html图片缩放作为背景,css怎么把背景图片缩小?
  16. 特来电最新财务数据曝光:年亏7770万,与星星充电争抢上市
  17. 中国照片编辑软件市场现状研究分析与发展前景预测报告(2022)
  18. 初识西门子Wincc OA——超大型/分布式SCADA
  19. 第三课 用OD脱壳的基本方法
  20. WIN10开始菜单怎么点都没有反应

热门文章

  1. 数据挖掘简介及模型介绍(二)
  2. java 布尔表达式_Java中的布尔表达式优化
  3. strlen“好神奇”,永真式——if(strlen(q) - strlen(p) = 0)
  4. iOS自制火柴人动画CC_Sprite程序员自己做动画 轻量级iOS动画引擎 游戏引擎
  5. 激光slam与视觉slam
  6. 协作与自我价值的关系
  7. vue 报表下钻功能开发
  8. seo标题该如何优化?
  9. 【概率论与数理统计】期末复习
  10. centos7 cuda测试_CentOS7.3安装NVIDIA-1080ti驱动、cuda、cudnn、TensorFlow(示例代码)