通过Frp内网穿透和Nginx反向代理实现不带端口号访问家里内网服务器网站

本文介绍了在无公网IP或需去除端口号访问家里服务器的方法。通过Frp内网穿透和Nginx反向代理功能实现,详细说明了Frp在云服务器和家里服务器的配置及运行过程,还介绍了Nginx反向代理去除端口号的操作,最后给出注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先说下背景,Sham虽然去申请开通了公网IP,但是电信是会把80和443端口给禁用的,那正常访问家里服务器都需要带端口号,这样很不友好,于是想起以前使用Frp内网穿透来实现去除端口号,然后在外部云服务器上布置Frp服务的时候发现80被占用,于是用到了Ngnix反向代理功能,终于完整实现。

这个方法能实现没有公网IP或者有公网IP但是想要去除端口号时来使用,缺点就是你得有个外网云服务器,而且实际速度是按照这个云服务器配置来的。

下面就来详细讲实现过程:

首先下载Frp,软件下载地址:https://github.com/fatedier/frp ,记得选择适合自己的版本,里面有中英文使用说明,更多功能可以自行查看,Sham只记录用到的。

将这个软件包分别上传云服务器和家里的服务器,解压。其中frps开头的文件,是服务器端的文件,即外部云服务器上要使用的,而frpc开头的文件,则是客户端的,即家里内部服务器用的。

外部云服务器部分,首先配置 frps.ini 文件,因为Sham只用到web服务,所以只配置了2条:

[common]
#记得下面2个端口在服务器上放行
#云服务器frp端口,用于客户端连接访问用
bind_port = 7000
#web服务http接口,就是你打开网址时访问的,因为80端口被禁用,所以Sham使用了别的
vhost_http_port = 8080

然后运行服务,代码如下:

./frps -c ./frps.ini

家里内部服务器部分,首先配置frpc.ini文件,同上,Sham只配置了web服务:

[common]
#外部云服务器地址+设置的端口
server_addr = xxx.xxx.xxx.xxx
server_port = 7000

#第一个web网站,端口号为内部对应端口,及对应访问网址,这个网址需要在外部云服务器上绑定
[web]
type = http
local_port = 8081
custom_domains = yyy.com

#第二个web网站,端口号为内部对应端口,及对应访问网址,这个网址需要在外部云服务器上绑定
[web2]
type = http
local_port = 8081
custom_domains = xxx.com

#如还有,同上添加

然后运行服务,代码如下:

./frpc -c ./frpc.ini

这样,Frp服务算是已经完成了,正常你就能通过网址:端口号访问了,比如上面的xxx.com:8080,就会访问web2第二个网站。

然后就是通过云服务的Nginx反向代理功能,去除8080这个端口号,因为默认网址直接访问的是80端口,因为云服务器其他网站需要,占用了80,所以frp服务不能使用,所以简单来讲就是通过访问正常网址,来代理访问到8080端口,再实现frp访问内部网站

在云服务器上找到nginx.conf,如果你用的宝塔面板,可以直接通过软件的配置来修改,或者找到/www/server/nginx/conf/nginx.conf

server {
      listen 80;
      server_name xxx.com yyy.com;
      location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_hide_header X-Powered-By;
      }
    }

编辑好之后重载配置即可,这样,就可以直接通过xxx.com访问上面frp设置的网站啦。

注意点:

1. 记得在云服务器和本都内部服务器把相应端口都打开,不然就无法访问了

2. frp需要运行着才行,可以通过宝塔面板的“堡塔应用管理器”或者“Supervisor管理器”让2个服务器上的frp都保持运行,任何1方停止程序,都会导致服务停止

写在最后:

这是无奈之举,需要你有云服务器,而且速度等都会受云服务器限制,如果云服务器空间足够,可以不用考虑,直接放云服务器访问多香

我是一个想做码农的行政文员

<think>嗯,用户问的是如何在微信小程序里配置实现内网访问,接口是IP地址加端口号。这个问题看起来涉及到小程序的网络请求配置服务器设置。首先,我需要回想一下微信小程序的限制,尤其是关于网络请求的部分。 微信小程序要求后端接口必须使用HTTPS,并且域名需要备案,还要在小程序管理后台的request合法域名中添加。但是用户提到的是内网访问,也就是可能使用本地IP端口,比如192.168.x.x或者localhost。这时候可能的问题是小程序在真机调试时能否访问本地服务,或者有没有办法绕过域名的限制。 我记得在小程序开发工具中,可以勾选“校验合法域名、web-view(业务域名)、TLS 版本以及HTTPS证书”,这样在开发工具里可以访问本地服务。但真机调试的时候,这个选项可能起作用,还是需要配置合法域名。过用户可能需要内网测试,可能没有备案的域名,这时候可能需要其他方法。 另外,微信小程序对于本地IP未备案的域名是允许的,所以常规方法可能行通。可能的解决方案包括: 1. 使用内网穿透工具,比如ngrok、frp,将本地服务映射到一个外网域名,并配置HTTPS。这样可以将内网的IP+端口转换为一个合法的域名,然后在小程序后台配置这个域名。但需要用户有外网服务器或者使用第三方服务。 2. 在微信开发者工具中设置代理,或者修改小程序的请求地址为本地IP,但真机上可能无效,只能在开发阶段使用。 3. 如果是企业或学校内网,可能有内部域名HTTPS证书,可以申请内部域名并配置到小程序后台。 过用户可能是在开发阶段需要真机调试访问内网服务,这时候可能需要开启开发工具的校验选项,并且在手机电脑连接同一局域网的情况下,使用电脑的IP地址加端口。例如,在开发工具中设置项目设置里的“校验合法域名”,然后在代码里写http://电脑IP:端口号/api,这样在真机调试时,手机通过局域网访问电脑的服务。 但需要注意,小程序真机调试时,手机必须服务器在同一局域网,且服务器的防火墙要允许该端口访问。同时,微信可能会在后续版本中加强限制,这种方法可能稳定。 另外,用户可能需要了解如何配置小程序的网络请求,比如在app.js中设置全局的baseUrl,根据环境切换开发生产环境的接口地址。或者使用条件编译,在开发环境下使用IP地址,生产环境使用正式域名。 可能还需要提醒用户,正式上线的小程序必须使用备案过的HTTPS域名,内网访问仅限于开发测试阶段,能用于线上环境。如果用户需要长期内网使用,可能需要通过企业微信的小程序或其他私有化部署方案,但具体情况可能更复杂。 总结来说,解决方案可能包括使用内网穿透工具配置合法域名,或者在开发阶段通过修改设置同一局域网访问。需要分步骤指导用户如何操作,并指出可能的限制注意事项。</think>在微信小程序中实现内网访问(使用 IP 地址 + 端口号的接口),需注意小程序的网络安全限制。以下是具体配置方法注意事项: --- ### **核心限制与解决方案** 1. **微信小程序的网络请求限制** - **必须使用 HTTPS**:小程序要求所有网络请求必须通过 HTTPS 协议(本地开发可临时关闭校验)。 - **域名白名单**:需在[微信公众平台](https://mp.weixin.qq.com)的 **开发管理 → 开发设置 → 服务器域名** 中添加合法域名(支持 IP + 端口)。 **因此,直接使用 `http://192.168.x.x:8080` 会报错**。需通过以下方式绕过限制: --- ### **方法 1:开发环境临时调试(仅限本地测试)** #### **步骤** 1. **启用开发工具校验域名** - 在微信开发者工具中,进入 **详情 → 本地设置**,勾选以下选项: ✅ 校验合法域名、Web-view(业务域名)、TLS 版本及 HTTPS 证书 ![微信开发者工具设置](https://example.com/path/to/image) *(注:此处仅为示意)* 2. **配置本地服务支持 HTTPS**(可选但推荐) - 若后端接口为 HTTP,可通过工具(如 `mkcert`)生成本地 HTTPS 证书,或使用反向代理(如 Nginx)将 HTTP 转为 HTTPS。 3. **手机真机调试** - 确保手机与电脑在同一局域网。 - 在代码中使用电脑的局域网 IP(非 `localhost`),例如: ```javascript wx.request({ url: 'https://192.168.1.100:8080/api/data', // 替换为实际 IP 端口 // ... }) ``` - 手机扫描开发者工具中的“真机调试”二维码,完成测试。 --- ### **方法 2:内网穿透 + 域名映射(长期方案)** 若需长期内网访问(如团队测试),需将内网服务映射为外网域名,并配置 HTTPS。 #### **步骤** 1. **使用内网穿透工具** - 工具示例:**Ngrok**、**frp**、**花生壳**等。 - 以 Ngrok 为例: ```bash ngrok http 8080 # 将本地 8080 端口映射为公网域名(如 https://xxxx.ngrok.io) ``` 2. **配置合法域名** - 将生成的域名(如 `https://xxxx.ngrok.io`)添加到微信公众平台的 **服务器域名** 白名单中。 3. **小程序代码中调用** ```javascript wx.request({ url: 'https://xxxx.ngrok.io/api/data', // 使用映射后的域名 // ... }) ``` --- ### **方法 3:企业级私有化部署(高级场景)** 适用于企业内网正式环境,需结合以下方案: 1. **自建 HTTPS 证书**:在内网部署受信任的 CA 证书。 2. **域名解析**:在内网 DNS 服务器中配置私有域名(如 `api.internal.com`)。 3. **小程序后台配置**:将域名添加到微信公众平台的服务器白名单。 --- ### **注意事项** 1. **正式环境必须使用备案域名**,仅限开发或企业内网场景临时使用 IP。 2. **避免使用常见端口(如 80、443)**,防止与系统服务冲突。 3. **真机预览/体验版仍受域名限制**,需通过内网穿透或合法域名解决。 --- ### **示例代码(本地调试)** ```javascript // app.js const isDev = true; // 开发环境开关 const BASE_URL = isDev ? 'https://192.168.1.100:8080' : 'https://api.yourdomain.com'; wx.request({ url: `${BASE_URL}/api/data`, method: 'GET', success(res) { console.log('请求成功:', res.data); } }); ``` --- 通过上述方法,可实现在微信小程序中访问内网 IP + 端口号的接口。建议开发阶段使用方法 1 快速调试,正式环境优先使用方法 2 或 3。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值