目录

Nginx基础安装配置文件

Nginx(基础安装+配置文件)


一.Nginx基础

1.基础知识点

Nginx 是一个 轻量级、高性能的Web服务应用,可以作为 HTTP 服务器虚拟主机反向代理服务器负载均衡器 ,以及支持 TCP/UDP 的 通用代理服务器

特点:稳定性高、不容易宕机;开源免费;内存/cpu资源消耗较少;并发能力高,至少能同时处理2-3万并发,最多能支持5万并发

2.异步非阻塞机制

Nginx 的异步非阻塞机制通过 事件驱动模型I/O 多路复用技术 实现,使得单个 Worker 进程能够高效处理成千上万的并发连接。

  1. Worker进程初始化,监听指定的端口(如80或443)。

  2. 当有新的连接请求到达时,Worker进程接受该连接,并将其注册到事件循环中。

  3. 事件循环使用I/O多路复用机制(epoll)来监视所有注册的文件描述符(即连接)。

  4. 当某个连接上有可读或可写事件发生时,事件循环会触发相应的回调函数来处理该事件。

  5. 在处理事件时,如果需要进行I/O操作(如读取请求数据或发送响应数据),这些操作会被异步执行,不会阻塞进程。

  6. 处理完一个事件后,事件循环继续检查其他事件,循环往复。


  • 异步非阻塞 I/O

    当发起 I/O 操作(如读取网络数据、写入文件)时,进程不等待操作完成,而是继续处理其他任务;操作完成后,通过事件通知机制(如回调函数)处理结果。

  • 事件驱动模型

    Worker 进程通过事件循环(Event Loop)监听所有连接的事件(如可读、可写),仅处理已就绪的事件,避免空等。

  • I/O 多路复用

    使用操作系统提供的机制(如 epollkqueue )同时监控多个文件描述符(即连接),当任意一个描述符就绪时立即通知进程。

二.Nginx安装

2.1安装nginx3种方式

1.包管理工具安装(yum/apt)

  • 原理: 通过系统的包管理工具自动从 官方仓库下载 并安装 预编译 的包
  • 特点自动解决依赖 、 自动生成service文件
  • 命令: centos: yum   install  nginx  -y ubuntu: apt install nginx -y

2.本地包安装(rpm/dpkg)

  • 原理 :手动下载 .rpm (Red Hat系)或 .deb (Debian系)包,都属于 预编译的二进制包

  • 特点: 手动解决依赖 、 包含service文件

  • 命令:centos:

    rpm -i nginx.rpm

    ubuntu: dpkg -i nginx.deb 安装。

3.源码编译安装

  • 原理 :从Nginx官网下载源代码, 手动编译 并安装。

  • 特点

    • 完全自定义可启用/禁用模块 (如 --with-http_ssl_module )、 指定安装路径 (如 --prefix=/opt/nginx )。
    • 性能优化自行 调整编译参数 (如 -march=native )。
    • 手动处理依赖 :需提前 安装开发工具 (如gcc)及 依赖库 (如PCRE、OpenSSL)。
    • 无自动管理 :更新需重新编译,服务脚本需 手写service文件
    • 独立目录结构 :默认安装到 /usr/local/nginx ,与系统包隔离。 https://i-blog.csdnimg.cn/direct/70e4539d9b9b4d5aa4cf86d03f883fa6.png
3.1 源码编译安装nginx流程(ubuntu)
1. 更新 apt源 、下载 lrzsz工具

apt update

apt install -y lrzsz      用于本地主机和服务器相互传输文件 https://i-blog.csdnimg.cn/direct/e292cbe7d032415e8854f086882a482f.png

2.安装依赖包

ubuntu: apt -y install libpcre3-dev zlib1g-dev libssl-dev build-essential

centos: yum -y install gcc pcre-devel openssl-devel zlib-devel openssl  openssl-devel https://i-blog.csdnimg.cn/direct/29f1bf79628f4e3eb61362e64866c79b.png

3.创建运行用户

Nginx 服务程序默认以 nobody 身份运行:useradd  -M -s /sbin/nologin nginx

4.编译安装nginx
./configure --prefix=/usr/local/nginx \  #指定了Nginx的安装目录。在这种情况下,它将安装在 
                                          /usr/local/nginx 目录下。
--user=nginx --group=nginx \          #指定了运行Nginx进程的用户和组。在这种情况下,它将是用户 
                                      和组 nginx。
--with-http_gzip_static_module \       #启用了支持使用 .gz 扩展名提供预压缩文件的功能。
--with-http_flv_module \
--with-http_ssl_module \                #启用了对HTTP连接的SSL/TLS加密支持。
--with-http_realip_module \
--with-http_v2_module \                 #启用了对HTTP2.0协议的支持
--with-http_sub_module \               
--with-http_mp4_module \              
--with-http_stub_status_module \        #启用了 stub_status 模块,提供了访问Nginx状态信息的方 
                                       法。
--with-pcre \                          #启用了对Perl Compatible Regular Expressions(PCRE) 
                                       库的支持。
--with-stream \                        #启用了对TCP/UDP代理模块的支持。
--with-stream_ssl_module \             #启用了对TCP/UDP连接的SSL/TLS加密支持。
--with-stream_realip_module            #允许Nginx从PROXY协议头部获取客户端的真实IP地址。

make -j  2(cpu数量决定) https://i-blog.csdnimg.cn/direct/c10de311f8684d94830e6ecd5ab35adb.png

make -install (安装) https://i-blog.csdnimg.cn/direct/9c7640f82e5343a78bc997d80a341e8d.png

注意:

1.让系统识别nginx操作命令,将nginx的可执行文件做上软链接 https://i-blog.csdnimg.cn/direct/2f9398e7dd134eb0809402ce0d540747.png

2.更改nginx文件夹下的属主属组

chown -R nginx.nginx /usr/local/nginx

https://i-blog.csdnimg.cn/direct/06e9072438994c41a7d351de96712e07.png

5.检查、启动、重启、停止 nginx服务

1.检查nginx配置文件: /usr/local/nginx/conf/nginx_conf

nginx  -t 检查配置文件是否有语法错误

https://i-blog.csdnimg.cn/direct/af578a73737249b885f5aedda0307bb1.png

2.启动nginx服务 https://i-blog.csdnimg.cn/direct/ec9a765d80f941fa94e310db1f71e5c9.png

3.停止nginx服务

https://i-blog.csdnimg.cn/direct/1809c8b815254200b8e5efefdbe0fe86.png https://i-blog.csdnimg.cn/direct/4aa15512d26e4943a3c41fa541af652c.png

4.重载nginx服务 https://i-blog.csdnimg.cn/direct/ac8ba526a9f245c29adad49148a0377d.png

5.日志分割,重新打开日志文件

nginx 存放日志文件的位置: /usr/local/nginx/logs https://i-blog.csdnimg.cn/direct/f902eeff3cb445b1b7c4c8286cbf57bc.png https://i-blog.csdnimg.cn/direct/c4561c408aba40f189c3cb82fb409747.png

生成存放成功日志、错误日志的空文件:kill  -USR1   $(cat  /usr/local/nginx/logs/nginx.pid) https://i-blog.csdnimg.cn/direct/51f59f9532474e588e86963a7c2680ca.png

6.nginx如何前台启动
3.2nginx版本平滑升级

kill -USR2   <PID号>

注意:升级完成后要使用绝对路径启动服务,否则升级可能会报错

3.3添加 Nginx 系统服务管理

因为编译安装没有service文件,如果想要系统服务统一管理systemed,需要编写service文件。 https://i-blog.csdnimg.cn/direct/635af7c9c8d84510b586410cfcd6b192.png

service 文件

[Unit]
Description=nginx
After=network.target

[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target

https://i-blog.csdnimg.cn/direct/457bfd863e5f485f833946e6605778b3.png https://i-blog.csdnimg.cn/direct/020623a44c9c4fa0998f91509364d9cd.png

三.nginx进程

master 进程 :1.管理worker子进程   2.加载配置文件

worker 进程:    1.处理客户端发送的请求 https://i-blog.csdnimg.cn/direct/ab0fd623778244fa9739a28918b2b58f.png https://i-blog.csdnimg.cn/direct/bf8ff7cbc48c477d8e605095fa714426.png

以处理 HTTP 请求为例:

  1. 接收连接 :Worker 进程通过 epoll 监听端口,接收客户端连接。
  2. 读取请求 :若数据未到达(非阻塞),Worker 继续处理其他连接;若数据到达,读取并解析请求。
  3. 处理请求 :若需读取静态文件,发起非阻塞文件 I/O 操作;若需代理到后端,发起非阻塞网络连接。
  4. 响应客户端 :待所有操作完成后,通过事件回调将结果返回客户端。

1. 核心优势

  • 低资源消耗 :单线程可处理数万并发连接,避免多线程的内存开销和上下文切换。
  • 高吞吐量 :通过事件分发机制,最大化 CPU 和 I/O 利用率。

四.nginx配置

nginx配置文件的路径: /usr/local/nginx/conf/nginx_conf https://i-blog.csdnimg.cn/direct/de0bd11781934a62b8240ba0296b79f5.png

**1、全局块:全局配置,对全局生效;

2、events块:配置影响 Nginx 服务器与用户的网络连接;

3、http块:配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置;

4、server块:配置虚拟主机的相关参数,一个 http 块中可以有多个 server 块;

5、location块:用于配置匹配的 urI   (域名后面的部分);

6、upstream:配置后端服务器具体地址,负载均衡配置不可或缺的部分。**


全局块:全局配置,对全局生效;

https://i-blog.csdnimg.cn/direct/bad31d13ce91497b802e84e306e12a34.png

events块:配置影响 Nginx 服务器与用户的网络连接;

https://i-blog.csdnimg.cn/direct/a890ed2158cc4fccb42c57060bc7515d.png

http块:配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置; https://i-blog.csdnimg.cn/direct/3c051e21c7ad4c73aee8463f8ecb25c8.png

注意:http模块中还可以第三方模块的配置

**server块:配置虚拟主机的相关参数,一个 http 块中可以有多个 server 块;

location块:用于配置匹配的 urI   (域名后面的部分);**

https://i-blog.csdnimg.cn/direct/9a1839068c104015adb9f1a6d3696d0b.png

upstream:配置后端服务器具体地址,负载均衡配置不可或缺的部分。