Apache 端口配置
调整ports.conf,将Listen 80变成Listen 8080。
在您的 vhosts 中,您还必须将 <VirtualHost *:80> 转换为 <VirtualHost *:8080>。
然后运行sudo systemctl restart apache2 以确保这些更改生效。
清漆设置
请运行sudo systemctl edit --full varnish 编辑 Varnish 的运行时设置。
请确保 Varnish 在 port 80 上运行常规 HTTP,port 8443 上运行PROXY protocol。
ExecStart=/usr/sbin/varnishd -a :80 -a :8443,PROXY -f /etc/varnish/default.vcl -s malloc,20G
VCL 设置
请创建/etc/varnish/letsencrypt.vcl并添加以下代码:
vcl 4.0;
backend certbot {
.host = "127.0.0.1";
.port = "8081";
}
sub vcl_recv {
if (req.url ~ "^/\.well-known/acme-challenge/") {
set req.backend_hint = certbot;
return(pipe);
}
}
sub vcl_pipe {
if (req.backend_hint == certbot) {
set req.http.Connection = "close";
return(pipe);
}
}
请将此文件直接包含在您的常规/etc/varnish/default.vcl 中的vcl 4.0; 之后。这是一个例子:
vcl 4.0;
include "/etc/varnish/letsencrypt.vcl";
backend default {
.host = "127.0.0.1";
.port = "8080";
}
如您所见,default.vcl 中的后端指向 8080 端口,即 Apache。
请重新启动 Varnish 以确保这些 VCL 设置处于活动状态。
TLS 终止问题
Hitch 是 Varnish Software 开发的 TLS 代理。它功能强大、轻量级且可配置。
请运行以下命令进行安装:
sudo apt-get install -y hitch
sudo systemctl enable hitch
然后创建/etc/hitch/hitch.conf 并添加以下内容:
frontend = "[*]:443"
backend = "[localhost]:8443"
write-proxy-v2 = on
pem-file = "/etc/letsencrypt/live/yourdomain.com/hitch-bundle.pem"
ciphers = "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384"
tls = on
ssl = off
prefer-server-ciphers = false
为 LetsEncrypt 准备挂钩
请创建/usr/local/bin/hitch-deploy-hook,并在其中放入以下内容:
#!/bin/bash
# Full path to pre-generated Diffie Hellman Parameters file
dhparams=/etc/hitch/dhparams.pem
if [[ "${RENEWED_LINEAGE}" == "" ]]; then
echo "Error: missing RENEWED_LINEAGE env variable." >&2
exit 1
fi
umask 077
cat ${RENEWED_LINEAGE}/privkey.pem \
${RENEWED_LINEAGE}/fullchain.pem \
${dhparams} > ${RENEWED_LINEAGE}/hitch-bundle.pem
然后运行以下命令:
sudo chmod a+x /usr/local/bin/hitch-deploy-hook
openssl dhparam 2048 | sudo tee /etc/hitch/dhparams.pem
运行 Cerbot
通过运行以下命令确保 LetsEncrypt cerbot 已安装:
sudo apt-get install -y certbot
然后运行以下命令安装证书:
sudo certbot certonly --standalone --preferred-challenges http \
--http-01-port 8081 -d yourdomain.com \
--deploy-hook="/usr/local/bin/hitch-deploy-hook"
验证后,证书将在/etc/letsencrypt/live/yourdomain.com/hitch-bundle.pem 提供,Hitch 将使用该证书。
请运行 sudo systemctl restart hitch 以启用 Hitch。
LetsEncrypt 续订也可以使用此二进制文件完成。更新时,请确保将 Hitch 重新加载为 更新后挂钩:
sudo certbot certonly --standalone --preferred-challenges http \
--http-01-port 8081 -d yourdomain.com \
--deploy-hook="/usr/local/bin/hitch-deploy-hook" \
--post-hook="systemctl reload hitch"
我在示例中使用yourdomain.com 作为域。请用实际值替换。