思路来自:
新 V2Ray 白话文指南:TCP + TLS + Web
上文已经比较详细,本文作为回顾总结学习交流之用,相当于上文的补充和我个人遇到的问题的分享,限于个人水平,难免存在错讹之处,万望读者不吝指正。
另外,作者撰写此文仅具学习交流技术之目的,请勿将本文所说明之技术用于任何可能违反法律的方面。
基本思路
简图如下:
主要步骤:
- 以Nginx为服务器,搭建起一个网站;
- 为这个网站申请证书并整合成Haproxy适用的格式;
- 安装V2Ray并修改其配置文件;
- 安装Haproxy并修改其配置文件;
- 修改Nginx虚拟主机的配置文件;
- 一切就绪,重启Nginx、V2Ray、Haproxy服务;
Nginx 建网站
这里的网站静态动态皆可,可能只是因为原文中这个网站只是充门面而已所以说是静态网站。而对于我来说这个网站还要作为我的个人博客,所以要复杂一些。可以参考本站另一篇文章。
申请证书
推荐使用acme.sh
自动申请证书。
得到证书后需要将证书转换为haproxy需要的格式。
安装V2Ray
直接使用官方脚本即可,详见原文。
注意这里的V2Ray使用的是40001端口。
安装Haproxy并修改配置
这里一定注意需要Haproxy 1.8.15 及以上版本,否则无法支持TLS1.3。
而Ubuntu软件源里的Haproxy版本过于老旧,只好自行编译源码,可参考这里。
配置方法详见原文。
再次修改Nginx配置文件
注意将80端口重定向到443端口;
另外网站需要监听一个除了443和80之外的端口,原文例为8080。
一切就绪,重启服务
重启服务(xxx为服务的名字)
systemctl xxx restart
(其他操作类比以上,将restart换成别的就好)
其他
注意系统的防火墙。防火墙应当放行443和80端口(已重定向至443)。同时不要开放上文中的40001端口和8080端口(分别对应V2Ray和Nginx),这两个应当由Haproxy进行转发。
这里强推Ubuntu,因为自带的ufw防火墙比
iptables
、firewalld
要简单好多。每隔90天证书会失效,虽然
acme.sh
会自动为你更新,但生成Haproxy可用证书的那一步还是需要你亲自完成。Update 20.11.15: 这个地方可以利用一下
acme.sh
的reloadcmd
参数,把拼接操作写进里面:acme.sh --installcert -d example.com \ --key-file /etc/ssl/private/example.com.key\ --cert-file /etc/ssl/private/example.com.cert.cer \ --reloadcmd "cat /etc/ssl/private/example.com.cert.cer /etc/ssl/private/example.com.key > /etc/ssl/private/example.com.pem && service haproxy restart"
通过这种方式安装一次证书之后,
acme.sh
就会记住这些设置用来自动更新。不出意外的话以后就不需要人为干预证书的更新了。- 如果启动haproxy时出现
Starting frontend GLOBAL: cannot bind UNIX socket [/run/haproxy/admin.sock]
错误,请mkdir -p /var/run/haproxy/
原因参考这里
小白一直没看懂80重定向443这个怎么实现
这个可以去网上搜索一下 Nginx Rewrite 80 to 443
写得好!