在 CentOS 7 上安装 Apache HTTP 服务器
为标准 CentOS 7 存储库构建 yum 缓存。
[root@varnish-cache-01 ~]# yum makecache fast
更新 CentOS 7 服务器包。
[root@varnish-cache-01 ~]# yum update
使用 yum 命令安装 Apache HTTP 服务器。
[root@varnish-cache-01 ~]# yum install -y httpd
启动并启用 Apache Web 服务。
[root@varnish-cache-01 ~]# systemctl enable --now httpd.service Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.
在 CentOS 7 防火墙中允许 HTTP 服务。
[root@varnish-cache-01 ~]# firewall-cmd --permanent --add-service=http success [root@varnish-cache-01 ~]# firewall-cmd --reload success
Apache HTTP 服务器已成功安装,并且正在为默认测试页面提供服务。
使用浏览器打开 http://varnish-cache-01.onitroad.com。
在 CentOS 7 上安装 Varnish 缓存
Varnish Cache 软件在 EPEL(企业 Linux 的另外软件包)yum 存储库中可用。
因此,首先我们必须按如下方式启用 EPEL yum 存储库。
[root@varnish-cache-01 ~]# yum install -y epel-release
为 EPEL yum 存储库构建缓存。
[root@varnish-cache-01 ~]# yum makecache
现在,我们可以使用 yum 命令安装 Varnish Cache 软件。
[root@varnish-cache-01 ~]# yum install -y varnish
我们已经安装了 EPEL yum 存储库中可用的 Varnish Cache 的默认版本。
我们还可以从官方下载页面下载并安装最新版本的 Varnish Cache。
在 CentOS 7 上将 Varnish 缓存配置为负载均衡器
在配置 Varnish Cache 之前,我们需要释放 Apache HTTP 服务器当前使用的端口 80。
控制服务端口 80 的指令在 /etc/httpd/conf/httpd.conf 文件中定义。
我们可以使用 sed 命令更改它。
[root@varnish-cache-01 ~]# sed -i "s/Listen 80/Listen 8080/" /etc/httpd/conf/httpd.conf
重新启动 Apache 服务以使更改生效。
[root@varnish-cache-01 ~]# systemctl restart httpd.service
现在,端口 80 可用,我们可以将其用于 Vanish Cache 服务。
编辑Varnish缓存配置文件。
[root@varnish-cache-01 ~]# vi /etc/varnish/varnish.params
其中找到并设置以下指令。
VARNISH_LISTEN_PORT=80 #Default Port 6081
我们已将 Varnish Cache 默认端口 6081 更改为 80。
是时候为 Varnish Cache 服务器配置后端了。
这些设置位于 /etc/varnish/default.vcl 文件中。
我们可以很容易地用我们的自定义配置替换这个文件。
使用 mv 命令重命名现有的 default.vcl 文件。
[root@varnish-cache-01 ~]# mv /etc/varnish/default.vcl /etc/varnish/default.vcl.org
创建自定义后端配置文件。
[root@varnish-cache-01 ~]# vi /etc/varnish/default.vcl
并添加以下代码行。
vcl 4.0; import directors; # Load the directors backend vhost1 { .host = "192.168.1.213"; .port = "8081"; .probe = { .url = "/"; .timeout = 1s; .interval = 5s; .window = 5; .threshold = 3; } } backend vhost2 { .host = "192.168.1.213"; .port = "8082"; .probe = { .url = "/"; .timeout = 1s; .interval = 5s; .window = 5; .threshold = 3; } } sub vcl_init { new lb = directors.round_robin(); # Creating a Load Balancer lb.add_backend(vhost1); # Add Virtual Host 1 lb.add_backend(vhost2); # Add Virtual Host 2 } sub vcl_recv { # send all traffic to the lb director: set req.backend_hint = lb.backend(); }
启用并启动 Varnish Cache 服务。
[root@varnish-cache-01 ~]# systemctl enable --now varnish.service Created symlink from /etc/systemd/system/multi-user.target.wants/varnish.service to /usr/lib/systemd/system/varnish.service.
启用并启动 Varnish Cache 日志记录服务。
[root@varnish-cache-01 ~]# systemctl enable --now varnishlog.service Created symlink from /etc/systemd/system/multi-user.target.wants/varnishlog.service to /usr/lib/systemd/system/varnishlog.service.
使用以下命令验证后端列表。
[root@varnish-cache-01 ~]# varnishadm backend.list Backend name Refs Admin Probe vhost1(192.168.1.213,,8081) 1 probe Healthy 5/5 vhost2(192.168.1.213,,8082) 1 probe Healthy 5/5
检查我们网站的响应标头。
[root@varnish-cache-01 ~]# curl -I http://varnish-cache-01.onitroad.com HTTP/1.1 200 OK Date: Sun, 13 Oct 2019 16:24:07 GMT Server: Apache/2.4.6 (CentOS) Last-Modified: Sun, 13 Oct 2019 09:35:58 GMT ETag: "7d-594c77a7e0839" Content-Length: 125 Content-Type: text/html; charset=UTF-8 X-Varnish: 32770 Age: 0 Via: 1.1 varnish-v4 Connection: keep-alive
在客户端浏览器中打开 URL http://varnish-cache-01.onitroad.com。
Varnish Cache 负载均衡器以循环方式将用户请求重定向到虚拟主机 1 和虚拟主机 2.
我们已成功将 Varnish Cache 配置为 CentOS 7 上的负载均衡器。
Varnish Cache 是一种 HTTP 加速器,专为内容繁重的动态网站和 API 设计。
Varnish Cache 通常安装在同一台 Web 服务器上,其中 Varnish Cache 充当托管网站的前端和加速器。
Varnish 缓存支持多个后端主机,因此我们也可以使用 Varnish Cache 作为反向代理来实现一组 Web 服务器的负载平衡。
在本文中,我们将在 CentOS 7 上安装和配置 Varnish Cache 作为负载均衡器。
在 CentOS 7 上配置 Apache 虚拟主机
我们在这里配置了两个虚拟主机,它们将在两个不同的端口上运行。
为虚拟主机创建文档根目录。
[root@varnish-cache-01 ~]# mkdir /var/www/html/{vhost1,vhost2}
为 Virtual Host 1 创建默认索引页面。
[root@varnish-cache-01 ~]# cat > /var/www/html/vhost1/index.html << EOF > <html> > <head><title>Virtual Host1</title></head> > <body><h1>This is the default page of Virtual Host 1...</h1></body> > </html> > EOF
同样,为 Virtual Host 2 创建默认索引页面。
[root@varnish-cache-01 ~]# cat > /var/www/html/vhost2/index.html << EOF > <html> > <head><title>Virtual Host2</title></head> > <body><h1>This is the default page of Virtual Host 2...</h1></body> > </html> > EOF
为 Virtual Host1 创建配置文件。
[root@varnish-cache-01 ~]# vi /etc/httpd/conf.d/vhost1.conf
其中添加以下指令。
Listen 8081 <VirtualHost *:8081> DocumentRoot "/var/www/html/vhost1" ServerName vhost1.onitroad.com </VirtualHost>
同样,为 Virtual Host2 创建配置文件。
[root@varnish-cache-01 ~]# vi /etc/httpd/conf.d/vhost2.conf
其中添加以下指令。
Listen 8082 <VirtualHost *:8082> DocumentRoot "/var/www/html/vhost2" ServerName vhost2.onitroad.com </VirtualHost>
检查 Apache 配置是否存在语法错误。
[root@varnish-cache-01 ~]# httpd -t Syntax OK
由于我们在非默认端口上运行 Apache 网站,因此,我们必须将这些端口添加到 SELinux 端口标签中。
检查这些端口是否已经添加到 SELinux 中。
[root@varnish-cache-01 ~]# semanage port -l | grep ^http_port_t http_port_t tcp 80, 81, 443, 488, 8008, 8009, 8443, 9000
添加端口 8081 和 8082 以键入 http_port_t SELinux 上下文。
[root@varnish-cache-01 ~]# semanage port -m -t http_port_t -p tcp 8081 [root@varnish-cache-01 ~]# semanage port -m -t http_port_t -p tcp 8082
验证是否在 SELinux 端口标签中添加了这些端口。
[root@varnish-cache-01 ~]# semanage port -l | grep ^http_port_t http_port_t tcp 8082, 8081, 80, 81, 443, 488, 8008, 8009, 8443, 9000
现在,我们可以安全地加载我们的 Apache 配置。
[root@varnish-cache-01 ~]# systemctl reload httpd.service
在 CentOS 7 防火墙中允许 8081/tcp 和 8082/tcp 服务端口。
[root@varnish-cache-01 ~]# firewall-cmd --permanent --add-port={8081,8082}/tcp success [root@varnish-cache-01 ~]# firewall-cmd --reload success
在客户端浏览器中 分别打开:
http://varnish-cache-01.onitroad.com:8081/。
http://varnish-cache-01.onitroad.com:8082/。
我们的两个 Apache 虚拟主机都已成功配置。