最近在本地开发时遇到了一个常见需求:需要让局域网内的其他设备访问我的开发服务器,同时还要处理多个后端接口的转发问题。虽然市面上有很多现成的解决方案,但Nginx凭借其轻量级和高性能的特点,依然是我的首选。今天就来分享一下在Windows环境下配置Nginx的完整过程。
为什么选择Nginx?
说实话,刚开始我也想过用其他方案,但最终还是选择了Nginx,原因很简单:
- 轻量级:Windows版本的Nginx解压即用,不需要复杂的安装过程
- 配置灵活:无论是路径转发还是域名转发,都能轻松搞定
- 性能稳定:即使在高并发场景下也能保持稳定运行
- 学习成本低:配置文件结构清晰,文档丰富
第一步:下载和安装
安装过程其实很简单,但有几个细节需要注意。
首先,从Nginx官网下载Windows版本的压缩包。建议选择稳定版(stable version),这样能避免一些潜在的bug。
下载完成后,解压到任意目录。我个人习惯放在 C:\nginx,这样路径短,方便后续操作。
启动Nginx有两种方式:
- 方式一:直接双击
nginx.exe,这种方式最简单,但缺点是看不到启动日志 - 方式二:打开命令行,进入Nginx目录,执行
start nginx,推荐这种方式
启动后,在浏览器访问 http://localhost,如果看到Nginx欢迎页面,恭喜你,第一步成功了!
第二步:让局域网设备也能访问
默认情况下,Nginx只监听本地回环地址(127.0.0.1),这意味着只有本机能访问。要让局域网内的其他设备访问,需要修改配置。
打开 conf/nginx.conf 文件,找到 server 块,修改 listen 指令:
server { listen 80; # 监听所有网络接口的80端口 # 或者更明确地写成:listen 0.0.0.0:80; server_name localhost; # ... 其他配置 ...}修改完成后,执行 nginx -s reload 重启Nginx让配置生效。
这时候,局域网内的其他设备应该可以通过你的电脑IP访问了。比如你的局域网IP是 192.168.1.100,那么访问 http://192.168.1.100 就能看到Nginx欢迎页面。
第三步:配置接口转发
这部分是整个配置的核心,也是最容易出错的地方。我根据自己的使用场景,总结了几种常见的转发方式。
场景一:根据路径转发到不同服务
这是最常见的使用场景,比如前端请求 /api/ 转到后端API服务,请求 /admin/ 转到管理后台服务。
location ^~ /api/ { proxy_pass http://127.0.0.1:8080/; # 转发到本地8080端口}
location ^~ /admin/ { proxy_pass http://127.0.0.1:3000/; # 转发到本地3000端口}这里有个细节需要注意:proxy_pass 后面的地址如果以 / 结尾,Nginx会把匹配到的 /api/ 部分替换掉。比如请求 /api/users 会被转发到 http://127.0.0.1:8080/users,而不是 http://127.0.0.1:8080/api/users。
场景二:根据域名转发到不同服务
如果你有多个域名,可以配置多个 server 块:
# 第一个站点server { listen 80; server_name site1.local; location / { proxy_pass http://127.0.0.1:8001; }}
# 第二个站点server { listen 80; server_name site2.local; location / { proxy_pass http://127.0.0.1:8002; }}这种方式需要在本地hosts文件中添加域名解析,或者配置DNS服务器。
场景三:使用upstream模块(推荐用于复杂场景)
如果你的后端服务有多个实例,或者需要更灵活的管理,可以使用 upstream 模块:
upstream backend_server { server 127.0.0.1:8080; # 如果有多个实例,可以继续添加 # server 127.0.0.1:8081; # server 127.0.0.1:8082;}
server { listen 80; server_name localhost; location / { proxy_pass http://backend_server/; }}这种方式的好处是,如果后端服务地址发生变化,只需要修改 upstream 配置,不需要改动 location 部分。
第四步:配置防火墙规则
这是很多人容易忽略的一步。如果你的Windows防火墙是开启的,即使Nginx配置正确,局域网内的设备也无法访问。
有两种方式添加防火墙规则:
方式一:通过控制面板手动添加
- 打开”Windows Defender 防火墙”
- 点击”高级设置”
- 选择”入站规则” → “新建规则”
- 选择”端口” → “TCP” → 特定本地端口(输入80)
- 选择”允许连接”
- 根据需要选择应用场景(域、专用、公用)
- 给规则起个名字,比如”Allow Nginx HTTP”
方式二:通过PowerShell命令(推荐)
以管理员身份打开PowerShell,执行:
New-NetFirewallRule -DisplayName "Allow Nginx HTTP" -Direction Inbound -Protocol TCP -LocalPort 80 -Action Allow一行命令搞定,方便快捷。
第五步:测试和验证
配置完成后,需要测试一下是否真的生效了。
在局域网内的另一台设备上,打开浏览器,访问:
http://[你的WindowsIP地址]:80- 应该能看到Nginx欢迎页面http://[你的WindowsIP地址]/api/- 应该能访问到你的API服务
如果访问不了,不要慌,按照下面的步骤排查:
- 检查Nginx配置语法:执行
nginx -t,确保配置文件没有语法错误 - 查看Nginx日志:打开
logs/error.log和logs/access.log,看看有没有错误信息 - 检查防火墙:确认防火墙规则已经生效
- 检查网络连接:确保局域网内的设备能够互相ping通
一些实用技巧
传递真实IP信息
默认情况下,后端服务接收到的客户端IP是Nginx的IP(127.0.0.1),而不是真实客户端IP。如果需要获取真实IP,可以在 location 块中添加:
proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;路径匹配优先级
Nginx的 location 匹配有优先级,从高到低依次是:
=精确匹配^~前缀匹配~和~*正则匹配- 前缀匹配
配置时要注意顺序,避免匹配错误。
代理地址末尾的斜杠
这是个坑,很多人在这里踩过。proxy_pass 后面的地址末尾加不加斜杠,行为完全不同:
- 有斜杠:
proxy_pass http://127.0.0.1:8080/;- 会替换掉匹配的路径 - 无斜杠:
proxy_pass http://127.0.0.1:8080;- 会保留原始路径
根据你的实际需求选择合适的方式。
总结
通过以上步骤,你应该能够在Windows上成功搭建一个Nginx局域网代理服务器了。整个配置过程虽然看起来步骤不少,但实际操作下来,熟练之后几分钟就能搞定。
Nginx的强大之处在于它的灵活性和可扩展性,今天介绍的只是基础配置。后续还可以根据需要添加HTTPS支持、负载均衡、缓存等功能。