服务器环境:CentOS7且已安装Nginx
安装HAProxy
yum install haproxy -y
配置HAProxy
mv /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.bak
vi /etc/haproxy/haproxy.cfg
#输入以下内容
global
log /dev/log local0
log /dev/log local1 notice
chroot /var/lib/haproxy
user haproxy
group haproxy
daemon
defaults
log global
mode tcp
option tcplog
option dontlognull
maxconn 2000
timeout connect 5000
timeout client 500000
timeout server 500000
frontend ssl
mode tcp
bind 0.0.0.0:443
tcp-request inspect-delay 3s
tcp-request content accept if { req.ssl_hello_type 1 }
acl www req_ssl_sni -i apad.pro
acl www req_ssl_sni -i sitename.com
use_backend nginx if www { req.ssl_hello_type 1 }
use_backend shadowsocks if !{ req.ssl_hello_type 1 } !{ req.len 0 }
backend nginx
mode tcp
server webserver 127.0.0.1:4431
backend shadowsocks
mode tcp
server socks 127.0.0.1:8443
其中8443为socks5使用的端口,将sitename.com更换为Nginx使用的域名
如果Nginx已经运行并正在使用443端口,应修改Nginx配置文件中的Server区域
server {
listen 80;
#listen 443 ssl http2;
listen 1443 ssl http2;
#省略其它参数#
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_redirect off;
set_real_ip_from 127.0.0.1;
real_ip_header proxy_protocol;
}
重启Nginx服务后启动HAProxy服务
systemctl restart nginx systemctl enable haproxy systemctl start haproxy
此时即可使socks5与Nginx共用443端口,唯一的不足socks5无法使用UDP协议,但不太影响一般的科学上网需求。最后别问我为什么要共用443端口 : (