设为首页 收藏本站
查看: 1718|回复: 0

[经验分享] 【小技巧解决大问题】使用 frp 突破阿里云主机无弹性公网 IP 不能用作 Web 服务器的限制

[复制链接]
YunVN网友  发表于 2018-9-21 08:45:09 |阅读模式
背景
DSC0000.jpg

  今年 8 月份左右,打折价买了一个阿里云主机,比平常便宜了 2000 多块。买了之后,本想作为一个博客网站的,毕竟国内的服务器访问肯定快一些。满心欢喜的下单之后,却发现 http 服务,外网怎么也无法访问。各种搜,最终在文档中,终于看见:必须要买弹性公网 IP,并且绑定到阿里云主机上,才可以用作web服务器。而且要求,阿里云主机必须是未绑定过 IP 的。不过很不幸,我当时下单时,已经勾选了使用公网IP。本来想着解绑然后重新绑定下,应该就可以了。然而,已经绑定过公网IP的,是不允许再改绑弹性公网IP的。欲哭无泪,这个服务器,也就闲置了几个月。
DSC0001.jpg

  最近接触了些内网穿透的知识,我突然想到,是不是借助内网穿透,也可以把我的阿里云主机给暴露出来?毕竟内网穿透,使用的是 Linux 一些基础知识,算不上很极客的技术,应该是具有通用性的。经验证,竟然真的可行! 特记录下来,献给有同样遭遇的有缘人。

使用 revel 搭建一个简单的 Web 服务器
  需要先搭建一个 Web 服务器,以供测试用。如果你选择其他方式搭建 web 服务器,可直接跳过这一节。

下载最新版本 go
  可以在 Go 下载页,查看最新的稳定版本,来替换 go1.9.2.linux-amd64.tar.gz :
  

wget https://redirector.gvt1.com/edgedl/go/go1.9.2.linux-amd64.tar.gz  
tar -C /usr/local -xzf go1.9.2.linux-amd64.tar.gz
  

  如果已经安装过 Go,可能需要先移除:
  

apt remove golang-go  

  在 ~/.profile 中,添加:
  

export PATH=$PATH:/usr/local/go/bin  

  在 ~/.bash_profile 中,添加:
  

export GOPATH=$HOME/go  

  $HOME/go 表示你想用作 $GOPATH 的文件夹。
  设置完后,最好重启下 shell 终端,以使信息生效。

直接从 github 下载 golang.org/x/sys 和 golang.org/x/net 源码
  golang.org下的包,直接安装,在无法科学上网时,有极大概率会失败。作为一种替代手段,我们可以直接从 github 下载对应的源码到 $GOPATH 对应路径。
  

# 创建包存储路径  
mkdir $GOPATH/src/golang.org/x
  

  
#安装git
  
apt install git
  

  
#下载 revel 依赖的包源码。
  
git clone https://github.com/golang/net $GOPATH/src/golang.org/x/net
  
git clone https://github.com/golang/sys $GOPATH/src/golang.org/x/sys
  

  
# 安装 revel
  
go get -u github.com/revel/cmd/revel
  

  
# revel 命令,需要在 $GOPATH 中执行
  
cd $GOPATH/src
  

  
# 创建并运行一个web应用
  
revel new hello-go-web
  
revel run hello-go-web
  

DSC0002.jpg


frp 配置
  有关 frp 配置的细节,请参考 借助 frp 随时随地访问自己的树莓派。此处只贴出关键配置文件。

在公网能访问的服务器上配置 frps 服务器端
  

[common]  
bind_port = 7000
  
vhost_http_port =80
  
dashboard_port = dashboard_port_number
  
dashboard_user = dashboard_user_name
  
dashboard_pwd = dashboard_pwd_value
  
privilege_token = privilege_token_value
  
subdomain_host = example.com
  

  注意: example.com 要换为自己的域名。

域名泛解析
DSC0003.jpg

  将泛域名 *.example.com 解析到 frps 所在服务器的 IP 地址。这样,你不需要频繁修改 DNS 配置了。此处我们是打算把某个子域名解析到我们的阿里云主机上。如果你想直接把根域名解析到服务器上,参考:通过自定义域名访问部署于内网的 web 服务

在只能内网访问的阿里云主机上配置 fprc 客户端
  

[common]  
server_addr = your_server_IP
  
server_port = 7000
  
privilege_token = privilege_token_value
  
login_fail_exit = false
  

  
[ssh-aliyun]
  
type = tcp
  
local_IP = 127.0.0.1
  
local_port = 22
  
remote_port = remote_port_number
  
use_encryption = true
  
use_compression = true
  

  
[web-show]
  
type = http
  
local_port = 9000
  
subdomain = show
  

  注意:9000 表示web服务器的本地端口,请根据需要替换;show,表示子域名,配置成功后,可以通过 show.example.com 访问自己的 web 网页了。

使用 Systemd 实现自动启动 revel
  使用 Systemd 实现自动启动 frp,可以直接看 借助 frp 随时随地访问自己的树莓派 相关部分,不再赘述。此处着重说下 revel 自启动的配置:
  

  
# 编写 frp service 文件,以 centos7 为例,适用于 debian
  
mkdir /usr/lib/systemd/system/
  
vim /usr/lib/systemd/system/revel-hello-go-web.service
  

  
# 内容如下
  

  
变更内容:
  
[Unit]
  
DescrIPtion=/revel-hello-go-web
  
After=network.target
  

  
[Service]
  
Environment=PATH=$PATH:/usr/local/go/bin
  
Environment=GOPATH=/root/go
  
TimeoutStartSec=30
  
ExecStart=/root/go/bin/revel run hello-go-web
  
ExecStop=/bin/kill $MAINPID
  
Restart=on-failure
  
RestartSec=42s
  

  
[Install]
  
WantedBy=multi-user.target
  

  
# 启动 revel-hello-go-web 并设置开机启动
  
systemctl enable revel-hello-go-web
  
systemctl start revel-hello-go-web
  
systemctl status revel-hello-go-web
  

  
# 部分服务器上,可能需要加 .service 后缀来操作,即:
  
systemctl enable revel-hello-go-web.service
  
systemctl start revel-hello-go-web.service
  
systemctl status revel-hello-go-web.service
  

  
# 重新加载:
  
systemctl daemon-reload
  

  注意:


  • /root/go 要替换为自己电脑 $GOPATH 的真实路径。
  • 此处的 sytemd 的配置中, Environment 环境变量,必须设置,否则报错
参考文章


  • 借助 frp 随时随地访问自己的树莓派
  • frp 中文文档
  • proxy name [ssh] is already in use错误
  • A high productivity, full-stack web framework for the Go language.
  • 在centos7上使用systemd启动supervisor
  • Using environment variables in systemd units



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-599176-1-1.html 上篇帖子: 初学者没有搞明白的GOROOT,GOPATH,GOBIN,project目录 下篇帖子: java aes CBC的填充方式发现
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表