如何在 Rocky Linux 8 上使用 Nginx Web 服务器设置 Varnish SSL 终止如何在 Rocky Linux 8 上使用 Nginx Web 服务器设置 Varnish SSL 终止如何在 Rocky Linux 8 上使用 Nginx Web 服务器设置 Varnish SSL 终止如何在 Rocky Linux 8 上使用 Nginx Web 服务器设置 Varnish SSL 终止
  • 文章
  • 正则表达式
    • 工具
  • 登录
找到的结果: {phrase} (显示: {results_count} 共: {results_count_total})
显示: {results_count} 共: {results_count_total}

加载更多搜索结果...

搜索范围
模糊匹配
搜索标题
搜索内容
发表 admin at 2025年2月28日
类别
  • 未分类
标签

如何在 Rocky Linux 8 上使用 Nginx Web 服务器设置 Varnish SSL 终止

在此页

  1. 先决条件
  2. 安装 Nginx 网络服务器
  3. 使用 Certbot 生成 SSL
  4. 设置默认 Nginx 端口
  5. 使用 Nginx Web 服务器设置 SSL 终止
  6. 使用 Varnish 自动从 HTTP 到 HTTPS
  7. 验证 Varnish SSL 终止
  8. 结论

Varnish 缓存软件默认不支持 SSL/TLS。您需要额外的软件才能在 Varnish 上启用 SSL/TLS 支持。

SSL Termination 是一种在 Varnish 上启用 SSL/TLS 的方法。您可以使用 Hitch、Nginx 或 Apache 为 Varnish HTTP 加速器启用 SSL 终止。

SSL 终止软件将在 HTTPS 端口 443 上运行,并处理来自客户端的所有 HTTPS 请求。之后,所有的请求都会被转发到varnish缓存软件,再转发到源站后端服务器。

先决条件

在本文中,您将学习如何使用 Nginx Web 服务器设置 Varnish SSL Termination。

在开始之前,请确保满足以下要求:

  • 安装了 Varnish 的 Linux 服务器。
  • 根权限
  • 域名

对于这个例子,我们使用的是安装了 Varnish 的 Rocky Linux 服务器。我们将使用域名 example.io。

现在让我们开始吧。

安装 Nginx 网络服务器

如果您使用 Nginx 作为 Varnish 后端,请跳过这第一步。

在第一步中,您将在 Linux 系统上安装 Nginx。

1. 对于基于 Debian/Ubuntu 的发行版,执行下面的 apt 命令来安装 Nginx Web 服务器。

sudo apt install nginx -y

2. 对于CentOS/RockyLinux/AlmaLinux 操作系统,执行下面的DNF 命令安装Nginx Web 服务器。

sudo dnf install nginx -y

3. Nginx 安装完成后,使用以下命令启动并启用 Nginx Web 服务器。

sudo systemctl enable --now nginx

如果您遇到错误,请留下它。您将在下一步中配置 Nginx。

使用 Certbot 生成 SSL

在此步骤中,您将安装 cerbot 工具并从 Letsencrypt 为域 example.io 生成 SSL 证书。

1、首先在系统防火墙中添加HTTP和HTTPS端口。

对于 Debian/Ubuntu 系统,执行下面的 ufw 命令打开 HTTP 和 HTTPS 端口。

sudo ufw allow http
sudo ufw allow https
sudo ufw reload

对于 CentOS/RockyLinux/AlmaLinux 系统,执行下面的 firewall-cmd 命令。

sudo firewall-cmd --add-service=http --permanent
sudo firewall-cmd --add-service=https --permanent
sudo firewall-cmd --reload

2. 接下来,使用以下命令安装 certbot 工具。

使用下面的 apt 命令在 Debian/Ubuntu 系统上安装 certbot 工具。

sudo apt install certbot -y

使用下面的 DNF 命令在 CentOS/RockyLinux/AlmaLinux 系统上安装 certbot 工具。

sudo dnf install certbot -y

3. 在生成 SSL Letsencrypt 之前,停止在默认 HTTP 端口上运行的 Varnish 服务。

sudo systemctl stop varnish
sudo systemctl stop nginx

4. 现在执行下面的 certbot 命令来生成 SSL Letsencrypt。并确保更改域名和电子邮件地址。

sudo certbot certonly --agree-tos --email  --standalone --preferred-challenges http -d example.io

certbot 进程完成后,您的证书将在目录 /etc/letsencrypt/live/DOMAIN.COM/ 中可用。

证书 fullchain.pem 是您的 SSL 公钥,privkey.pem 是您的 SSL 私钥。

设置默认 Nginx 端口

如果您使用 Nginx 网络服务器作为 Varnish HTTP 加速器的后端,请跳过此步骤。

如果您使用另一个后端 Web 服务器,则必须为 Nginx 配置默认端口。

1. 使用 nano 编辑器编辑默认的 nginx 配置。

sudo nano /etc/nginx/nginx.conf

在默认的 server { ... } 部分,将选项 listen 更改为端口 8081,如下所示。

....

    server {
        listen       8081 default_server;
        listen       [::]:8081 default_server;

        ...trim...
    }

....

保存配置并退出。

2. 现在重新启动 Nginx 服务以应用新配置。

sudo systemctl restart nginx

默认的 Nginx 服务现在在 8081 端口上运行。

使用 Nginx Web 服务器设置 SSL 终止

要使用 Nginx 设置 SSL 终止,您需要创建一个将在 HTTPS 端口 443 上运行的新虚拟主机/服务器块配置。

此虚拟主机处理来自客户端的所有 HTTPS 请求,并将所有请求转发到 Varnish HTTP 加速器。

1. 使用以下命令创建新的 Nginx 服务器块配置。

如果您使用的是基于 Debian/Ubuntu 的系统,请创建一个新配置 /etc/nginx/sites-available/example.io。

sudo nano /etc/nginx/sites-available/example.io

对于CentOS/RockyLinux/AlmaLinux系统,新建配置/etc/nginx/conf.d/example.conf。

sudo nano /etc/nginx/conf.d/example.conf

复制并粘贴以下配置。并确保更改 SSL 证书的域名和路径。

server {

    listen 443 ssl http2;
    server_name example.io;
    ssl_certificate           /etc/letsencrypt/live/exmaple.io/fullchain.pem;
    ssl_certificate_key       /etc/letsencrypt/live/example.io/privkey.pem;

    ssl_session_cache  builtin:1000  shared:SSL:10m;
    ssl_protocols TLSv1.2;
    ssl_ciphers HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4;
    ssl_prefer_server_ciphers on;

    access_log            /var/log/nginx/example.io_access.log;
    error_log             /var/log/nginx/example.io_error.log;

        location / {
            proxy_pass http://127.0.0.1:80;
            proxy_set_header X-Real-IP  $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto https;
            proxy_set_header X-Forwarded-Port 443;
            proxy_set_header Host $host;
        }

  }

保存配置并退出。

2. 接下来,对于 Debian/Ubuntu 系统,使用以下命令激活服务器块配置。

sudo ln -s /etc/nginx/sites-available/example.io /etc/nginx/sites-enabled/

3. 现在执行以下命令来验证 Nginx 配置,然后重启 Nginx 服务以应用新配置。

sudo nginx -t
sudo systemctl restart nginx

4. 现在使用以下命令验证 Nginx 服务和 HTTPS 端口 443。

使用下面的 systemctl 命令验证 Nginx 服务状态。

sudo systemctl status nginx

确保 Nginx 服务处于活动状态并正在运行。

使用下面的 ss 命令验证您系统上的 HTTPS 端口 443。

ss -antpl | grep 443

确保 HTTPS 端口 443 处于 LISTEN 状态。

LISTEN 0      128          0.0.0.0:443        0.0.0.0:*    users:(("nginx",pid=4787,fd=8),("nginx",pid=4786,fd=8),("nginx",pid=4785,fd=8))

现在您已经完成了使用 Nginx 网络服务器终止 SSL 的基本配置。

使用 Varnish 自动从 HTTP 到 HTTPS

在此步骤中,您将设置 Varnish 以自动将 HTTP 重定向到 HTTPS 协议。这可以通过在配置 default.vcl 上创建新的 Varnish 规则来实现。

1. 使用 nano 编辑器编辑清漆配置 /etc/varnish/default.vcl。

nano /etc/varnish/default.vcl

将以下配置复制并粘贴到选项 sub vcl_recv { ... } 中。并确保使用您的域更改域名。

sub vcl_recv {

    ...trim...

    if (client.ip != "127.0.0.1" && req.http.host ~ "example.io") {
       set req.http.x-redir = "https://example.io" + req.url;
       return(synth(850, ""));
    }

    ...trim...
{

接下来,将以下配置添加到该行的底部。这将确定重定向到 HTTP 301 的方法。

sub vcl_synth {
    if (resp.status == 850) {
       set resp.http.Location = req.http.x-redir;
       set resp.status = 301;
       return (deliver);
    }
}

保存清漆配置并退出。

2. 接下来,使用以下命令重新启动 Varnish 服务以应用新配置。

sudo systemctl restart varnish

您已经使用 Varnish 规则完成了自动 HTTP 和 HTTPS 重定向。

验证清漆 SSL 终止

要测试 Varnish SSL 终止,您可以使用网络浏览器或使用 curl 命令。

1. 打开您的网络浏览器并在地址栏中输入您的域名。对于此示例,我们使用的是 Firefox Web 浏览器。

http://example.io

您将被自动重定向到 HTTPS 协议。

右键单击网页,然后单击菜单检查。

移至网络 选项卡并单击重新加载 按钮。

单击根 URL 请求,您将看到类似如下的输出。

对 http://example.io 的请求会自动重定向到 HTTPS 协议 https://example.io,状态代码为 301。

Varnish 服务器处理所有客户端请求。

2. 要使用 curl 验证 varnish SSL 终止,请使用以下命令。

curl -I http://example.io

您将看到详细的 HTTP 标头,如下所示。

请求被重定向到 HTTPS 协议 https://example.io,HTTP 状态代码为 301。清漆服务器处理来自客户端的所有请求。

结论

恭喜!您已经学习了使用 Nginx Web 服务器配置 Varnish SSL Termination。

此外,您还学习了用于生成免费 SSL Letsencrypt 的基本 certbot 命令和用于自动从 HTTP 重定向到 HTTPS 的基本 varnish 规则。

©2015-2025 艾丽卡 support@alaica.com