使用指南(Android) - ShioMile/Pixiv-Nginx GitHub Wiki

以下为Android平台上的教程。

准备工作

  • 已Root的Android手机。

    • (可选)解锁Bootlock后刷入类原生Android(如LineageOS)。
  • Termux,一款能在Andorid上运行Unix应用的容器。

  • Magisk,Andorid目前唯一的Root管理器,亦是systemless模块包管理器。

  • dos2unix,用于转换文本格式。下载后按之前Windows版教程为参考设置为系统变量

    Android系统的文本换行符格式中,换行符默认使用Unix格式\n,而Windows/DOS中则是\r\n

配置

  1. Termux中输入pkg install nginx下载安装Nginx;输入pkg install tsu下载tsu,可使Termux在Root模式下运行(Nginx反代必须Root模式下使用)。

installnginx

  1. Magisk 设置界面点击Systemless hosts下载其模块包,用于向系统写入Hosts文件。

systemlesshosts

  1. PC端下载Pixiv-Nginx,重复Windows版教程,使用提供的批处理脚本自签证书并移到/ca/目录。

    • (可选)Termux提供了打包好的OpenSSL包,安装方式自然是pkg install openssl,有能力折腾的用户可以尝试在Android上自签证书。本项目提供的文件后缀名.bat的批处理脚本仅适用于Windows,Unix下的批处理脚本文件后缀名则是.sh
  2. 打开nginx.conf,将# user root一行去掉注释(即删除行首#号。);而在pixiv.conf中,由于Log文件位置与Android版不一致,因此必须将access_log logs/access.log custom;一行注释(即在行首加上#号),而下一行则去掉注释。

    • (可选)不需要Log文件的用户可以把pixiv.conf文件中第1 - 5行全部删掉 :)

注释增减

  1. 运行Win转换Unix格式.batnginx.confpixiv.confhosts文件转换成Unix格式后,才能将/ca/nginx.confpixiv.conf复制到Android根目录下/data/data/com.termux/usr/etc/nginx中。

    • 复制文件的操作(特别是/ca/文件夹)可能遇到SElinux上下文的错误,具体表现为尝试运行时出现cannot load certificate错误。解决方案:Termux中输入su进入系统终端模式,再输入命令restorecon -v -R /data/data/com.termux即可修复。
  2. Systemless hosts模块包安装后可在/sbin/.magisk/modules/hosts/system/etc找到hosts文件,而第5步中已经将Hosts转换为Unix格式,现可自行选择直接替换文件或文本编辑器打开进行复制粘贴。

    题外话:Systemless hosts模块包可用于去广告,推荐anti-AD;也可用于修正域名解析,例如googlehosts

  3. 复制RootCA.crt到手机存储,Android系统设置→安全→凭据存储→从SD卡导入,选择RootCA.crt导入。

    • 注意用户证书仅对浏览器有效,如Chromium/Chrome/Webview,App无法使用用户证书。如果需要App使用证书可选择进行下一步操作。
  4. (可选)Magisk模块选项卡中搜索Move Certificates模块后,安装后重启手机即可将用户证书移动至系统证书。

movecert

运行

以下命令在Termux中输入。

  • 启动Nginx:sudo nginx

    • 若显示错误nginx: [emerg] bind() to 0.0.0.0:443 failed (98: Unknown error)。大概率可能Nginx已经在运行,无需重复启动。若Nginx未运行,可输入sudo fuser -k 443/tcp命令强行关闭占用443端口的进程。
  • 退出Nginx:sudo nginx -s quit

    • 若显示错误nginx: [error] open() "/data/data/com.termux/files/usr/tmp/nginx.pid" failed (2: No such file or directory)。同上,Nginx已关闭,无需重复关闭。
  • 重启Nginx:sudo nginx -s reload

已知问题

  • Systemless hosts模块中写入的Hosts的作用力有时甚至大于代理软件(如Shadowsocks之类),例如添加127.0.0.1 exmaple.com,即使用全局代理也依然无法访问exmaple.com。必须用文本编辑器删除相关项才能代理访问,原因未知。