我有 Apache2,在 HTTPS(443,让我们加密)和 HTTP(80)上有几个站点,Ubuntu 16.04 上的多个 CMS,CPUx16,mem=48G。其中一个 HTTPS (Wordpress) 重载 - 一个非营利性网站,显示带有照片/视频的孤儿文件并接收捐款(每天最多 10k 访问者)。如何设置 Varnish 以缓存照片/视频请求以减少磁盘负载?
这里 Apache2 ports.conf
:
Listen 80
<IfModule ssl_module>
Listen 443
</IfModule>
<IfModule mod_gnutls.c>
Listen 443
</IfModule>
非常感谢您提供详细的答案。
最佳答案
Apache 端口配置
调整ports.conf
转Listen 80
进入 Listen 8080
.
在您的虚拟主机中,您必须打开 <VirtualHost *:80>
进入 <VirtualHost *:8080>
也是。
然后你运行 sudo systemctl restart apache2
以确保这些更改生效。
Varnish 设置
请运行sudo systemctl edit --full varnish
编辑 Varnish 的运行时设置。
请确保 Varnish 在端口 80 上运行常规 HTTP 和端口 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);
}
}
请在 vcl 4.0;
之后直接包含此文件在您的常规 /etc/varnish/default.vcl
.这是一个例子: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 准备 Hitch请创建
/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
启用搭便车。LetsEncrypt 更新也可以使用这个二进制文件来完成。更新时,请确保将 Hitch 作为更新后 Hook 重新加载:
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"
I use
yourdomain.com
as the domain in my examples. Please replace it with the actual value.
关于ubuntu - 设置 Varnish Apache2 HTTP & HTTPS Ubuntu 16.04,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63146804/