很多朋友在家里NAS、公司内网或者本地电脑上跑了个服务(比如Node项目、Python接口、或者某个管理后台),想在外面也能访问,结果发现没有公网IP,或者路由器端口转发搞半天搞不定。其实用宝塔面板的Nginx反向代理,几分钟就能把这个事儿摆平。
今天这篇帖子,手把手带你从零配通,不涉及复杂命令,全在面板点点点,顺便把新手最容易踩的缓存坑提前填上。
第一步:先把“内网服务”跑起来
反向代理的前提是,你内网那台机器上确实有个能跑的东西。假设你在本机或局域网另一台电脑上跑了一个服务,地址是 `http://127.0.0.1:3000`(或者 `http://192.168.1.100:8080`)。只要你在内网浏览器里访问这个地址能看到内容,就说明源站是通的。
这里有个新手容易忽略的点:如果你的源站是个网站程序(比如WordPress、Typecho),源站绑定的域名要和你打算对外用的域名保持一致,不然反代过去之后图片、CSS全挂。如果是纯API或者Node服务,这步可以忽略。
第二步:在宝塔上建一个“壳”站点
登录宝塔面板,点左侧“网站” -> “添加站点”。域名填你准备对外访问的那个域名(记得提前把域名解析到这台宝塔服务器的公网IP)。PHP版本选“纯静态”就行,因为我们只是拿Nginx做个转发,不跑PHP。
建好之后,先别急着配反代,确认一下这个域名直接访问能不能看到宝塔的默认页。能,说明域名解析和Nginx监听都正常,再往下走。
第三步:核心操作——添加反向代理
点进刚建好的站点,找到“反向代理” -> “添加反向代理”。
代理名称随便填,比如 `my-api`。
目标URL这里填你内网服务的真实地址,协议头一定要带上:`http://127.0.0.1:3000` 或者 `http://192.168.1.100:8080`。
发送域名:默认是 `$host`,一般不用改。但如果你代理的是某个有严格域名校验的服务(比如某些API网关),这里可能要填目标服务期望的域名。大多数内网服务保持默认即可。
点保存。见证奇迹的时刻:现在用浏览器访问你的域名,应该就能看到内网那个服务的界面了。就这么简单。
第四步:避坑指南(这部分能帮你省两小时)
坑一:更新了代码,网页还是旧的?
这是宝塔反代最高频的翻车点。宝塔在安装Nginx时默认开启了proxy缓存,缓存文件堆在 `/www/server/nginx/proxy_cache_dir` 里。你后端代码改了、重启了,但Nginx还在傻乎乎地吐旧缓存。
解决办法:进宝塔“软件商店” -> 找到Nginx -> 点“设置” -> 在配置修改里,找到 `proxy_cache` 相关的行,前面加 `#` 注释掉,或者把缓存时间调短。改完重载Nginx。如果你不想动配置,也可以直接进那个缓存目录把文件全删了,再强制刷新浏览器。建议新手直接关掉反代缓存,等跑稳了再按需开。
坑二:WebSocket连不上?
如果你代理的是带实时推送的服务(比如某些聊天面板、在线终端),普通反代过去会一直转圈。需要在反向代理的“自定义高级配置”里,把 `proxy_http_version` 设为 `1.1`,并透传 `Upgrade` 头。具体就是在高级配置框里加上:
加完保存重载,WebSocket就能握手成功了。
坑三:HTTPS证书的问题
你的域名如果开了HTTPS,反代到内网 `http://` 服务是没问题的,Nginx会帮你做好加解密。但反过来,如果你的内网服务本身也是HTTPS,目标URL里写 `https://` 时,宝塔可能会因为自签证书报错。这时候要么内网服务关掉SSL只走HTTP(反正外网到Nginx这段是加密的),要么在高级配置里加上 `proxy_ssl_verify off;` 跳过证书校验(仅限内网自用场景)。
最后说一句
反向代理这东西,配通一次之后就会发现真香。家里NAS的相册、跑在旧笔记本上的测试项目、公司内网的某些工具,全都可以挂到同一个域名下,用 `域名/路径` 的方式区分访问。比如 `yourdomain.com/nas` 进NAS,`yourdomain.com/api` 调接口,一台服务器一个域名全搞定。
配的过程中如果卡住了,把Nginx的报错日志贴出来(在 `/www/wwwlogs/域名.error.log`),论坛里的大佬们一看就能告诉你问题在哪。祝各位一次配通,少走弯路。