shadowsocks-libev + privoxy 实现的 http 代理镜像

Introduction

shadowsocks-libev配合privoxy实现的http代理,仅暴露出要使用的http端口给宿主机及内网中的其他设备使用,如:container1使用专线代理,container2使用免费代理
配合nginx可以实现负载均衡(推荐使用nginx-alpine镜像,官方已集成四层转发需要的stream相关模块)

Usage

1
docker run -d --name cnix_free_lb --restart=always -p 8119:8118 -v "/etc/shadowsocks-libev/free_lb.json:/etc/shadowsocks-libev/config.json" qwinwin/ss_privoxy

其中:
-p 8119:8118 将容器中privoxy的8118默认端口映射到宿主机的8119端口(8119可自定义)
再将自己的shadowsocks配置文件挂载到容器中即可,如此便可方便地用不同端口区分不同的节点线路

本人使用场景:

有一台7*24小时运行的x86小主机,给本机及内网中的其他设备提供服务

  • 8118:日常使用,转发专线节点,快速稳定但流量贵
  • 8119:大文件传输使用,速度较慢,但节点不计流量相当于免费

8119端口为例,因为节点偶尔会失联,又不想手动去改,所以用nginx做了负载均衡

  • free_lb.json中的server地址172.17.0.1为docker分配的宿主机ip,一般都是这个,可以通过 ip a 命令查看docker0网卡的ip地址进行确认,50281nginx监听的节点。当然,如果不用nginx做负载均衡,直接按你的节点配置来即可
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    $ cat /etc/shadowsocks-libev/free_lb.json    
    {
    "server":"172.17.0.1",
    "server_port":50281,
    "local_address":"0.0.0.0",
    "local_port":1080,
    "timeout": 300,
    "workers": 1,
    "password": "pwd",
    "method": "rc4-md5",
    "fast_open": true,
    "no_delay": true,
    "mode": "tcp_and_udp",
    "plugin": ""
    }
  • ss_free.conf是nginx tcp转发的配置文件,监听本地50281,接收来自shadowsocks的请求并通过upstream模块返回可用节点,如此负载均衡、故障转移的需求得以实现
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $ cat /etc/nginx/stream.conf.d/ss_free.conf
    upstream free {
    server 1.free.xyz:5555;
    server 2.free.xyz:5555;
    server 3.free.xyz:5555;
    }
    server {
    listen 50281;
    proxy_pass free;
    proxy_next_upstream_timeout 1s;
    }
    DockerHub
    GitHub
Author: kwin
Link: https://blog.kwin.win/2021/03/08/docker-ss-with-privoxy/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.