现有一已经备案的域名,和在家庭电脑上的flask服务的网页,希望做到通过域名及https的方式访问该网页。
准备通过nginx在云服务器上进行转发,用frp做内网穿透,访问本地网页。
流程如下:
1.买一个云服务器,例如阿里云。
这个云服务器需要有公网IP(即固定不变的IP,才能和域名绑定)。
2.将域名解析到该公网IP。


3.进入云服务器,这里采用centos7系统。安装tengine(即nginx的一个分支,具有nginx的功能)。
mkdir /usr/local/tengine:创建tengine文件夹
cd方法进入该文件夹
wget http://tengine.taobao.org/download/tengine-2.2.2.tar.gz:下载tengine
tar zxvf tengine-2.2.2.tar.gz:解压tengine-2.2.2.tar.gz到tengine文件夹下
cd tengine-2.2.2
yum install gcc openssl-devel zlib-devel -y:安装依赖文件
./configure --with-http_stub_status_module --with-http_ssl_module:编译
make && make install:安装(安装时会自动创建/usr/local/nginx文件夹)
cd nginx/sbin:进入sbin文件夹
./nginx:启动nginx
./nginx -t :测试nginx是否启
lsof -i:80 :查看80端口是否开启(yum install lsof安装lsof),下图表示正常监听

/usr/local/nginx/conf/nginx.conf或者 进入conf文件夹后sudo vi nginx.conf 打开配置文件
浏览器打开www.wingsfish.com出现tengine欢迎界面表示安装成功
在/usr/local/nginx目录中创建ssl文件夹。
注意:vultr(一种VPS代理,如果不用可忽视)有防火墙问题,需要将80端口添加让防火墙通过,否则不能访问。
防火墙部分可以参考:https://www.jianshu.com/p/6ac0a9afa080

4.获取ssl证书,方便用https访问
获取ssl证书有很多渠道,下面介绍两种:
1)Let’s Encrypt
curl https://get.acme.sh | sh:下载安装acme.sh
安装后进入/root/.acme.sh目录
./acme.sh --issue -d www.wingsfish.com --webroot /usr/local/nginx/html:生成证书(正常会有证书生成验证成功提示,证书生成在/root/.acme.sh/www.wingsfish.com目录)
进入/root/.acme.sh目录
./acme.sh --installcert -d www.wingsfish.com
--key-file /usr/local/nginx/ssl/www.wingsfish.com.key
--fullchain-file /usr/local/nginx/ssl/fullchain.cer
--reloadcmd "/usr/local/nginx/sbin/nginx -s reload"
进入/usr/local/nginx/conf/目录,编辑nginx.conf文件:

将https sever下边的配置注释解开(删除前面的#号), ssl_certificate 这里配置fullchain.cer , ssl_certificate_key这里配置www.wingsfish.com.key,这俩文件都经过上边的命令被放在/usr/local/nginx/ssl目录中,保存文件退出后,执行命令
( /usr/local/nginx/sbin/nginx -t),

,有这个显示说明配置成功,再执行命令(/usr/local/nginx/sbin/nginx -s reload)重新加载nginx配置文件后,在浏览器中输入https://www.wingsfish.com,如果出现欢迎界面表示配置成功,

加上此配置可配置强制使用https
注:如果不用https,则做如下修改进行转发:

增加这一行即可。
增加完重新加载:/usr/local/nginx/sbin/nginx -s reload
2)阿里云赛门铁克的ssl证书





在/nginx/conf/目录下创建cert文件夹
从windows向linux传输文件:
下载putty里面的PSCP.EXE文件,解压
cmd方式进入PSCP.EXE所在文件夹,执行以下指令:

进入nginx/conf打开nginx.conf文件,编辑如下:

5.frp内网穿透
云服务器上操作如下:
wget https://github.com/fatedier/frp/releases/download/v0.21.0/frp_0.21.0_linux_amd64.tar.gz:下载frp服务器端
tar zxvf frp_0.21.0_linux_amd64.tar.gz:解压
sudo vi frps.ini:服务器编辑frps.ini这个文件,修改如下:

bind_port是frp通信端口,vhost_http_port是frp所代理的端口,配置好保存文件退出,执行命令(./frps -c ./frps.ini)可看到启动日志。
家庭电脑去下载:https://github.com/fatedier/frp/releases/download/v0.21.0/frp_0.21.0_windows_amd64.zip,根据系统位数不同下载相应的。
本地电脑编辑frpc.ini文件:

目前的配置,server_addr是服务器地址,server_port是frp通信端口(要和服务端一致),local_port是本地服务端口(要和服务端一致),custom_domains是需要代理的服务器地址,保存文件退出,在cmd进入frp目录,执行frpc.exe,可看到启动日志:

启动正常的话可在服务端看到通信信息,打开浏览器www.wingsfinsh.com:8080能看到界面
6.nginx转发配置
服务器中打开nginx配置文件nginx.conf,

添加proxy_pass 地址指向frp代理地址,注释下边两行,保存退出后,执行
/usr/local/nginx/sbin/nginx -t 测试无误后再执行
/usr/local/nginx/sbin/nginx -s reload,浏览器打开https://www.wingsfish.com配置成功。
7.linux可能用到的命令
cd 文件夹名:进入文件夹
cd .. :返回上级文件夹
mkdir 文件夹名 :创建文件夹
ls :查看文件夹下内容
ps :查看当前进程
kill -9 进程号 :杀死进程
rm -rf 文件夹名 :删除文件夹(包含文件夹内容)
frps 后台执行:
nohup ./frps -c ./frps.ini &
fg 切换到前台
ctrl c 终止
ctrl z 切换回后台挂起(停止)
bg % 进程号 后台程序重新开始执行
mv 目标1 目录2 :将目标1移动到目录2下,如果在同一个文件夹下,则是重命名。
8.可能的问题:
flask里用0.0.0.0:8080

云服务器有的服务商会限制端口,需要手工去打开以下端口:80,22,443,7000,8080
centos防火墙需要关闭或者开放上述端口,注意centos6用的是iptable,而centos7用的是firewall
网友评论