先说下背景,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方停止程序,都会导致服务停止
写在最后:
这是无奈之举,需要你有云服务器,而且速度等都会受云服务器限制,如果云服务器空间足够,可以不用考虑,直接放云服务器访问多香
评论(0)