事情起因
早期来访过我网站的应该知道我网站是要带端口访问的,也就是你访问nekopara.uk
,会解析到cloudflare并且跳转到https://www.nekopara.uk:3939
。好巧不巧,隔壁友连的站长告诉我华为云给白嫖1000块!我十分吃惊,并且抱着试一试的心态,哎,你别说,真白嫖到了,然后干了个最低配的云服务器,用来转发请求。实现去掉端口访问。
准备工作:安装HAProxy
在此之前还有一个前置任务,就是在安全组放行443端口,此处不过多展开。
安装HAProxy在Debian系统中并不难,以下命令一键安装:
apt install haproxy
配置HAProxy
HAProxy的配置文件位于/etc/haproxy/haproxy.cfg
,可以使用nano
进行编辑:
nano /etc/haproxy/haproxy.cfg
什么?nano未找到,自己去装啊!
以下是我haproxy.cfg
配置文件的示例:
#---------------------------------------------------------------------
# 全局设定部分
#---------------------------------------------------------------------
global
defaults
log global
option dontlognull
option http-server-close
option redispatch
retries 3
timeout http-request 10s
timeout queue 1m
timeout connect 10s
timeout client 1m
timeout server 1m
timeout http-keep-alive 10s
timeout check 10s
maxconn 3000
#---------------------------------------------------------------------
# 定义DNS解析器
#---------------------------------------------------------------------
resolvers dns1
nameserver internal-dns 1.1.1.1:53
resolve_retries 3
timeout resolve 10s
timeout retry 10s
hold other 30s
hold refused 30s
hold nx 30s
hold timeout 30s
hold valid 10s
hold obsolete 30s
#---------------------------------------------------------------------
# 接管HTTP流量实现302跳转HTTPS
#---------------------------------------------------------------------
frontend http
bind :80 accept-proxy
mode http
redirect scheme https code 302 if { hdr(Host) -i www.nekopara.uk } !{ ssl_fc }
#---------------------------------------------------------------------
# 通过SNI Proxy对HTTPS流量实现四层转发
#---------------------------------------------------------------------
frontend https_proxy
mode tcp
bind :443
tcp-request inspect-delay 5s
tcp-request content accept if { req_ssl_hello_type 1 }
acl is_www.nekopara.uk req_ssl_sni -i www.nekopara.uk
use_backend www.nekopara.uk if is_www.nekopara.uk
backend www.nekopara.uk
mode tcp
server ddns-1 org.nekopara.uk:3939 resolvers dns1 resolve-prefer ipv4 send-proxy
保存文件,开启HAProxy:
systemctl enable --now haproxy
解析域名到服务器的IP
在域名控制台添加一个A记录
指向服务器的ip地址。然后你就会发现你网站无法访问了
别急,接下来要改一下源服务器的配置。
修改源服务器的Apache配置文件
打开配置文件,加上RemoteIPProxyProtocol On
这一参数。但是要注意,加上这个参数后,直接访问源服务器就会出错了。反正我就加在ServerName
ServerAlias
这两个参数后面。
重启apache:
systemctl restart httpd
然后就可以看到效果了。