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 反向代理
-
正向代理 替客户端访问外网,隐藏真实用户。 用途:翻墙、内网上网、缓存加速。 用户→代理服务器→目标网站
-
反向代理 替服务器接收请求,隐藏真实后端服务。 用途:负载均衡、动静分离、防护、域名统一入口。 用户→代理服务器→后端真实服务

核心区别
- 正向:代理用户,服务器不知道谁访问
- 反向:代理服务,用户不知道真实服务器
- 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 文件作用
-
本地域名解析优先级最高 系统先查 hosts,再访问 DNS 服务器。
-
手动绑定 IP 与域名 自定义域名指向指定 IP,可强制跳转网站。
-
屏蔽网站 把域名指向无效 IP,实现网址拦截。
-
本地测试网站 开发时绑定测试域名,不用改 DNS 即可访问本地项目。
-
加快访问速度 常用域名本地缓存解析,省去 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 模块,开箱即用):
- 下载地址:https://github.com/illuspas/nginx-rtmp-win32/releases
- 下载最新版(如
nginx-rtmp-win32-1.21.6.zip) - 解压到非中文、无空格路径,例如:
目录结构(关键):
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)
- 点击「开始推流」
-
ffmpeg 推流将视频文件推流至 rtmp 服务器
ffmpeg -re -i video.mp4 -f flv rtmp://127.0.0.1:1935/stream/123
-
使用 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 → 可看到当前推流 / 连接数