使用Apache反代Shadowsocks并通过Cloudflare worker加速

前面的文章讲到过如何搭建Shadowsocks+V2ray-plugin,但是由于使用了一键安装脚本,当服务器上已经有HTTP服务器在运行时,必然会出现端口冲突的问题。为了使两者能共存,我们来手动安装并设置反向代理。

p.s. 本文使用的环境为Ubuntu18 + Apache2.4,且默认已有一个域名指向了当前服务器。

安装Shadowsocks

我们使用秋水逸冰的一键安装脚本来安装Shadowsocks:

wget --no-check-certificate -O shadowsocks-all.sh https://raw.githubusercontent.com/teddysun/shadowsocks_install/master/shadowsocks-all.sh chmod +x shadowsocks-all.sh ./shadowsocks-all.sh 2>&1 | tee shadowsocks-all.log
Code language: Bash (bash)

注意安装的时候选择安装Shadowsocks-libev版本,并且不需要安装simple-obfs

其余选项按照提示自定义即可。其中path我用了根目录/

安装完后有几个管理命令可能会用到:

  • 启动/关闭/重启/查看运行状态:
/etc/init.d/shadowsocks-libev start /etc/init.d/shadowsocks-libev stop /etc/init.d/shadowsocks-libev restart /etc/init.d/shadowsocks-libev status
Code language: Bash (bash)
  • 查看日志(由于找不到日志存放地址,直接查看系统日志)
tail -f /var/log/syslog
Code language: Bash (bash)
  • 手动运行(实时查看日志,用于测试,ctrl+c即可停止运行)
/usr/local/bin/ss-server -v -c /etc/shadowsocks-libev/config.json
Code language: Bash (bash)
  • 修改配置文件
nano /etc/shadowsocks-libev/config.json
Code language: Bash (bash)

安装v2ray-plugin

进入v2ray-plugin的release页面,找到需要的版本并下载。我用的是linux-amd64-v1.3.1:

wget https://github.com/shadowsocks/v2ray-plugin/releases/download/v1.3.1/v2ray-plugin-linux-amd64-v1.3.1.tar.gz
Code language: Bash (bash)

下载完成后解压:

tar -zxvf v2ray-plugin-linux-amd64-v1.3.1.tar.gz
Code language: Bash (bash)

并移动到其他地方,如/var/www/gfw,重命名为v2ray-plugin

mv v2ray-plugin_linux_amd64 /var/www/gfw/v2ray-plugin
Code language: Bash (bash)

修改权限:

chmod 755 /var/www/gfw/v2ray-plugin
Code language: Bash (bash)

修改Shadowsocks的配置文件,加入如下两行:

"plugin":"/var/www/gfw/v2ray-plugin", "plugin_opts":"server;path=/;mode=websocket;host=指向服务器的域名"
Code language: JavaScript (javascript)

如果path不是根目录,根据自己的实际情况修改,如path=/test

重启Shadowsocks,或关闭Shadowsocks后手动启动看一下日志是否正常。

安装Certbot

certbot可以用来申请免费SSL证书。官网有详细的安装步骤。对于Ubuntu18 + Apache2,只需如下命令:

snap install --classic certbot ln -s /snap/bin/certbot /usr/bin/certbot
Code language: Bash (bash)

Apache设置

首先需要开启Apache模块:

a2enmod ssl a2enmod proxy a2enmod proxy_wstunnel a2enmod proxy_http a2enmod rewrite a2enmod headers
Code language: Bash (bash)

新建一个虚拟主机:

nano /etc/apache2/site-available/gfw.conf
Code language: Bash (bash)

输入如下内容:

<VirtualHost *:80> ServerName 指向服务器的域名 ServerAdmin [email protected] DocumentRoot /var/www/gfw ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost>
Code language: Apache (apache)

保存并启用:

a2ensite
Code language: Bash (bash)

从列表中选择刚刚新建的主机,并重新加载apache使其生效:

systemctl reload apache2
Code language: Bash (bash)

通过Certbot获取证书:

certbot --apache
Code language: Bash (bash)

选择刚刚新建的主机,将会自动获取证书。再次提醒:域名必须指向当前服务器IP

完成后,修改虚拟主机配置文件:

nano /etc/apache2/site-available/gfw-le-ssl.conf
Code language: Bash (bash)

在DocumentRoot下面新加下面内容:

ProxyRequests off ProxyPass / ws://127.0.0.1:9000/ ProxyAddHeaders Off ProxyPreserveHost On RequestHeader set Host %{HTTP_HOST}s RequestHeader set X-Forwarded-For %{REMOTE_ADDR}s
Code language: Apache (apache)

其中9000为Shadowsocks使用的端口号,根据自己的实际情况自行修改。

如果shadowsocks中配置的path不是根目录,根据实际情况修改,如:

ProxyRequests off ProxyPass /test ws://127.0.0.1:9000/test ProxyAddHeaders Off ProxyPreserveHost On RequestHeader set Host %{HTTP_HOST}s RequestHeader set X-Forwarded-For %{REMOTE_ADDR}s
Code language: Apache (apache)

重新加载apache使其生效:

systemctl reload apache2
Code language: Bash (bash)

客户端配置

在Clash中该节点配置如下:

- name: "随意" type: ss server: 指向服务器的域名 port: 443 cipher: 加密方式 password: "密码" plugin: v2ray-plugin plugin-opts: mode: websocket tls: true skip-cert-verify: true host: 指向服务器的域名 path: "/或者自定义的path如/test" mux: true
Code language: JavaScript (javascript)

在其他客户端中,插件选择v2ray-plugin,插件选项为:

tls;host=指向服务器的域名

套Cloudflare

首先你得有一个Cloudflare账号。

在Cloudflare后台,找到Workers:

选择Manage Workers>Create a Worker,在新窗口的Script中输入下面代码:

addEventListener( "fetch", event => { let url = new URL(event.request.url); url.hostname = "指向服务器的域名"; url.protocol = "https"; let request = new Request(url, event.request); event.respondWith( fetch(request) ) } )
Code language: JavaScript (javascript)

点击左上角gfw2的地方可以自定义子域名。

选择Save and Deploy即可完成部署。

在客户端中,用左上角的域名替代原本的域名即可。

自选Cloudflare的IP(可选)

如果对套上Cloudflare后的速度不满意,可以通过自选Cloudflare的IP来加速。

下载此项目下的工具,直接运行其中的二进制文件即可进行测速,完成后在同目录下会生成结果文件result.csv,挑选其中最满意的IP,在本地hosts文件中新加一行:

IP Worker应用的域名
%d 博主赞过: