Nginx: 模块化管理编译安装与配置结构

news2024/9/23 17:20:50

Nginx 模块化管理机制

  • Nginx 是一个高性能web和反向代理服务器,尤其是在激烈的Web服务器竞争领域中能够依然保持很好的这个发展势头,并且在现在的众多企业中得到一个广泛的应用,这一切其实跟Nginx架构设计是分不开的

  • 另外高度模块化的设计也很好的使Nginx保持了高可用性和高可靠性,对于高度模块化,是Nginx一个架构基础

  • 对Nginx服务器来说,它能够分解为多个模块,每个模块其实只实现了自身的某一个特定的功能,而且模块与模块之间遵循高内聚低耦合这样一个开发设计原则

对于整体模块分类来说,大致可以分为以下几个方向


1 )核心服务器模块

  • 对核心服务器模块来说,它提供了 Nginx 正常运行的一些必不可少的一些模块
  • 包括提供了错误日志记录的errorlog模块,包括提供配置文件解析的conf模块,包括提供事件驱动机制的event模块,epoll 是一个事件处理机制, 包括一些进程管理等等一些核心功能,都是封装在核心功能模块中的

2 ) HTTP 模块

  • 标准HTTP模块提供了和HTTP解协议的一种解析相关的功能,比如说像端口配置,网页编码,字符如何被处理,包括像我们的HTTP的响应头的设置, 它也有一个核心模块 ngx_http_core 模块
  • 还有一个就是可选的HTTP模块,主要用于扩展标准的一个HTTP的一个功能, 让Nginx能处理一些像特殊的这种服务
  • 比如提供对于 SSO的支持,对于现在这种HTTPS协议来说是必不可少的, 还有解析gzip, 在传输HTTP请求报文和响应报文的时候,尤其是响应报文的时候,它会首先要求你进行压缩,可以有效的减少网络带宽的占用
  • 还有其他一些各种模块,比如说像 Flash 模块的支持,多媒体传输模块的支持,都是一些可选的HTTP模块

3 )邮件服务

  • Nginx 是能够支持反向代理邮件服务器的, 那对于mail模块的支持来说,它主要是用于支持Nginx的邮件服务协议
  • 包括像pop3协议,包括像SMTP协议等等的支持,在mail模块中,它也有一个核心模块 ngx_mail_core 模块

4 ) 第三方模块

  • 其实第三方模块是为了扩展Nginx 服务器的一个应用
  • 很多情况下是为了完成开发的所自定义的一些功能
  • 比如说 rds_json_nginx 这样一些模块,主要是提供于json的一些支持。
    还有像 lua_nginx 这个模块,开发者可以利用 lua 脚本来进行二次开发支持

5 )总结

  • 对Nginx来说,高度模块化的设计, 有利于方便的开发,另外对于构建高性能的Web 服务器和反向代理服务器来说是最核心的设计思想

  • 高度模块化设计之后,有利于把功能拆分出来,尽可能的减少模块与模块之间的影响,全部耦合在一块的话,一个模块的问题可能引发另外一些模块的问题,导致整个 Nginx 不可用,模块化设计之后,就可以很大程度避免这样一些问题

  • 针对 Nginx 整个体系结构来说,它的内部结构其实是有核心模块和一系列的功能模块组成的,比如说最核心的内就是一个core模块

  • Nginx 这个core模块它实现了一个底层的一个通信协议,为其他模块和Nginx进程,构建了一个底层的运行环境, 同时也是其他各个模块沟通协作的一个基础

  • 在核心模块之上,它最核心的两个功能,一个是HTTP功能 和 mail 功能

  • 除此之外,它更外面的一些模块,并不是只有这些模块,大概分为这几种类型,比如说像那种有一种类型的模块,就是这种 event_module 模块,它这种其实就是独立操作系统的一个事件处理机制的模块,它提供了对于各具体事件的一个处理, 对于如何利用这些模块来处理事件, 依赖于操作系统, 主要处理跟操作系统,底层相关的一些event相关的一个模块

  • 还有一个 phrasehandler模块,这个模块主要是负责处理客户端请求并产生响应内容的一个模块, 比如说可以对客户端的一个静态页面请求处理,并对响应后的磁盘文件做内容输出的时候做设定的一个模块

  • filter模块,就是一个过滤模块主要是对输出内容进行一个处理, 比如说进行修改,或者是对URL进行替换, 定义

  • upstream模块, 就是实现了反向代理的功能,只要有这个模块 Nginx 就能够将一个客户端的用户请求真正的转发到一个后端的一个服务器,可能是具体的应用服务器,从而它还能够实现在后端服务器结束有具体的响应内容之后,从后端的服务器上读取响应的内容,从而继续封装返回给客户端,对于upstream模块来说,其实也是一种特殊的handler模块,只不过,这个响应模块它不是自己来处理的而从后端服务器上读取的

  • extend module 扩展的一些模块,允许开发者自定义开发需要的一些模块,然后把它加入到Nginx中

  • load badancer 模块,它其实就是一个负载均衡,实现特定的算法,其实是跟upstream结合起来使用的一个模块

Nginx 编译安装常用配置参数

1 )常用配置参数

参数含义
–prefix指定安装的目录, 总的父目录
–user运行nginx的worker子进程的属主
–group运行nginx的worker子进程的属组
–pid-path存放进程运行pid文件的路径
–conf-path配置文件nginx.conf的存放路径
–error-log-path错误日志error.log的存放路径
–http-log-path访问日志access.log的存放路径
–with-pcrepcre库的存放路径,正则表达式会用到
–with-zlibzlib库的存放路径,gzip模块会用到
  • –prefix 是所有的父目录,下面一些path不指定,都会引用这个父目录取一个默认值
  • –with-pcre 支持正则表达式的库,需要匹配正则就要安装它
  • 这些模块不编译也没有关系,编译后可以正常使用相关功能
  • 内置参数默认原色
    • 显示加上,默认不内置 --with
    • 显示去掉,默认内置

2 )定制编译示例

  • 现在源码包中有如下源码包,$ cd /opt/source/ && ll

  • 解压

    • $ tar xf zlib-1.2.11.tar.xz
    • $ tar xf pcre-8.43.tar.gz
    • $ tar xf nginx-1.16.1.tar.gz
  • 进入nginx目录 $ cd nginx-1.16.1 && ll

    * 这里有一个 configure 脚本,可使用 $ `./configure --help` * 就可以看到它的很多用法,上面表格只是列出一部分,这里自行查看
  • 编译安装

    ./configure 
    	--prefix=/opt/nginx 
    	--conf-path=/opt/nginx/conf/nginx.conf
    	--user=nginx
    	--group=nginx
    	--pid-path=/opt/nginx/pid/nginx.pid
    	--error-log-path=/opt/nginx/logs/error.log 
    	--with-pcre=/opt/source/pcre-8.43 
    	--with-zlib=/opt/source/zlib-1.2.11 
    	--with-http_ssl_module 
    	--with-http_image_filter_module 
    	--with-http_stub_status_module
    	--http-log-path=/opt/nginx/logs/access.log
    
  • 如果出现 ./configure: error: C compiler cc is not found

    • 安装:$ yum install gcc gcc-c++ 解决,需要一定时间
  • 如果出现:./configure: error: SSL modules require the OpenSSL library.

    • 安装:$ yum install openssl openssl-devel
  • 如果出现:./configure: error: the HTTP image filter module requires the GD library.

    • 安装:$ yum install gd gd-devel -y
  • 每次出现上述中断,则重新执行上述命令

  • 直到出现如下信息,则配置成功

  • 使用 $ make 再对nginx源码进行编译

  • 之后,使用 $ make install 进行安装

  • 修改必要的 /opt/nginx/conf/nginx/nginx.conf 配置文件

    • 注意,默认使用rpm包会直接在系统上添加 nginx 用户
    • 但是,使用编译安装的不会,需要手动添加 $ useradd nginx 否则报错
  • 启动nginx: $ /opt/nginx/sbin/nginx

    • 如果启动出问题,查看防火箱
      • $ systemctl stop firewalld
      • $ systemctl disable firewalld
    • 查看selinux 是否关闭
      • $ setenforce 0 临时关闭
      • 永久关闭 $ vim /etc/sysconfig/selinux
        SELINUX=disabled
        

Nginx 配置文件结构


1 )结构

  • 主要是三大模块,第一个是events模块,第二个是http模块,第三个是server模块

  • 当然最上面还有一个叫main模块(用来定义全局的设置), 比如说 nginx 服务运行的用户是谁,属主是谁,应该启动几个worker进程

  • 对events模块,它通常是配置影响nginx服务器与用户的网络连接的,比如说配置 linux 或者是 nginx 事件驱动模型处理有关的指令

  • 对于 http段,主要就是设定http的核心指令的一个段,比如说可以嵌套多个server,这个server可能对应的是一个虚拟主机,比如说,现在有三个不同域名需要去部署不同的网站服务,对于不同的网站服务来说,可以将它部署到同一台nginx服务器上, 只要在server中定义对应的域名,就可以解析到对应的server 段,所以,server端是配置虚拟主机的一个相关参数,在http段中可以有多个server段

    • http 段嵌套了多个 server,同时,需要配置一些反向代理,缓存,甚至是日志定义等绝大多数功能和第三方模块的配置的时候,会在http段中做书写
    • 比如说想要定义反向代理的配置,一个网站是有静态请求和动态请求的, 对于在server中,也就是定义的这样一个虚拟主机中,动态请求可以直接找到对应的location (url)
    • 最后就是 location段,它是嵌套在server中的,它只能用在这个server中,主要配置一个请求的路由,以及各种页面的一个处理情况, location可以理解为一个 url, 比如说请求某一台服务器的时候,我们可以写一个域名, 后面加一个路径,对应磁盘文件上的一个映射路径,也是这个静态文件的一个映射路由

2 ) 示例

user nginx;
group nginx;
....
....

events {
	....
	....
}

http {
	....
	....
	server {
		location path {
				....
				....
		}
		....
		....
	}
	server {
		location path {
				....
				....
		}
		....
		....
	}
	....
	....
}
  • 相关文档:
    • nginx.org
    • nginx.org/en/docs/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2105503.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

计算机毕业设计 二手闲置交易系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点…

影石相机tf内存卡数据格式化后恢复方法

在数字化时代,‌相机成为了我们记录生活、‌捕捉瞬间的重要设备。‌影石相机,‌以其出色的性能和便捷的操作,‌赢得了众多摄影爱好者的青睐。‌然而,‌在使用过程中,‌我们可能会遇到一些意外情况,‌如不小…

PTA L1-041 寻找250

L1-041 寻找250(10分) 对方不想和你说话,并向你扔了一串数…… 而你必须从这一串数字中找到“250”这个高大上的感人数字。 输入格式: 输入在一行中给出不知道多少个绝对值不超过1000的整数,其中保证至少存在一个“2…

828华为云征文:华为云 Flexus X 实例性能测评——SuperBench 一键窥见性能

今天我拿到了华为云 Flexus X 实例,这款云服务是华为云推出的有一款明星产品,面向零售、金融、游戏等行业大多数通用工作负载场景。这次,我们就来测评一下它的性能到底怎么样! Flexus 云服务 X 实例 在测评之前,我们…

星河产业应用创新奖,AI产业实干者的闪耀时刻

华晨宝马汽车有限公司搭建企业级 Agent 服务平台,推理成本降低50%(获2023年星河产业应用创新奖) 泰康保险集团股份有限公司实现保险理赔场景数字化升级,理赔作业效率提升27%(获2022年飞桨产业应用创新奖) …

【重学 MySQL】七、MySQL的登录

【重学 MySQL】七、MySQL的登录 MySQL 服务的启动与停止启动MySQL服务停止MySQL服务 MySQL 自带客户端的登录与退出登录登录步骤 退出注意事项 MySQL 服务的启动与停止 MySQL服务的启动与停止是数据库管理中的基本操作。 启动MySQL服务 通过“服务”窗口启动: 点击…

工作加速器:五种思维导图策略优化你的日常

思维导图是一种非常有效的图形工具,它能够清晰地展示发散性思维,并帮助我们将大量信息有序地组织起来。这种工具在日常生活和工作中都非常实用,因其简洁高效的特点,受到了广泛的欢迎。无论是在头脑风暴、项目规划,还是…

【AI-本地部署大模型】Centos虚拟机部署MaxKB、Ollama【基于大语言模型的知识库问答系统】

Ollama特点Centos部署docker部署脚本安装 通义千问包下载 MaxKB部署docker部署控制台 配置模型设置 Ollama Ollama 是一个开源项目,旨在让用户能够在本地计算机上轻松运行大型语言模型(LLM)。通过 Ollama,用户可以部署和运行多种…

显微镜基础知识--脑机起步

一、显微镜类别 学生级、实验级、研究级生物显微镜单目型、双目型、三目型生物显微镜 二、显微镜基础原理 (1)光学显微镜 光学显微镜主要由目镜、物镜、载物台和反光镜(集光镜)组成。目镜和物镜都是凸透镜,焦距不同。物镜的凸透镜焦距小于…

【算法每日一练及解题思路】计算以空格隔开的字符串的最后一个单词的长度

【算法每日一练及解题思路】计算以空格隔开的字符串的最后一个单词的长度 一、题目:计算以空格隔开的字符串的最后一个单词的长度 二、举例: 输入:hello nowcoder 输出:8 说明:最后一个单词为nowcoder,长…

PDF如何转化成Word文档?看完学会转换

PDF如何转化成Word文档?在数字化办公和学习的日常中,PDF文档因其出色的稳定性和跨平台兼容性而广受欢迎。然而,当我们需要编辑或修改PDF中的内容时,往往会遇到一些障碍,因为PDF格式本身并不支持直接编辑。这时&#xf…

c++类与对象的static成员

一.概念 用static修饰的成员变量称为类的静态成员变量,static修饰的成员函数称为类的静态成员函数。 如何声明和定义static成员 声明: 在定义类时进行声明 定义(类外定义): static成员的定义/初始化必须在类外&am…

【C++ 面试 - STL】每日 3 题(七)

✍个人博客:Pandaconda-CSDN博客 📣专栏地址:http://t.csdnimg.cn/fYaBd 📚专栏简介:在这个专栏中,我将会分享 C 面试中常见的面试题给大家~ ❤️如果有收获的话,欢迎点赞👍收藏&…

3.js - Water2不显示水波纹

文中需要的资源,在我的资源那里能下载 【3.js 有2个水的生成方式:Water、Water2】 注意: 这个问题,是基于 Water2的 如下方式,不显示波纹 import * as THREE from three import { OrbitControls } from three/exam…

人工智能相关学科的关系

禹晶、肖创柏、廖庆敏《数字图像处理》资源二维码

C++——类与对象(一)

目录 引言 面向过程与面向对象 1.面向过程 2.面向对象 类 1.类的定义 2.类的访问限定符 3.类域 4.类域与其他作用域 对象 1.类对象的实例化 2.对象的大小 2.1 如何计算对象的大小 2.2 内存对齐规则 2.3 示例 3.this指针 3.1 this指针的引入 3.2 this指针的详…

Nacos Config的配置中心

1.创建一个新的文件 2.导入依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven…

review——Linux:进程地址空间

目录 前言 一、页表 1.回顾一下fork接口 2..先看一个有意思的现象 3.地址映射与页表 二、进程地址空间 1.进程地址空间是什么 2.进程地址空间与页表起到了什么作用 3.进程地址空间有什么作用 4.缺页中断与写时拷贝 5.写时拷贝的相关问题 6.关于内存空间申请的讨 前言 不知道大…

SpringCloud-02 Consul服务注册与发现

Consul是一种用于服务发现、配置和分布式协调的开源工具。Consul提供了以下主要功能&#xff1a; 1.服务发现&#xff1a;Consul允许开发人员在微服务架构中注册和发现服务。它可以自动检测新添加的服务并为它们分配唯一的网络地址。 2.健康检查&#xff1a;Consul可以定期检查…

Linux学习-虚拟化平台安装和使用

注&#xff1a;系统使用Rock8.6 下载链接 通过百度网盘分享的文件&#xff1a;cirros.qcow2&#xff0c;node_base.xml等2个文件 链接&#xff1a;https://pan.baidu.com/s/1hupGQsMjrXMgngCy3lQLhw?pwdhlr6 提取码&#xff1a;hlr6[rootharbor ~]# cat /etc/redhat-releas…