ubuntu - 设置 Varnish Apache2 HTTP & HTTPS Ubuntu 16.04

标签 ubuntu ssl https varnish

我有 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.confListen 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/

相关文章:

bash - 使用 for 循环在 bash 中启动多个进程

linux - LightDM 添加窗口管理器(Openbox)

ubuntu - 每当我使用 wget 时出现证书错误消息

java - 使用 Tomcat 和 Android 进行相互认证

ubuntu - assembly 模数

ssl - CURL:(35)Ubuntu 服务器的 SSL 连接错误

android - 如何代理对 api.twitter.com 的请求,包括 SSL 证书?

PHP 在连接时接收 SSL 证书参数

apache - 将 GoDaddy 签名的 SSL 证书应用于子域

ssl - 如何从在 webview 中加载的 html 中使用的 javascript 发送 post webrequest - titanium mobile?