(不止折腾)使用安卓手机搭建Web服务
前文
Android
系统是基于Linux
,因此可以在Android
系统的手机上使用一些Linux
的特性,不过没法直接用,必须借助特殊的程序,这个程序就是Terminal
(终端模拟器)。
笔者最开始接触手机上的Terminal
(终端)还是在高中时候,那时候热衷于刷机,有过刷机经历的同学应该都晓得,早期的Android
手机安全机制没有像现在这么复杂,刷机成本相对来说比较低,并且当时的手机配置比较低(我记得当时用过的一款手机内存是512M,而现在的一款旗舰手机内存已经达到了惊人的12G,这在当时是不敢想象的),大家一般嫌弃自带的系统,觉得太过臃肿,所以手机的各种第三刷机包异常活跃,大家也能通过刷机体验到其他不同风格的系统。刷机的时候需要用第三方的recovery
把手机自带的替换掉,这个操作通常是在电脑上用adb
工具输入命令行替换的,但是当时由于除了网吧很难接触到电脑,才另辟蹊径,发现可以在手机上完成这一操作,这个工具就是超级终端(我记得当时好像是叫这个名吧,也有叫安卓终端模拟器的),不过当时也就止步于此了,没有做更多的研究。
Termux
如今时过境迁,再次接触到安卓上的终端,是一款叫Termux
的开源软件,下面是他官网的介绍
Termux
之所以在众多的终端模拟器中脱颖而出,主要是基于其良好的生态,集成busybox
(相当于是打补丁,弥补一些Android
相对于Linux
没有的命令),自带包管理工具,并且移植了大部分在Linux
发行版上常用的软件,这使得我们能够开箱即用。
介绍完毕,下面我们就准备用Termux
来搞一些骚操作。关于Termux
一些具体的介绍以及入门操作,我这边就不再重复了,在文章的最后面会给大家推一个博客,可以算是中文关于Termux
的博客中最详细的了,当然博客本身内容质量也很高。
PS:大家如果对这篇文章感兴趣,想自己去安装Termux,最好是直接去Google Play下载,这应该是最不会出问题的渠道,如果没法上Google Play,可以前往酷安社区,在该软件的下方评论区会有热心观众给出解决方案
nginx
1.安装nginx
pkg install nginx
2.启动nginx
nginx
2.浏览器查看
打开浏览器,输入127.0.0.1:8080
(Termux没有使用1024以下端口的权限,所以nginx默认的端口是8080)
此时跟你手机在同一个局域网内的设备同样能够访问这个网页,在Termux
中输入ifconfig
就可以查看你手机的局域网IP,然后再在电脑上浏览器打开
目前这个网站还仅仅局限于你自己的手机和局域网,如果我想让更多的人访问该怎么办,这就需要用到下面的工具了,内网穿透。
注意事项:在最新版的termux中不再需要安装proot来使用nginx
Frp内网穿透
frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。
之所以选择Frp
作为内网穿透的工具,主要是原因是Frp是国人开发的,文档阅读没有障碍,并且他的配置非常简单,官网稍微看下文档就可以上手了,还有就是虽然Frp比较简单,但是性能并不低。Frp分为服务端Frps
以及客户端Frpc
,以下就直接把服务端简称为Frps,客户端简称为Frpc。Frps需要部署在一台拥有公网的服务器上,Frpc部署的机器只要能联网就可以了(能连通Frps)。
1.安装Frps、Frpc
直接到Frp的releases页面进行下载即可
一般来说Frps需要用x64的版本,也就是上面的frp_0.37.1_linux_amd64.tar.gz
,Frpc需要用arm64的版本,也就是上面的frp_0.37.1_linux_arm64.tar.gz
,不清楚自己的机器的在机器上输入uname -m
进行查看(aarch64就是arm64)。下载完成后分别进行解压
2.Frps配置文件
进入解压后的文件夹,编辑frps.ini
[common]
# Frps服务的端口
bind_port = 7000
# Frps暴露出的http端口,可以被nginx代理(后面会讲到)
vhost_http_port = 8080
# 自己设计一串字符做token
token = 1234567890
3.Frpc配置文件
进入解压后的文件夹,编辑frpc.ini
[common]
# Frps的地址
server_addr = 127.0.0.1
# Frps的端口
server_port = 7000
# token(与Frps填写的一致)
token = 1234567890
# web服务的名字随意
[web_test]
# 类型是http
type = http
# http服务绑定的ip(一般都是127.0.0.1)
local_ip = 127.0.0.1
# http服务绑定的端口
local_port = 8080
# 这个http服务通过哪个域名进行访问(服务端通过访问的域名将请求指向指定的frpc客户端)
custom_domains = xikcloud.com
4.启动Frps、Frpc
./frps -c ./frps.ini
./frpc -c ./frpc.ini
如果不需要https,现在就已经可以正常进行访问了(域名解析弄好,域名解析到Frps的公网ip),例如我绑定的是xikcloud.com,现在就可以输入xikcloud.com:8080进行访问了
nginx进行代理,开启https
前提是服务器域名均备案通过,且已经申请了SSL证书(阿里云就有免费的,很方便)
nginx配置
upstream frp {
# 代理到Frps,端口号与刚刚填写的一致
server 127.0.0.1:8080;
}
server {
listen 443 ssl;
server_name xikcloud.com;
ssl_certificate 6150946_xikcloud.com.pem;
ssl_certificate_key 6150946_xikcloud.com.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://frp;
# 下面的必要要设置,才能使frps获取到真实的客户地址
proxy_set_header HOST $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
正常情况下就应该能正常访问了,而且有https🤗
正儿八经的教程到这里就结束了,当然我们还可以利用nginx还做一些骚操作😏
一些骚操作
1.放点学习资料
是正儿八经的学习资料!众所周知,深圳地铁的信号是奇差,上了地铁就跟失联一样,我们可以利用这段时间做点事情
例如放一本阮一峰的ECMAScript 6 入门,他这本书是开源的,可以直接获取到HTML的源码,下载下来就能部署,非常方便,部署到本地后,没网的环境下也能打开
2.共享文件
危险行为,谨慎操作!!!(任何人都可以直接通过互联网访问你手机中的文件,任何时候你都不应该开放整个内部存储目录)
利用nginx的索引功能,我们能轻松的共享文件出去
在termux中输入
termux-setup-storage
获取文件读取的权限,手机会弹出提示,允许即可。之后会在用户目录下生成一个storage
文件夹,storage
文件夹里面又有若干文件夹,其中一个是shared
,它是一个指向用户内置储存(内置SD卡)目录的软连接。
接下来我打开手机的文件管理器,新建一个文件夹叫images,里面放几张照片
nginx配置
# 存放文件的目录
root /data/data/com.termux/files/home/storage/shared/images;
location / {
# 索引
autoindex on;
# 显示文件大小
autoindex_exact_size on;
# 显示文件时间
autoindex_localtime on;
}
3.恶搞
可以放张表情包啥的(你懂的)
直接接着上面的配置,在刚刚的手机内置存储images
文件夹中,新建个文件index.html
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<img id="img" src="./1.jpg" />
<script>
const clientWidth = document.documentElement.clientWidth
const imgEle = document.getElementById("img")
imgEle.setAttribute("style", `width: ${clientWidth}px; height: ${clientWidth}px; object-fit: cover;`)
</script>
</body>
</html>
nginx配置
# 存放文件的目录
root /data/data/com.termux/files/home/storage/shared/images;
location / {
index index.html;
# 设置图片不缓存(每次更换都能立即响应)
if ($request_filename ~* .*.(gif|jpg|jpeg|png|bmp|swf)$)
{
expires -1s;
}
}
注意我这里设置了图片不缓存,这样每次主要要改内容的时候只要换一张图重命名为1.jpg
就能立即生效,非常方便
完美!
开玩笑请适度,不要随意侵犯别人的肖像权、隐私权!!!
最后
文章到这里就结束了,大家要是觉得还未尽兴的话,请转战国光的Termux 高级终端安装使用配置教程,这篇博客对Termux的具体使用讲解的非常详细,也有更多的关于Termux的高阶玩法。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。