4

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

 2 years ago
source link: https://segmentfault.com/a/1190000040551476
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK