Nginx介绍和部署
一.nginx是什么
Nginx 是一个高性能的 HTTP 和反向代理服务器,负责在互联网上接收请求、指挥流量,并把用户需要的内容(比如网页、图片、视频)快速、可靠地送达到他们的设备上。
二,nginx核心和应用场景

🛠️ 常见应用场景
-
静态内容托管:直接托管公司的官网、产品介绍页等主要由 HTML、图片构成的网站。
-
API 网关:作为所有后端微服务的统一入口,处理认证、限流、日志等通用功能,再将请求转发给具体的微服务。
-
负载均衡:在电商、社交等大型应用背后,将用户请求分发到成百上千台应用服务器上。
-
SSL 终端:由 Nginx 来统一处理 HTTPS 的加密/解密工作,减轻后端服务器的压力。
-
缓存:可以缓存后端应用的响应结果,当同样的请求再来时,直接返回,无需再访问后端,极大提升速度。
三.nginx架构
1.核心架构思想:事件驱动与异步非阻塞
Nginx 摒弃了传统的多进程/多线程同步阻塞模型(一个连接一个进程),采用了更先进的事件驱动异步非阻塞模型。


2.Nginx 架构详解
1. 主进程 (Master Process) - “管理者”
主进程以 root 权限运行,主要负责管理而不是处理网络请求。
-
职责:
-
读取并验证配置。
-
创建、绑定和关闭套接字。
-
启动、终止和维护指定数量的工作进程。
-
平滑重载配置 (
nginx -s reload)。 -
平滑升级,无需停止服务。
-
重新打开日志文件。
-
简单说:Master 进程是老板,不直接干活,只负责管理和监督工人。
2. 工作进程 (Worker Processes) - “劳动者”
这些是真正处理网络请求的进程,以 非特权用户(如 nginx, www-data)运行,提升安全性。
-
特点:
-
数量在配置文件中指定 (
worker_processes auto;),通常设置为与 CPU 核心数相等。 -
每个 Worker 进程都是独立且平等的。
-
它们使用 异步非阻塞 的方式来处理成千上万的并发连接。
-
简单说:Worker 进程是工人,每个工人都能独立高效地完成大量任务。
3. 事件驱动模型 (Event-Driven Model) - “工作心法”
这是 Nginx 高性能的灵魂。每个 Worker 进程都运行着一个高效的事件循环 (Event Loop)。
3.工作流程
-
事件循环会检查所有的连接(比如新的连接请求、某个连接的数据可读了、某个连接可以写数据了)。
-
当某个连接上有事件发生时,Worker 就立即去处理它。
-
处理可能是瞬间完成的(比如从内存中读取数据),如果需要等待(比如从硬盘读取文件、访问数据库),Worker 不会阻塞等待,而是立即去处理其他连接的请求。
4.与传统模型的对比
-
Apache (传统模型):来一个请求,就分配一个进程。这个进程如果被阻塞(比如在等待数据库),即使它什么都不干,也会一直占用着 CPU 和内存资源。当并发数高时,服务器会因进程数过多而耗尽资源。
-
Nginx:一个 Worker 进程可以处理数万个连接。连接被阻塞时,Worker 不会傻等,而是去服务其他连接。因此,少量 Worker 进程就能应对海量并发
5.相关的配置(在 nginx.conf 中)
# 定义Worker进程数量,通常设为CPU核心数
worker_processes auto;# 每个Worker进程能处理的最大连接数
events {worker_connections 1024; # 这个值可以调得很大,比如 4096 或 8192# 使用高效的事件驱动模型(Linux下通常是epoll)use epoll;
}# 单个Worker进程能服务的最大并发数理论值 = worker_connections
# 但实际会受到系统限制(如文件描述符数量)
6. 总结
Nginx 的架构可以形象地理解为:
-
一个老板(Master Process):负责招人、管人、定规矩。
-
多个全能员工(Worker Processes):每个员工都精力充沛,并且掌握了 “一心多用” 的绝技(事件驱动异步非阻塞)。
-
工作方式:老板雇佣了 N 个员工(N = CPU 核心数)。每个员工面前有一个巨大的任务看板(事件循环),上面贴着上万个任务(连接)。员工不停地扫描看板,哪个任务有动静就立刻处理一下,绝不会在某个等待的任务上干耗时间。
四.正向代理与反向代理

正向代理:proxy(中间商)收集client(客户端)想要访问server(服务器)的信息,然后有proxy传递给server。

反向代理:proxy(中间商)收集server(服务器)的信息,然后上client访问server时,由proxy再传递给server。
五.nginx部署
systemctl stop firewalldsystemctl disable firewalldyum install nginx -ysystemctl start nginx 启动nginxsystemctl enable nginx 设置开机启动常用命令systemctl start nginx # 启动服务systemcctl restart nginx # 重启服务systemctl enable nginx # 开机启动systemctl stop nginx # 停止服务systemctl disable nginx # 取消开机启动systemctl status nginx # 查看状态nginx # 启动nginxnginx restart # 重启服务nginx -s reload # 重新加载配置文件nginx -s stop # 强行停止服务nginx -s quit # 优雅停止服务,即所有请求处理完后退出服务nginx -v # 查看版本号nginx -t # 检查配置文件的语法错误,无错返回ok配置文件
[root@server ~]# cd /etc/nginx # 服务目录
[root@server nginx]# yum install tree -y
[root@server nginx]# tree
.
├── conf.d # 子配置文件目录
├── default.d
├── fastcgi.conf
├── fastcgi.conf.default
├── fastcgi_params
├── fastcgi_params.default
├── koi-utf # KOI8-R 编码(俄语)转换的映射文件
├── koi-win # # KOI8-R 编码(俄语)转换的映射文件
├── mime.types # 配置支持的媒体类型
├── mime.types.default # 样例文件
├── nginx.conf # 主配置文件
├── nginx.conf.default # 样例文件
├── scgi_params
├── scgi_params.default
├── uwsgi_params
├── uwsgi_params.default
└── win-utf # KOI8-R 编码(俄语)转换的映射文件2 directories, 15 files网页默认目录:/usr/share/nginx/html
访问日志:/var/log/nginx/access.log
错误日志:/var/log/nginx/error.log
主配置文件(/etc/nginx/nginx.conf)
# main配置段(全局配置)
user nginx; # 运行的账户,默认即是nginx,可以不进行设置
worker_processes auto; # worker进程数,根据硬件调整,通常等于CPU数量或者2倍于CPU
error_log /var/log/nginx/error.log; # 错误日志存放目录
pid /run/nginx.pid; # 指定运行Nginx master主进程的pid文件存放路径# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf; # 导入的外部文件位置# events配置段,性能模块设置,其中可以设置时间处理模式等
events { use epoll; # 使用epoll事件驱动模型,但不推荐配置它,让nginx自己选择worker_connections 1024; # 每个进程的最大连接数量(并发数)accept_mutex on # 默认是off关闭的,这里推荐打开
}# http配置段,包含全局块和server块,使用最频繁的部分,代理、缓存、日志定义等绝大多数功能和第三方模块的配置都在这里设置
http { log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';# 以上定义日志格式access_log /var/log/nginx/access.log main; # 访问日志存储位置sendfile on; # 高效文件传输模式,默认开启tcp_nopush on; # 性能优化参数,数据是否立刻发送tcp_nodelay on; # 性能优化参数,小数据包是否延迟发送keepalive_timeout 65; # 超时时间types_hash_max_size 4096; # 性能优化参数,影响散列表的冲率include /etc/nginx/mime.types; # 可解析的静态资源类型default_type application/octet-stream; # 默认文件类型# Load modular configuration files from the /etc/nginx/conf.d directory.# See http://nginx.org/en/docs/ngx_core_module.html#include# for more information.include /etc/nginx/conf.d/*.conf; # 加载子配置项# server配置段,虚拟主机设置server { listen 80; # 监听IPV4端口listen [::]:80; # 监听IPV6端口server_name _; # 访问的域名root /usr/share/nginx/html; # 网页默认目录# Load configuration files for the default server block.include /etc/nginx/default.d/*.conf; # 子配置文件存储路径# location配置段,一般用来匹配不同的URI请求location / {root /usr/share/nginx/html; # 相对路径网站根目录alias /usr/share/nginx/html/; # 绝对路径网站根目录index index.html index.htm; # 默认首页文件deny 172.168.22.11; # 禁止访问的ip地址,可以为allallow 172.168.33.44; # 允许访问的ip地址,可以为allautoindex on; # 开启目录文件列表autoindex_exact_size on; # 显示出文件的确切大小,单位是bytesautoindex_localtime on; # 显示的文件时间为文件的服务器时间charset utf-8,gbk; # 避免中文乱码auth_basic "xxxx"; # 加密网页验证时的提示信息auth_basic_user_file /路径/文件名; # 加密网页使用的密码验证文件}error_page 404 /404.html; # 404时返回给客户端的页面location = /40x.html {}error_page 500 502 503 504 /50x.html; # 50x错误返回给客户端的页面location = /50x.html {}}# Settings for a TLS enabled server. # https虚拟主机定义
#
# server {
# listen 443 ssl http2; # 监听的IPV4端口
# listen [::]:443 ssl http2;
# server_name _;
# root /usr/share/nginx/html; # 网页默认目录
#
# ssl_certificate "/etc/pki/nginx/server.crt"; # 证书存储路径
# ssl_certificate_key "/etc/pki/nginx/private/server.key"; # 密钥存储
# ssl_session_cache shared:SSL:1m;
# ssl_session_timeout 10m;
# ssl_ciphers PROFILE=SYSTEM;
# ssl_prefer_server_ciphers on;
#
# # Load configuration files for the default server block.
# include /etc/nginx/default.d/*.conf;
#
# error_page 404 /404.html;
# location = /40x.html {
# }
#
# error_page 500 502 503 504 /50x.html;
# location = /50x.html {
# }
# }}
实验1
进入/etc/nginx/nginx,conf更改root

编辑/vat/log

效果

实验2基于IP,端口号,域名的虚拟主机
1.添加虚拟网卡

1.创建网页目录地址并写入相关内容

2.进入主配置/etc/nginx/nginx.conf添加(或者子配置文件也可以)
IP

端口号

域名

3.效果
IP

端口号

域名

实验3https模型
1.创建储存网站数据的目录文件/www/zy/和创建证书

在子配置文件/etc/nginx/conf.d/https.conf添加

效果

