当前位置: 首页 > news >正文

Nginx介绍和部署

一.nginx是什么

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

二,nginx核心和应用场景

🛠️ 常见应用场景

  1. 静态内容托管:直接托管公司的官网、产品介绍页等主要由 HTML、图片构成的网站。

  2. API 网关:作为所有后端微服务的统一入口,处理认证、限流、日志等通用功能,再将请求转发给具体的微服务。

  3. 负载均衡:在电商、社交等大型应用背后,将用户请求分发到成百上千台应用服务器上。

  4. SSL 终端:由 Nginx 来统一处理 HTTPS 的加密/解密工作,减轻后端服务器的压力。

  5. 缓存:可以缓存后端应用的响应结果,当同样的请求再来时,直接返回,无需再访问后端,极大提升速度。

三.nginx架构

        1.核心架构思想:事件驱动与异步非阻塞

                Nginx 摒弃了传统的多进程/多线程同步阻塞模型(一个连接一个进程),采用了更先进的事件驱动异步非阻塞模型

2.Nginx 架构详解

1. 主进程 (Master Process) - “管理者”

主进程以 root 权限运行,主要负责管理而不是处理网络请求。

  • 职责

    • 读取并验证配置。

    • 创建、绑定和关闭套接字。

    • 启动、终止和维护指定数量的工作进程。

    • 平滑重载配置 (nginx -s reload)。

    • 平滑升级,无需停止服务。

    • 重新打开日志文件。

简单说:Master 进程是老板,不直接干活,只负责管理和监督工人。

2. 工作进程 (Worker Processes) - “劳动者”

这些是真正处理网络请求的进程,以 非特权用户(如 nginxwww-data)运行,提升安全性。

  • 特点

    • 数量在配置文件中指定 (worker_processes auto;),通常设置为与 CPU 核心数相等。

    • 每个 Worker 进程都是独立且平等的。

    • 它们使用 异步非阻塞 的方式来处理成千上万的并发连接。

简单说:Worker 进程是工人,每个工人都能独立高效地完成大量任务。

3. 事件驱动模型 (Event-Driven Model) - “工作心法”

这是 Nginx 高性能的灵魂。每个 Worker 进程都运行着一个高效的事件循环 (Event Loop)

3.工作流程

  1. 事件循环会检查所有的连接(比如新的连接请求、某个连接的数据可读了、某个连接可以写数据了)。

  2. 当某个连接上有事件发生时,Worker 就立即去处理它。

  3. 处理可能是瞬间完成的(比如从内存中读取数据),如果需要等待(比如从硬盘读取文件、访问数据库),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添加

效果

http://www.dtcms.com/a/596927.html

相关文章:

  • ffmpeg-本周任务-01
  • 防邪办网站建设方案文档许昌网站建设哪家最好
  • 铜仁网站建设哪家专业网站建设中模板代码
  • 关于ankh库加载本地模型的改进用于解决服务器无法连接外网的问题
  • 基于springboot的旅游攻略网站设计与实现
  • Haldane先验:极端无知假设下的贝叶斯推断
  • 15.【NXP 号令者RT1052】开发——实战-XBAR
  • 中小型网站建设与管理总结小超人成都网站建设
  • MATLAB | 如何使用MATLAB一键生成拼豆图纸
  • 如何设计一个高扩展的加密狗集成策略
  • zoho crm 如何设置富文本字段为必填
  • ✨WPF编程进阶【7.1】动画基础
  • 整体设计 全面梳理复盘之31 Transformer 九宫格三层架构 Designer 全部功能定稿(初稿)之3
  • 建设网站需要多久做网站的资源有哪些
  • 手机网站怎么做推广郑州广告公司网站建设
  • 世界各地的软件包:探索 Arch Linux 中的软件包
  • 关于设计图的网站网站新闻百度收录
  • MySQL 迁移总结报告
  • 昆明网站建设公司猎狐科技怎么样南约社区网站建设
  • 跨服务器复制conda环境
  • 联想打印机驱动出现故障怎么办?最新的打印机驱动修复方法
  • 安装部署自己的nginx
  • 技术速递|GitHub Copilot 和 AI Agent 如何拯救传统系统
  • wordpress网站同步插件网络优化的工作流程
  • C语言动态内存管理:从基础到进阶的完整解析
  • Java中的静态代理与动态代理(Proxy.newProxyInstance)
  • 2528. 最大化城市的最小电量
  • 网站建设带服务器新浪舆情通官网
  • 16.udp_socket
  • OpenAI 新推 GPT-5-Codex-Mini:一款针对开发者的轻量级编码助手