(不止折腾)应用安卓手机搭建 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 的高阶玩法。