(不止折腾)使用安卓手机搭建Web服务

(不止折腾)使用安卓手机搭建Web服务

前文

Android系统是基于Linux,因此可以在Android系统的手机上使用一些Linux的特性,不过没法直接用,必须借助特殊的程序,这个程序就是Terminal(终端模拟器)。

笔者最开始接触手机上的Terminal(终端)还是在高中时候,那时候热衷于刷机,有过刷机经历的同学应该都晓得,早期的Android手机安全机制没有像现在这么复杂,刷机成本相对来说比较低,并且当时的手机配置比较低(我记得当时用过的一款手机内存是512M,而现在的一款旗舰手机内存已经达到了惊人的12G,这在当时是不敢想象的),大家一般嫌弃自带的系统,觉得太过臃肿,所以手机的各种第三刷机包异常活跃,大家也能通过刷机体验到其他不同风格的系统。刷机的时候需要用第三方的recovery把手机自带的替换掉,这个操作通常是在电脑上用adb工具输入命令行替换的,但是当时由于除了网吧很难接触到电脑,才另辟蹊径,发现可以在手机上完成这一操作,这个工具就是超级终端(我记得当时好像是叫这个名吧,也有叫安卓终端模拟器的),不过当时也就止步于此了,没有做更多的研究。

超级终端

Termux

如今时过境迁,再次接触到安卓上的终端,是一款叫Termux的开源软件,下面是他官网的介绍

termux

Termux之所以在众多的终端模拟器中脱颖而出,主要是基于其良好的生态,集成busybox(相当于是打补丁,弥补一些Android相对于Linux没有的命令),自带包管理工具,并且移植了大部分在Linux发行版上常用的软件,这使得我们能够开箱即用。

介绍完毕,下面我们就准备用Termux来搞一些骚操作。关于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)

nginx预览_手机

此时跟你手机在同一个局域网内的设备同样能够访问这个网页,在Termux中输入ifconfig就可以查看你手机的局域网IP,然后再在电脑上浏览器打开

nginx预览_电脑

目前这个网站还仅仅局限于你自己的手机和局域网,如果我想让更多的人访问该怎么办,这就需要用到下面的工具了,内网穿透。

注意事项:在最新版的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页面进行下载即可

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预览_https

正儿八经的教程到这里就结束了,当然我们还可以利用nginx还做一些骚操作😏

一些骚操作

1.放点学习资料

**是正儿八经的学习资料!**众所周知,深圳地铁的信号是奇差,上了地铁就跟失联一样,我们可以利用这段时间做点事情

例如放一本阮一峰的ECMAScript 6 入门,他这本书是开源的,可以直接获取到HTML的源码,下载下来就能部署,非常方便,部署到本地后,没网的环境下也能打开

es6

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就能立即生效,非常方便

Eva永远的神!

完美!

开玩笑请适度,不要随意侵犯别人的肖像权、隐私权!!!

最后

文章到这里就结束了,大家要是觉得还未尽兴的话,请转战国光的Termux 高级终端安装使用配置教程,这篇博客对Termux的具体使用讲解的非常详细,也有更多的关于Termux的高阶玩法。