Nginx 基础

1.Nginx 作为静态资源服务器

Nginx(发音 "engine x")是俄罗斯开发者 Igor Sysoev 于 2004 年发布的开源高性能 Web 服务器 ,也可作反向代理、负载均衡器、缓存与邮件代理。它采用事件驱动、异步非阻塞架构,单机可支撑数万并发连接,内存与 CPU 占用极低,高效解决 C10K 问题。核心能力包括:高效服务静态资源、七层反向代理、多策略负载均衡、HTTP 缓存、SSL/TLS 终止、动静分离与热部署。凭借轻量、稳定、易扩展,Nginx 成为互联网主流入口与流量调度组件,广泛用于网站、API 网关与微服务架构。

1.下载

下载地址:下载地址

下载 windows 1.30.2 版本到本地,其他操作系统根据系统决定下载文件。

2.运行

双击 nginx.exe 即可启动web服务器,该服务器没有界面,可以在任务管理器中看到运行的进程。

打开浏览器输入 127.0.0.1 或 localhost 即可打开nginx欢迎页。

3.部署项目

将vue打包后的项目或者自己写的HTML放在 F:\nginx-1.30.2\html 目录下即可被浏览器访问到。

2.反向代理

正向代理 vs 反向代理

  1. 正向代理客户端访问外网,隐藏真实用户。 用途:翻墙、内网上网、缓存加速。 用户→代理服务器→目标网站

  2. 反向代理服务器接收请求,隐藏真实后端服务。 用途:负载均衡、动静分离、防护、域名统一入口。 用户→代理服务器→后端真实服务

核心区别

  • 正向:代理用户,服务器不知道谁访问
  • 反向:代理服务,用户不知道真实服务器
  • Nginx 主要做反向代理

配置 F:\nginx-1.30.2\conf\nginx.conf

网址 http://113.45.228.9:8080/redis/collection/get/question 可以得到 json数据,但是会跨域,如果后端不允许,该接口将不能调用。由于前端页面在 nginx 中,访问页面使用 http://127.0.0.1/ 访问网页,如果后端接口可以通过 http://127.0.0.1/redis/collection/get/question 访问,则可以不跨域访问该接口。

跨域:前后端在不同的协议、IP、和端口上从而引发的浏览器保护机制,浏览器请求了数据后直接丢弃,不给前端使用。除非修改后端代码,在响应头中加入:access-control-allow-credentials、access-control-allow-origin、的相关响应头才行。

在 nginx.conf 下的 http 模块下 server 里面将代理模块代码注释去掉,并修改如下:

复制代码
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#凡是以/redis/开头的请求,都代理到  http://113.45.228.9:8080
location ~ /redis/ {
    proxy_pass   http://113.45.228.9:8080;
}

请求浏览器的 http://127.0.0.1/redis/collection/get/question 路径即可看到代理后的结果。

扩展:Windows hosts 文件作用

  1. 本地域名解析优先级最高 系统先查 hosts,再访问 DNS 服务器。

  2. 手动绑定 IP 与域名 自定义域名指向指定 IP,可强制跳转网站。

  3. 屏蔽网站 把域名指向无效 IP,实现网址拦截。

  4. 本地测试网站 开发时绑定测试域名,不用改 DNS 即可访问本地项目。

  5. 加快访问速度 常用域名本地缓存解析,省去 DNS 查询耗时。

路径:C:\Windows\System32\drivers\etc\hosts

在文件最后加入一行映射

复制代码
127.0.0.1 abcd

即上面的访问路径可以变为: http://abcd/redis/collection/get/question

Nginx 最常用、最实用的命令

覆盖启动、停止、重启、重载、查看状态等场景,直接复制就能用。

1.启动 Nginx,windows 推荐直接双击,注意如果nginx没有配置到环境变量,需要在nginx.exe所在目录打开 cmd。

复制代码
F:\nginx-1.30.2>nginx

2.快速停止(直接关闭,不等待请求处理完成),相当于在任务管理器中直接结束进程。

复制代码
nginx -s stop

3.优雅停止(等待当前请求处理完再关闭,生产环境推荐)

复制代码
nginx -s quit

4.平滑重载配置(最常用!)

复制代码
nginx -s reload

这是线上环境修改配置的首选命令。

5.修改 nginx.conf 后,一定要先检查,避免配置错误导致服务崩溃:

复制代码
nginx -t

显示 nginx: configuration file /etc/nginx/nginx.conf test is successful 代表配置无误。

6.查看 Nginx 版本信息

复制代码
nginx -v   # 简洁版
nginx -V   # 详细版(包含编译参数、模块)

3.动静分离

一般的网站或在线系统分为两个部分,即前端和后端。前端一般请求后台获取json数据并渲染页面。故前端最终只包含 html、css、js、照片等,这些资源只需要浏览器请求时返回文件即可。被称为静态内容。IO 密集型。

后端需要连接数据库,进行复杂逻辑运算,一般使用 php、java、nodejs等。

小型项目前后端放在一起,如果遇到大型项目。可以将其分开。

复制代码
        # 静态资源访问 \nginx-1.30.2\html 目录
        location / {
            root   html;
            index  index.html index.htm;
        }
        # 以 /api/开头的所有请求代理到本地tomcat
        location ~ /api/ {
            proxy_pass   http://127.0.0.1:8080;
        }

在静态资源代码中所有请求路径全部以 /api/ 开头,该请求会被nginx代理到tomcat下。静态资源交给nginx,后端动态接口由tomcat管理。

4.负载均衡

Nginx 负载均衡的核心作用:把用户请求均匀分发到多台后端服务器,避免单台服务器压力过大,提高网站稳定性和访问速度。

最简单的负载均衡配置(默认轮询)这是最基础、最常用的模式,请求会轮流分给每台服务器。

复制代码
http {
    # 定义后端服务器集群(名字随便取,这里叫 backend_servers)
    upstream backend_servers {
        server 192.168.1.10:8080;  # 后端服务器1
        server 192.168.1.11:8080;  # 后端服务器2
        server 192.168.1.12:8080;  # 后端服务器3
    }

    server {
        listen 80;
        server_name localhost;

        location / {
            # 转发请求到上面定义的集群
            proxy_pass http://backend_servers;
            
            # 必加:传递真实客户端IP
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
    }
}

5 种负载均衡策略(生产常用)

1. 轮询(默认)

请求按顺序轮流分配,适合服务器配置相同的场景。

复制代码
upstream backend {
    server 192.168.1.10;
    server 192.168.1.11;
}

2. 加权轮询(最常用!)

给性能好的服务器多分请求,权重越大,分到的请求越多。

复制代码
upstream backend {
    server 192.168.1.10 weight=5;  # 性能好,权重5
    server 192.168.1.11 weight=1;  # 性能一般,权重1
}

3. IP 哈希(ip_hash)

同一个客户端 IP 永远访问同一台服务器,解决登录会话失效问题。

复制代码
upstream backend {
    ip_hash;  # 关键配置
    server 192.168.1.10;
    server 192.168.1.11;
}

4. 最少连接(least_conn)

请求发给当前连接数最少的服务器,适合请求处理时间长短不一的场景。

复制代码
upstream backend {
    least_conn;
    server 192.168.1.10;
    server 192.168.1.11;
}

5. 最短响应时间(fair)

需要安装第三方模块,请求发给响应最快的服务器。


三、后端服务器状态配置(高可用必备)

控制某台服务器是否参与负载、是否备用:

复制代码
upstream backend {
    server 192.168.1.10 weight=5;
    server 192.168.1.11 down;        # 标记下线,不分配请求
    server 192.168.1.12 backup;      # 备用机,其他挂了才启用
    server 192.168.1.13 max_fails=3 fail_timeout=30s;  # 失败3次,暂停30秒
}
  • down:服务器下线维护
  • backup:备用服务器
  • max_fails:最大失败次数
  • fail_timeout:失败后暂停时间

5.直播服务器

在 Windows 上用 Nginx+RTMP 搭建直播服务器,最省事的是用已集成 RTMP 模块的预编译包,不用自己编译,直接配置、启动、推流、拉流即可。下面是完整、可直接照着做的步骤。

1. 下载预编译的 Nginx+RTMP(Windows)

推荐用 illuspas/nginx-rtmp-win32(已集成 RTMP 模块,开箱即用):

目录结构(关键):

复制代码
D:\nginx-rtmp
├── conf/          # 配置文件
│   └── nginx.conf # 核心配置
├── logs/          # 日志
└── nginx.exe      # 主程序

2. 配置 nginx.conf(核心)

打开 D:\nginx-rtmp\conf\nginx.conf,使用默认配置:

复制代码
worker_processes  1;

error_log  logs/error.log debug;

events {
    worker_connections  1024;
}
# RTMP 直播服务(核心)
rtmp {
    server {
        listen 1935;	# RTMP 默认端口
        # 直播应用:live(可自定义)
        application live {
            live on;	# 开启直播
        }
        # 可选:HLS 转码(网页/手机播放)	
        application hls {
            live on;
            hls on;  
            hls_path temp/hls;  	# 切片存放目录
            hls_fragment 8s;  	# 每个切片5秒
        }
    }
}
# HTTP 服务(用于状态查看、HLS 播放)
http {
    server {
        listen      8080;
		
        location / {
            root html;
        }
        # 1. RTMP 状态页(访问 http://localhost/stat)	
        location /stat {
            rtmp_stat all;
            rtmp_stat_stylesheet stat.xsl;
        }

        location /stat.xsl {
            root html;
        }
        # 2. HLS 播放地址(http://localhost/hls/xxx.m3u8)	
        location /hls {  
            #server hls fragments  
            types{  
                application/vnd.apple.mpegurl m3u8;  
                video/mp2t ts;  
            }  
            alias temp/hls;  
            expires -1;  
        }  
    }
}

关键说明

RTMP 端口:1935(防火墙需放行)

直播应用名:live(推流 / 拉流地址会用到)

HLS:自动生成 .m3u8 切片,支持网页 / 手机播放

3. 启动 Nginx

进入 D:\nginx-rtmp,双击 nginx.exe → 窗口一闪即后台运行。

4.测试:推流 + 拉流(验证直播)

1. 推流(用 OBS Studio)

  • 下载 OBS:https://obsproject.com/
  • 打开 OBS → 设置 → 推流:
    • 服务:自定义
    • 服务器:rtmp://localhost:1935/live
    • 串流密钥:test(可自定义,如 mystream)
  • 点击「开始推流」
  1. ffmpeg 推流将视频文件推流至 rtmp 服务器

    ffmpeg -re -i video.mp4 -f flv rtmp://127.0.0.1:1935/stream/123

  2. 使用 ffplay 播放 rtmp流

    ffplay rtmp://127.0.0.1:1935/stream/123

使用 ffmpeg 完成摄像头推流

ffmpeg 查看电脑设备 输入下面的语句即可列出电脑的设备

复制代码
ffmpeg -list_devices true -f dshow -i dummy

如:

复制代码
[dshow @ 0000023d33efe940] "Rapoo camera" (video)
[dshow @ 0000023d33efe940]   Alternative name "@device_pnp_\\?\usb#vid_0c45&pid_6367&mi_00#6&2bd3af6b&0&0000#{65e8773d-8f56-11d0-a3b9-00a0c9223196}\global"
[dshow @ 0000023d33efe940] "麦克风 (Rapoo camera)" (audio)
[dshow @ 0000023d33efe940]   Alternative name "@device_cm_{33D9A762-90C8-11D0-BD43-00A0C911CE86}\wave_{8D28FC3A-737E-4D57-B476-3B28EAFA8660}"
[dshow @ 0000023d33efe940] "麦克风 (Thanks your choice INVONS!)" (audio)
[dshow @ 0000023d33efe940]   Alternative name "@device_cm_{33D9A762-90C8-11D0-BD43-00A0C911CE86}\wave_{2FA9ECFF-9B26-424C-ADB8-44EF8CE2FEE9}"

测试摄像头是否可用

复制代码
ffplay -f dshow -i video="Rapoo camera"

或者

ffplay -f vfwcap -i 0

摄像头&麦克风推流

复制代码
ffmpeg -f dshow -i video="Rapoo camera":audio="麦克风 (Rapoo camera)" -vcodec libx264 -r 25 -preset:v ultrafast -tune:v zerolatency -f flv rtmp://124.70.51.123:1935/stream/123

2. 拉流播放(3 种方式)

方式 1:VLC 播放器(RTMP)
  • 打开 VLC → 媒体 → 打开网络串流
  • 地址:rtmp://localhost:1935/live/test
  • 播放
方式 2:VLC 播放 HLS(网页 / 手机)

地址:http://localhost/hls/test.m3u8

方式 3:浏览器看状态

访问:http://localhost/stat → 可看到当前推流 / 连接数

相关推荐
SAP女战士7 小时前
【SAP FICO&MM】物料与总账科目之间的关系
运维·sap fico
福大大架构师每日一题7 小时前
nginx 1.31.1 发布:一次安全修复驱动的主线升级,涉及 Rewrite、HTTP/2、Mail、MP4 与工作流修正
nginx·安全·http
齐齐大魔王7 小时前
Linux-网络抓包
linux·运维·网络
sulikey7 小时前
如何在Ubuntu中判断是否已安装ncurses库
linux·运维·ubuntu·ncurses
Shawn Dev7 小时前
使用 Certbot 为 Nginx 自动申请 HTTPS 证书并配置自动续签
运维·nginx·https
Yana.nice7 小时前
负载均衡之——会话保持
运维·负载均衡
风途科技~7 小时前
全天候实时管控,在线水质监测仪守护水环境安全
大数据·运维·安全
hughnz8 小时前
AI驱动自动化和智能体AI-加速钻头创新
运维·人工智能·自动化
侃谈科技圈8 小时前
四大桌面云品牌评测:从安全、体验到性价比
运维·服务器·安全