nginx基础1——工作原理、安装配置、命令参数

2023-11-02

一、基本了解

nginx简介:

  1. nginx是一款轻量级的Web服务器、反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like协议下发行。
  2. nginx由俄罗斯的程序设计师Igor Sysoev所开发,最初供俄国大型的入口网站及搜寻引擎Rambler使用。
  3. nginx第一个公开版本0.1.0发布于2004年10月4日。其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。2011年6月1日,nginx 1.0.4发布。
  4. nginx的特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。

1.1 特性优点

nginx特性:

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

nginx优点:

  1. 高并发连接:官方测试能够支撑5万并发连接,在实际生产环境中跑到2-3万并发连接数。
  2. 内存消耗少:在3万并发连接下,开启的10个nginx进程才消耗150M内存(15M*10=150M)。
  3. 配置文件非常简单:风格跟程序一样通俗易懂。
  4. 成本低廉:nginx为开源软件,可以免费使用。而购买F5 BIG-IP、NetScaler等硬件负载均衡交换机则需要十多万至几十万人民币。
  5. 支持Rewrite重写规则:能够根据域名、URL的不同,将HTTP请求分到不同的后端服务器群组。
  6. 内置的健康检查功能:如果Nginx Proxy后端的某台Web服务器宕机了,不会影响前端访问。
  7. 节省带宽:支持GZIP压缩,可以添加浏览器本地缓存的Header头。
  8. 稳定性高:用于反向代理,宕机的概率微乎其微。
  9. 模块化设计:模块可以动态编译。
  10. 外围支持好:文档全,二次开发和模块较多。
  11. 支持热部署:可以不停机重载配置文件。
  12. 支持事件驱动、AIO(AsyncIO,异步IO)、mmap(Memory Map,内存映射)等性能优化

1.2 功能应用

nginx基本功能:

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

nginx扩展功能:

  1. 基于名称和IP的虚拟主机。
  2. 支持keepalive长连接。
  3. 支持平滑升级。
  4. 定制访问日志、支持使用日志缓冲区提高日志存储性能。
  5. 支持URL重写。
  6. 支持路径别名。
  7. 支持基于IP及用户的访问控制。
  8. 支持速率限制,支持并发数限制。

nginx应用类别:

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

1.3 工作模块分类

基本了解:

  • nginx由内核和模块组成。内核的设计非常微小和简洁,完成的工作也非常简单,仅仅通过查找配置文件将客户端请求映射到一个location block,而在这个location中所配置的每个指令将会启动不同的模块去完成相应的工作。
  • location是nginx配置文件中的一个参数,指定网页访问的根地址,location参数后面指定要访问的网页文件路径。
  • nginx的模块从结构上分为核心模块、基础模块和第三方模块

模块分类:

  • 核心模块:HTTP模块(访问网站)、EVENT模块(记录事件)、MAIL模块(发送邮件)等。
  • 基本模块:HTTP Access模块(访问)、HTTP FastCGI模块(lnmp)、HTTP Proxy模块(反向代理)、HTTP Rewrite模块(重定向URL)。
  • 第三方模块:HTTP Upstream模块、Request Hash模块、Notice模块和HTTP Access Key模块。

注意事项:

  1. 基本模块在编译时默认是开启状态,不能被禁用。
  2. 基本模块包括:
    • 核心模块(提供基本功能和指令),常见核心模块指令大部分是放置在配置文件的顶部,需要顶行写,不能有空格和括号包含关系。
    • 事件模块(Nginx内配置网络使用的能力),常见的events(事件)模块指令,大部分是放置在配置文件的顶部。
    • 配置模块(提供包含机制),指主配置文件中可以通过引用其他路径下的配置文件参数实现功能,可以简化配置文件,方便阅读。
功能模块分类 作用
Proxies(代理器模块) 就是nginx的HTTP Upstream之类的模块,主要与后端服务比如fastcgi等操作交互,实现服务代理和负载均衡等功能。
Handlers(处理器模块) 此类模块直接处理请求,并进行输出内容和修改headers信息等操作。handlers处理器模块一般只能有一个。
Filters(过滤器模块) 此类模块主要对其他处理器模块输出的内容进行修改操作,最后由nginx输出。

1.4 模块配置方法

1.如下图。这个核心模块参数可以配置在配置文件中的events中的括号里。
在这里插入图片描述
2.如下图。这个配置参数只能单独写一行,且顶行写,不能存在任何一个括号里。
在这里插入图片描述
3.如下图。这个配置参数可以配置在main, http, mail, stream, server, location任意位置。

  • main:对本机所有网站生效。
  • http:对所有server网站生效。
  • server:对某一个网站生效。
  • location:对某一个网站中的某一个访问页面生效。

在这里插入图片描述

二、工作原理

基本了解:

  • nginx的模块直接被编译进nginx,属于静态编译。若要使用其他模块功能时,再添加模块编译,属于动态编译。
  • 启动nginx后,nginx的模块被自动加载,与Apache不一样,首先将模块编译为一个so文件,然后在配置文件中指定是否进行加载。
  • 在解析配置文件时,nginx的每个模块都有可能去处理某个请求,但是同一个处理请求只能由一个模块来完成。

nginx进程架构:

  1. 启动nginx时,会启动一个Master进程,这个进程不处理任何客户端的请求,主要用来产生worker线程。
  2. 每个worker线程下有多个工作模块,根据不同的客户端请求,各个工作模块分别对应处理一个请求。
  3. 当客户端请求web网站时,实际上是请求master进程产生的worker线程中的工作模块。
    在这里插入图片描述

HTTP请求和响应的过程:

  1. 客户端发出请求,经过负载均衡高可用代理服务器后,到达某一台nginx服务器。
  2. nginx程序收到请求后,选择一个处理器模块进行处理,再通过过滤器模块生成请求内容,再继续宁内容处理。
  3. 最后将处理结果发送给客户端。
    在这里插入图片描述

WEB服务请求步骤:

  1. 客户都安访问网站url,比如访问的是80端口,就需要建立tcp连接进行三次握手。
  2. 建立连接后,nginx服务端收到客户都安请求,开始调用处理器模块处理请求,根据客户端的请求去寻找资源。
  3. 找到资源后,就开始输出结果,建立响应报文,最后发送给客户端。
  4. 最后,nginx服务端记录整个过程的日志。
    在这里插入图片描述

三、安装与配置

1.创建系统用户nginx。

useradd -r -M -s /sbin/nologin nginx

2.安装依赖包。

yum -y install pcre-devel openssl openssl-devel gd-devel gcc gcc-c++ make
yum -y groups mark install 'Development Tools'

3.创建日志存放目录。

mkdir -p /var/log/nginx
chown -R nginx.nginx /var/log/nginx

4.下载nginx安装包,,解压,编译安装。

wget http://nginx.org/download/nginx-1.24.0.tar.gz
tar zxf nginx-1.24.0.tar.gz
cd nginx-1.24.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

//安装。
make -j $(nproc) && make install

5.配置环境变量,启动nginx服务。

echo 'export PATH=/usr/local/nginx/sbin:$PATH' > /etc/profile.d/nginx.sh
source /etc/profile.d/nginx.sh

//启动。
nginx

6.访问web网页。

在这里插入图片描述

四、常用命令

参数 释义
-t 检查配置文件语法
-v 输出nginx的版本
-c 指定配置文件的路径,启动nginx时可以指定其他配置文件。
-s 发送服务控制信号,可选值有stop、quit、reopen、reload。
-V 编译时使用的参数

1.检查使用的配置文件语法是否正确。
在这里插入图片描述

2.查看nginx已编译安装的模块。若要继续添加模块,则需要把已安装的模块一起写进去编译。
在这里插入图片描述
3.重启nginx服务,一般都是先停止,再重新启动。
在这里插入图片描述
4.重新读取配置文件。

nginx -s reload
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

nginx基础1——工作原理、安装配置、命令参数 的相关文章

  • ioctl 命令的用户权限检查

    我正在实现 char 驱动程序 Linux 并且我的驱动程序中有某些 IOCTL 命令仅需要由 ADMIN 执行 我的问题是如何在 ioctl 命令实现下检查用户权限并限制非特权用户访问 IOCTL 您可以使用bool capable in
  • 找不到包“gdk-pixbuf-2.0”

    我正在尝试在 Amazon Linux 发行版实例上构建 librsvg 我已经通过 yum 安装了大部分依赖项 其中一些在实例上启用的默认 yum 存储库中不可用 因此必须从头开始构建它们 我已经走了很远 但还停留在最后一点 跑步时sud
  • Linux 中 m 标志和 o 标志将存储在哪里

    我想知道最近收到的路由器通告的 m 标志和 o 标志的值 从内核源代码中我知道存储了 m 标志和 o 标志 Remember the managed otherconf flags from most recently received R
  • 有没有一种快速方法可以从 Jar/war 中删除文件,而无需提取 jar 并重新创建它?

    所以我需要从 jar war 文件中删除一个文件 我希望有类似 jar d myjar jar file I donot need txt 的内容 但现在我能看到从 Linux 命令行执行此操作的唯一方法 不使用 WinRAR Winzip
  • 在使用 Let's Encrypt 和 Nginx 进行的 SSL Labs 测试中,如何在所有类别中获得 A+ 100 分?

    在 www ssllabs com 测试我的 SSL 证书时 我试图在所有类别上获得 100 分 然而 我正在努力争取所有分数都达到 A 和 100 关于我应该使用什么 NGINX 配置有什么建议吗 或者我应该如何生成 Let s Encr
  • 在同一个 nginx 服务器块上公开多个 api uri

    Goal 我的目标是在同一个 nginx 服务器上设置多个后端 api 容器 http localhost 80 api account gt 调用 http account service 9000 http localhost 80 a
  • 在 .gitconfig 中隐藏 GitHub 令牌

    我想将所有点文件存储在 GitHub 上 包括 gitconfig 这需要我将 GitHub 令牌隐藏在 gitconfig 中 为此 我有一个 gitconfig hidden token 文件 这是我打算编辑并放在隐藏令牌的 git 下
  • 在centos中安装sqlite3 dev和其他包

    我正在尝试使用 cpanel 在 centos 机器上安装 sqlite dev 和其他库 以便能够编译应用程序 我对 debian 比 centos 更熟悉 我知道我需要的库是 libsqlite3 dev libkrb5 dev lib
  • 在 Linux 上以编程方式设置 DNS 名称服务器

    我希望能够通过我的 C C 程序为 Linux 上的 DNS 名称服务器添加 IP 地址 我在一个带有只读 etc resolv conf 的嵌入式平台上 这意味着我不能简单地将 nameserver xxx xxx xxx xxx 行添加
  • Linux 上的静态 Qt5 构建:部署时如何处理字体?

    我使用这些配置选项创建了 Qt 5 2 0 库的静态版本 Ubuntu 12 04 开源 确认许可 force pkg config 发布 静止的 前缀 home juzzlin qt5 无icu opengl桌面 无油嘴滑舌 辅助功能 n
  • 如何在 Ubuntu 中创建公共 HTML 文件夹?

    简单的问题 但由于某种原因我无法在谷歌上找到确切的答案 我在 Slicehost 上安装了全新的 Ubuntu 并且想在我的主目录中为包含一堆静态 HTML 文件的简单网站创建一个公共目录 我该怎么做呢 只是打字的问题吗mkdir publ
  • 无需超级用户即可在 Linux 中打开 RAW 套接字

    我必须编写一个在 Linux 上运行的 ping 函数 语言是 C 所以 C 也可以 在网上搜索并查看源代码ping命令 事实证明我应该创建一个原始套接字 icmp sock socket AF INET SOCK RAW IPPROTO
  • 无法从外部访问在 docker swarm 上运行的容器

    我正在 docker swarm 上运行我的容器 资产前端service 是我的前端应用程序 它在容器内运行 Nginx 并公开端口 80 现在如果我这样做 curl http 10 255 8 21 80 http 10 255 8 21
  • PHP-FPM 和 Nginx:502 错误网关

    配置 Ubuntu 服务器 11 10 64 位 亚马逊AWS Ec2 托管在云上 t1 micro实例 在我写任何其他内容之前 我想声明我已经检查了两者nginx 502 错误网关 https stackoverflow com ques
  • CMake 链接 glfw3 lib 错误

    我正在使用 CLion 并且正在使用 glfw3 库编写一个程序 http www glfw org docs latest http www glfw org docs latest 我安装并正确执行了库中的所有操作 我有 a 和 h 文
  • 从 Xlib 转换为 xcb

    我目前正在将我的一个应用程序从 Xlib 移植到 libxcb 但在查找有关我有时使用的 XInput2 扩展的信息时遇到了一些麻烦 libxcb 中有 XInput2 实现吗 如果是的话 在哪里可以找到文档 目前我在使用此功能时遇到问题
  • 如何使用waf构建共享库?

    我想使用构建一个共享库waf http code google com p waf 因为它看起来比 GNU 自动工具更容易 更简洁 到目前为止 我实际上有几个与我开始编写的 wscript 有关的问题 VERSION 0 0 1 APPNA
  • 与 pthread 的进程间互斥

    我想使用一个互斥体 它将用于同步对两个不同进程共享的内存中驻留的某些变量的访问 我怎样才能做到这一点 执行该操作的代码示例将非常感激 以下示例演示了 Pthread 进程间互斥体的创建 使用和销毁 将示例推广到多个进程作为读者的练习 inc
  • 静态方法的 Java 内存模型

    我来自操作系统和 C 语言背景 在代码编译时 世界很简单 需要处理和理解堆栈 堆文本部分等 当我开始学习 Java 时 我确实了解 JVM 和垃圾收集器 我对静态方法感到很有趣 根据我的理解 类的所有实例都会在堆中创建 然后被清理 但是 对
  • 使用 python 脚本更改 shell 中的工作目录

    我想实现一个用户态命令 它将采用其参数之一 路径 并将目录更改为该目录 程序完成后 我希望 shell 位于该目录中 所以我想实施cd命令 但需要外部程序 可以在 python 脚本中完成还是我必须编写 bash 包装器 Example t

随机推荐

  • JS逆向04之xhr断点webpack抠代码,图文并茂,导出加密函数。

    说明 本文只针对新手入门了解 高手绕道 只做技术性研究 请勿用于非法渠道 目标 https www gm99 com 前言 1 首先准备Chrome内核浏览器 我用的360极速版浏览器 2 打开目标网址 按F12或者网页空白处右键审查元素
  • 1 如何在计算机中表示一个词的意思?

    本章主要介绍了 如何在计算机中表示一个词的意思 从WordNet OneHot 到最重要的Word2Vec算法 参考 https www zhihu com column c 1507074362628374528 https zhuanl
  • Linux服务器-Linux服务器的类型

    Linux系统发行版本 当前市面上流行的Linux系统主要分为Readhat和Debian两大系列 而android底层直接用linux原版内核 2 一 Redhat系列 Redhat 主要是服务器型Linux 商用收费 RHEL是Red
  • CSS ul li 缩进控制,各版本兼容设置,文章第一行缩进两汉字

    CSS ul li 缩进控制 各版本兼容设置 将margin 和padding 都设置成0 ul list style type none margin 0px padding 0px text indent 2em 这句话的目的就是为了让
  • UncaughtExceptionHandler示例使用

    概述 UncaughtExceptionHandler是用来catch线程内的没有被捕获到的exception 可以在uncaughtException方法中对这些异常进行统一处理 用法 UncaughtExceptionHandler是一
  • windows切换窗口快捷键

    切换窗口实际看上去也不复杂 但是一旦打开的软件窗口多了 单纯的用眼搜索查找 鼠标点击效率还是有点低 IDE有快捷键 windows也有快捷键 感觉也可以总感觉汇总一个 这里就是关于windows切换窗口的几个快捷键 1 crtl tab 这
  • 西门子S120常见故障F7900及其排查方法

    西门子S120作为一款高性能伺服驱动器 其强大的功能和优越的控制性能得到了广大用户的一致好评和青睐 借助强大的调试软件可以方便完成S120的调试 但对于初步接触和使用该产品的工程师来说 调试过程中往往会遇到一些简单的问题 由于缺乏经验而导致
  • 线性代数学习笔记4——矩阵的逆

    在进行矩阵的运算的时候 我们会发现我们没有定义矩阵的除法 但是经常又需要做类似的操作 因而我们引入矩阵的逆的概念 用以填补这个空白 矩阵的逆 由于我们在定义矩阵运算的时候只定义了数乘和矩阵乘法 而没有除法运算 和逆元的产生一样 我们为了定义
  • AutoDL算力平台租用GPU服务器+VSCode远程开发同步代码

    文章目录 一 关于租GPU服务器 二 使用XShell连接刚租的服务器 三 VSCode远程开发 四 VSCode SFTP插件实现本地代码与远程代码同步 一 关于租GPU服务器 理由 便宜好用 性价比高 https www autodl
  • Mybatis-plus3.5.1+版代码自动生成(FastAutoGenerator)

    该方法仅适用于mybatis plus 3 5 1 以上的版本 准备工作 Maven依赖 注意版本 该方法有可能因为版本的问题出现错误
  • 初学编程100个代码

    Java Python等主流编程语言如今火的不行 初学编程都有哪100个代码呢 笔者结合实际开发经验和同学们最迫切关注的技术热点 总结了100个常用的代码实现 具体如下 1 输出 Hello World print Hello World
  • 客户端负载均衡及透明应用切换(TAF)tnsnames failover=on

    客户端负载均衡及透明应用切换 TAF 这是客户端的一种功能 要在客户端的tnsnames ora中设置本地服务命名相应的参数 LOAD BALANCE ON和FAILOVER ON FAILOVER MODE参数 来启用客户端负载均衡和TA
  • springboot-mvc+扩展SpringMVC+@EnableWebMvc+修改自动化配置

    1 Spring MVC auto configuration https docs spring io spring boot docs 1 5 9 RELEASE reference htmlsingle boot features s
  • 定时器0工作方式1

    include
  • 在GPU上运行pytorch程序(指定单/多显卡)

    目录 1 使用CUDA VISIBLE DEVICES 2 使用cuda 和torch cuda set device 3 使用device 4 使用torch nn DataParallel 1 使用CUDA VISIBLE DEVICE
  • error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token

    头文件函数声明少了 分号 转载于 https www cnblogs com xuyh p 3794479 html
  • 分治算法例题

    分治算法例题 leetcode 23 给你一个链表数组 每个链表都已经按升序排列 请你将所有链表合并到一个升序链表中 返回合并后的链表 示例 1 输入 lists 1 4 5 1 3 4 2 6 输出 1 1 2 3 4 4 5 6 解释
  • WPF混合开发之WebView2(一) 简介及环境搭建

    目录 引言 WebView2系统要求 WebView2下载安装 结语 引言 在WPF开发中 经常会有混合开发的需求 即在WPF中加载网页 目前最常用也是最流行的方式是CefSharp 它的功能非常强大 可以提供较为完善的开发和使用体验 但是
  • 输出过压保护电路的设计思路

    输出过压保护电路的设计思路 开关电源在使用过程中会发生输出电压过高或者过低的现象 开关电源存在一个额定电压 如果超出额定电压就可能超出输出电容的耐压值 电源会因此发热击穿而烧毁甚至起火 因此设计出不同类型的保护电路 当控制电路失效或其他故障
  • nginx基础1——工作原理、安装配置、命令参数

    文章目录 一 基本了解 1 1 特性优点 1 2 功能应用 1 3 工作模块分类 1 4 模块配置方法 二 工作原理 三 安装与配置 四 常用命令 一 基本了解 nginx简介 nginx是一款轻量级的Web服务器 反向代理服务器及电子邮件