使用指南(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
。
配置
- Termux中输入
pkg install nginx
下载安装Nginx;输入pkg install tsu
下载tsu,可使Termux在Root模式下运行(Nginx反代必须Root模式下使用)。
- Magisk 设置界面点击
Systemless hosts
下载其模块包,用于向系统写入Hosts文件。
-
PC端下载Pixiv-Nginx,重复Windows版教程,使用提供的批处理脚本自签证书并移到
/ca/
目录。- (可选)Termux提供了打包好的OpenSSL包,安装方式自然是
pkg install openssl
,有能力折腾的用户可以尝试在Android上自签证书。本项目提供的文件后缀名.bat
的批处理脚本仅适用于Windows,Unix下的批处理脚本文件后缀名则是.sh
。
- (可选)Termux提供了打包好的OpenSSL包,安装方式自然是
-
打开
nginx.conf
,将# user root
一行去掉注释(即删除行首#
号。);而在pixiv.conf
中,由于Log文件位置与Android版不一致,因此必须将access_log logs/access.log custom;
一行注释(即在行首加上#
号),而下一行则去掉注释。- (可选)不需要Log文件的用户可以把
pixiv.conf
文件中第1 - 5行全部删掉 :)
- (可选)不需要Log文件的用户可以把
-
运行
Win转换Unix格式.bat
将nginx.conf
、pixiv.conf
、hosts
文件转换成Unix格式后,才能将/ca/
、nginx.conf
、pixiv.conf
复制到Android根目录下/data/data/com.termux/usr/etc/nginx
中。- 复制文件的操作(特别是
/ca/
文件夹)可能遇到SElinux上下文的错误,具体表现为尝试运行时出现cannot load certificate
错误。解决方案:Termux中输入su
进入系统终端模式,再输入命令restorecon -v -R /data/data/com.termux
即可修复。
- 复制文件的操作(特别是
-
Systemless hosts
模块包安装后可在/sbin/.magisk/modules/hosts/system/etc
找到hosts
文件,而第5步中已经将Hosts转换为Unix格式,现可自行选择直接替换文件或文本编辑器打开进行复制粘贴。题外话:
Systemless hosts
模块包可用于去广告,推荐anti-AD;也可用于修正域名解析,例如googlehosts。 -
复制
RootCA.crt
到手机存储,Android系统设置→安全→凭据存储→从SD卡导入,选择RootCA.crt
导入。- 注意用户证书仅对浏览器有效,如Chromium/Chrome/Webview,App无法使用用户证书。如果需要App使用证书可选择进行下一步操作。
-
(可选)Magisk模块选项卡中搜索
Move Certificates
模块后,安装后重启手机即可将用户证书移动至系统证书。
运行
以下命令在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
。必须用文本编辑器删除相关项才能代理访问,原因未知。