mirror of
https://github.com/EtherDream/jsproxy
synced 2024-11-21 09:36:51 +00:00
编译脚本不放在安装脚本里,放在 docs/compile.md 文档
This commit is contained in:
commit
1d314d2f8e
32
changelogs/README.md
Normal file
32
changelogs/README.md
Normal file
@ -0,0 +1,32 @@
|
||||
# 完整更新日志
|
||||
|
||||
## v0.0.1
|
||||
|
||||
全选的 URL 模型,取代 [之前版本](https://github.com/EtherDream/jsproxy/tree/first-ver)。[查看详细](v0.0.1.md)
|
||||
|
||||
|
||||
## 开发中...
|
||||
|
||||
最新临时的测试,没分版本号
|
||||
|
||||
### 节点切换功能(服务端)
|
||||
|
||||
服务端对于体积较大的资源不返回内容,只返回长度、修改时间、首块 hash 等信息。浏览器从廉价带宽获取完整内容,如果返回信息不一致,再从原服务器获取。
|
||||
|
||||
目前体积阈值为 400KB。廉价带宽使用 Cloudflare Worker,源码参考 `cf-worker` 目录。虽然 Cloudflare Worker 延时较高,但带宽和流量无限制,且费用较低(1000 万次请求 5 美元),非常适合大文件代理。
|
||||
|
||||
|
||||
### 静态资源加速(前端)
|
||||
|
||||
通过自动化工具分析 TOP 10 网站的资源,将缓存时间久的静态资源,预先下载到 CDN 上(包括一个 URL Hash 列表)。前端遇到这些资源时直接从 CDN 获取,大幅减少下载时间,以及代理服务器的带宽占用和流量消耗。
|
||||
|
||||
目前 CDN 暂使用 jsdelivr。未来尝试将资源上传到贴吧等支持 CORS 的免费图床~
|
||||
|
||||
另外演示首页的静态资源也使用 CDN。
|
||||
|
||||
|
||||
### 安装工具更新
|
||||
|
||||
增加一键安装脚本,Linux x64 系统可自动安装。
|
||||
|
||||
(没仔细测。有问题 issure 反馈。以后有时间补充测试案例。。。)
|
34
changelogs/v0.0.1.md
Normal file
34
changelogs/v0.0.1.md
Normal file
@ -0,0 +1,34 @@
|
||||
虽然该版本仍为概念演示状态,但相比[最初版本](https://github.com/EtherDream/jsproxy/tree/first-ver),有了很大变化:
|
||||
|
||||
# 不再使用子域名
|
||||
|
||||
使用子域名编码目标域名(例如 gg.jsproxy.tk),存在太多缺陷。例如 HTTPS 证书问题,DNS 性能和安全问题等。因此目前不再使用子域名,只用固定的域名,目标 URL 放在路径里。例如:
|
||||
|
||||
https://zjcqoo.github.io/-----https://www.google.com
|
||||
|
||||
当然这也会产生很多新问题,例如无法支持 Cookie、页面之间没有同源策略限制等。
|
||||
|
||||
对于 Cookie,目前通过 JS 来维护,而不用浏览器原生(当然还有不少细节没实现)。这样的好处是前后端可以分离,前端页面可以放在第三方 Web 服务器上(例如 CDN、GitHub Pages),我们的服务器只提供代理接口。
|
||||
|
||||
这样一个页面可使用多个服务器的代理接口,并能实现线路切换、负载均衡等效果。
|
||||
|
||||
同源策略方面的限制目前暂未实现,因此不要进行登陆等操作,避免隐私泄露。
|
||||
|
||||
|
||||
# 服务端优化
|
||||
|
||||
安全改进:由于 Web 页面托管在第三方站点上,自己的服务器无需开启 443 端口,因此也无需 root 运行。同时支持 IP 黑名单功能,防止 SSRF 攻击。
|
||||
|
||||
代码改进:接口代理使用固定的 URL(参见 `api.conf`),不再使用任意路径,代码干净了很多。
|
||||
|
||||
|
||||
# 支持更多浏览器
|
||||
|
||||
相比之前版本只支持 Chrome,现在还支持最新的 Safari 和 FireFox。
|
||||
|
||||
注意:FireFox 隐身模式下不支持 Service Worker,只能普通模式访问。
|
||||
|
||||
|
||||
# 提供一个首页
|
||||
|
||||
虽然依旧简陋,但比之前好。提供了线路切换、预加载的功能。
|
106
docs/compile.md
106
docs/compile.md
@ -1,29 +1,97 @@
|
||||
# 简介
|
||||
# 手动安装
|
||||
|
||||
默认的安装方式,是直接下载编译后的 nginx 程序。目前只提供 Linux x64 系统的文件,其他系统暂不支持,需要从源码编译。
|
||||
## 创建用户
|
||||
|
||||
此外,对于没有 root 权限的系统,也需通过源码编译,从而改变 nginx 的安装位置。(nginx 程序路径是在编译时通过 `--prefix` 参数指定的,安装后移动程序位置会导致某些链接库无法加载。如果有好的解决方案多指教~)
|
||||
|
||||
|
||||
# 依赖
|
||||
|
||||
需要安装 make、gcc 等,参考 nginx 的编译。
|
||||
|
||||
无需安装 pcre、zlib、openssl 开发库,安装脚本会自动下载源码。
|
||||
|
||||
|
||||
# 脚本
|
||||
新建一个名为 `jsproxy` 用户(`nobody` 组),并切换:
|
||||
|
||||
```bash
|
||||
curl -O https://raw.githubusercontent.com/EtherDream/jsproxy/master/i.sh
|
||||
bash i.sh compile
|
||||
groupadd nobody
|
||||
useradd jsproxy -g nobody --create-home
|
||||
|
||||
su - jsproxy
|
||||
```
|
||||
|
||||
nginx 最终安装在 `$HOME/openresty` 目录下。代理服务安装在当前 `server` 目录下。
|
||||
非 Linux 系统,或者无 root 权限的设备,可忽略。
|
||||
|
||||
|
||||
# 支持
|
||||
## 安装 nginx
|
||||
|
||||
目前测试过的系统:
|
||||
下载、编译、安装 nginx。本项目使用 [OpenResty](https://openresty.org/en/)。
|
||||
|
||||
* OSX
|
||||
```bash
|
||||
cd $(mktemp -d)
|
||||
|
||||
curl -O https://www.openssl.org/source/openssl-1.1.1b.tar.gz
|
||||
tar zxf openssl-*
|
||||
|
||||
curl -O https://ftp.pcre.org/pub/pcre/pcre-8.43.tar.gz
|
||||
tar zxf pcre-*
|
||||
|
||||
curl -O https://zlib.net/zlib-1.2.11.tar.gz
|
||||
tar zxf zlib-*
|
||||
|
||||
curl -O https://openresty.org/download/openresty-1.15.8.1.tar.gz
|
||||
tar zxf openresty-*
|
||||
cd openresty-*
|
||||
|
||||
export PATH=$PATH:/sbin
|
||||
|
||||
./configure \
|
||||
--with-openssl=../openssl-1.1.1b \
|
||||
--with-pcre=../pcre-8.43 \
|
||||
--with-zlib=../zlib-1.2.11 \
|
||||
--with-http_v2_module \
|
||||
--with-http_ssl_module \
|
||||
--with-pcre-jit \
|
||||
--prefix=$HOME/openresty
|
||||
|
||||
make
|
||||
make install
|
||||
```
|
||||
|
||||
其中 `configure` 的参数 `--prefix` 指定 nginx 安装路径,这里为方便设为用户主目录。
|
||||
|
||||
> 注意编译后的 nginx 程序不能改变位置,否则会启动失败
|
||||
|
||||
测试能否执行:
|
||||
|
||||
```bash
|
||||
$HOME/openresty/nginx/sbin/nginx -h
|
||||
```
|
||||
|
||||
|
||||
## 安装代理程序
|
||||
|
||||
下载本项目。其本质就是一堆 nginx 配置:
|
||||
|
||||
```bash
|
||||
git clone --depth=1 https://github.com/EtherDream/jsproxy.git server
|
||||
```
|
||||
|
||||
开启代理服务:
|
||||
|
||||
```bash
|
||||
cd server
|
||||
./run.sh
|
||||
```
|
||||
|
||||
更新使用 git 即可。
|
||||
|
||||
|
||||
## 编译问题
|
||||
|
||||
编译前需要安装 make、gcc 等工具,具体可参考 nginx 编译。
|
||||
|
||||
无需安装 pcre-devel、openssl-devel、zlib-devel 依赖,已使用源码编译。
|
||||
|
||||
|
||||
## 用户问题
|
||||
|
||||
为什么要创建一个 `jsproxy` 用户运行该服务?
|
||||
|
||||
因为该服务无需 root,所以更低的权限可以减少风险。另外在防 SSRF 脚本 `setup-ipset.sh` 中,是通过 iptalbes 的 `uid-owner` 策略阻止 `jsprxoy` 这个特定用户访问内网的。
|
||||
|
||||
|
||||
## 支持系统
|
||||
|
||||
目前测试了 OSX 系统,其他还在测试中。。。
|
98
i.sh
98
i.sh
@ -3,9 +3,6 @@
|
||||
CDN=https://cdn.jsdelivr.net/gh/etherdream/jsproxy-bin@master
|
||||
|
||||
JSPROXY_VER=0.0.9
|
||||
PCRE_VER=8.43
|
||||
ZLIB_VER=1.2.11
|
||||
OPENSSL_VER=1.1.1b
|
||||
OPENRESTY_VER=1.15.8.1
|
||||
|
||||
SUPPORTED_OS="Linux-x86_64"
|
||||
@ -35,7 +32,12 @@ err() {
|
||||
output $COLOR_RED $1
|
||||
}
|
||||
|
||||
check_nginx() {
|
||||
install() {
|
||||
log "下载 nginx 程序 ..."
|
||||
curl -O $CDN/$OS/openresty-$OPENRESTY_VER.tar.gz
|
||||
tar zxf openresty-$OPENRESTY_VER.tar.gz
|
||||
rm -f openresty-$OPENRESTY_VER.tar.gz
|
||||
|
||||
local ngx_exe="$NGX_DIR/nginx/sbin/nginx"
|
||||
local ngx_ver=$($ngx_exe -v 2>&1)
|
||||
|
||||
@ -45,9 +47,7 @@ check_nginx() {
|
||||
fi
|
||||
log "$ngx_ver"
|
||||
log "nginx path: $NGX_DIR"
|
||||
}
|
||||
|
||||
install_jsproxy() {
|
||||
log "下载代理服务 ..."
|
||||
curl -s -O $CDN/server-$JSPROXY_VER.tar.gz
|
||||
|
||||
@ -72,75 +72,6 @@ install_jsproxy() {
|
||||
log "服务已开启。后续维护参考 https://github.com/EtherDream/jsproxy"
|
||||
}
|
||||
|
||||
compile() {
|
||||
local tmp_dir="$PWD/__tmp__"
|
||||
|
||||
mkdir -p $tmp_dir
|
||||
cd $tmp_dir
|
||||
|
||||
log "下载 pcre 源码 ..."
|
||||
curl -O https://ftp.pcre.org/pub/pcre/pcre-$PCRE_VER.tar.gz
|
||||
tar zxf pcre-$PCRE_VER.tar.gz
|
||||
|
||||
log "下载 zlib 源码 ..."
|
||||
curl -O https://zlib.net/zlib-$ZLIB_VER.tar.gz
|
||||
tar zxf zlib-$ZLIB_VER.tar.gz
|
||||
|
||||
log "下载 openssl 源码 ..."
|
||||
curl -O https://www.openssl.org/source/openssl-$OPENSSL_VER.tar.gz
|
||||
tar zxf openssl-$OPENSSL_VER.tar.gz
|
||||
|
||||
log "下载 nginx 源码 ..."
|
||||
curl -O https://openresty.org/download/openresty-$OPENRESTY_VER.tar.gz
|
||||
tar zxf openresty-$OPENRESTY_VER.tar.gz
|
||||
|
||||
cd openresty-$OPENRESTY_VER
|
||||
|
||||
export PATH=$PATH:/sbin
|
||||
|
||||
log "配置中 ..."
|
||||
./configure \
|
||||
--with-openssl=../openssl-$OPENSSL_VER \
|
||||
--with-pcre=../pcre-$PCRE_VER \
|
||||
--with-zlib=../zlib-$ZLIB_VER \
|
||||
--with-http_v2_module \
|
||||
--with-http_ssl_module \
|
||||
--with-pcre-jit \
|
||||
--prefix=$NGX_DIR
|
||||
|
||||
log "编译中 ..."
|
||||
make
|
||||
make install
|
||||
|
||||
log "编译完成"
|
||||
rm -rf $tmp_dir
|
||||
|
||||
check_nginx
|
||||
install_jsproxy
|
||||
}
|
||||
|
||||
install() {
|
||||
log "下载 nginx 程序 ..."
|
||||
curl -O $CDN/$OS/openresty-$OPENRESTY_VER.tar.gz
|
||||
tar zxf openresty-$OPENRESTY_VER.tar.gz
|
||||
rm -f openresty-$OPENRESTY_VER.tar.gz
|
||||
|
||||
check_nginx
|
||||
install_jsproxy
|
||||
}
|
||||
|
||||
update() {
|
||||
install_jsproxy
|
||||
}
|
||||
|
||||
pack() {
|
||||
log "压缩 openresty ..."
|
||||
GZIP=-9
|
||||
tar cvzf openresty.tar.gz openresty
|
||||
log "done"
|
||||
ls -la
|
||||
}
|
||||
|
||||
main() {
|
||||
if [[ "$SUPPORTED_OS" != *"$OS"* ]]; then
|
||||
err "当前系统 $OS 不支持自动安装。尝试编译安装"
|
||||
@ -170,15 +101,8 @@ main() {
|
||||
}
|
||||
|
||||
|
||||
case "$1" in
|
||||
"install") install
|
||||
exit;;
|
||||
"compile") compile
|
||||
exit;;
|
||||
"update") update
|
||||
exit;;
|
||||
"pack") pack
|
||||
exit;;
|
||||
*) main
|
||||
exit;;
|
||||
esac
|
||||
if [[ "$1" == "install" ]]; then
|
||||
install
|
||||
else
|
||||
main
|
||||
fi
|
Loading…
Reference in New Issue
Block a user