在Apache的前面放置varnish在Ubuntu / Debian

在Ubuntu / Debian上将Varnish放在Apache的前面

Varnish是一个开源的“web加速器”,您可以使用它来加速您的网站。

它可以缓存某些静态元素,如图像或javascript,但您也可以将其用于其他目的,如负载平衡或一些额外的安全性。

在本教程中,我们将重点介绍后者。
在这种模式下,Varnish将阻止不完整的HTTP请求到达您的Apache网络服务器。

本教程基于Ubuntu,但也可能在Debian上运行。

首先,确保您正在运行Apache2并配置它。

安装Varnish

这是很容易的,因为它是在Ubuntu存储库。 但是,您可能希望使用Varnish存储库来确保您具有更新版本。 要添加一个,请执行以下操作:

sudo curl http://repo.varnish-cache.org/debian/GPG-key.txt | apt-key add -
sudo echo "deb http://repo.varnish-cache.org/debian/ $(lsb_release -s -c) varnish-2.1" >> /etc/apt/sources.list

更新APT并安装Varnish:

sudo apt-get update
sudo apt-get install varnish

好的,现在你有Varnish,但是我们仍然需要配置它。

更改Varnish设置

首先,我们必须更改默认端口。 编辑/ etc / default / varnish

vim /etc/default/varnish

向下滚动一下,直到找到以“ DAEMON_OPTS ”开头的未注释行。
- 将*:6081更改为*:80 ,以便在默认HTTP端口上进行监听。
- 编辑default.vcl到别的,我拿了“mysite.vcl”。

保存文件。

编辑您在上一个文件中提到的VCL文件。 在我的情况下,我将编辑/etc/varnish/mysite.vcl 。 粘贴以下内容:

## Redirect requests to Apache, running on port 8000 on localhost
backend apache {
        .host = "127.0.0.1";
        .port = "8000";
}
## Fetch
sub vcl_fetch {
		## Remove the X-Forwarded-For header if it exists.
        remove req.http.X-Forwarded-For;
		
		## insert the client IP address as X-Forwarded-For. This is the normal IP address of the user.
        set    req.http.X-Forwarded-For = req.http.rlnclientipaddr;
		## Added security, the "w00tw00t" attacks are pretty annoying so lets block it before it reaches our webserver
        if (req.url ~ "^/w00tw00t") {
                error 403 "Not permitted";
        }
		## Deliver the content
        return(deliver);
}

## Deliver
sub vcl_deliver {
		## We'll be hiding some headers added by Varnish. We want to make sure people are not seeing we're using Varnish.
              ## Since we're not caching (yet), why bother telling people we use it?
        remove resp.http.X-Varnish;
        remove resp.http.Via;
        remove resp.http.Age;
		
		## We'd like to hide the X-Powered-By headers. Nobody has to know we can run PHP and have version xyz of it.
        remove resp.http.X-Powered-By;
}

保存文件。 好的,那是Varnish的一部分。 不要启动它

更改Apache设置

好的,所以我们必须让Apache2在localhost上听。 为此,需要进行一些小的更改。

vim /etc/apache2/ports.conf

更改:

NameVirtualHost *:80
Listen 80

至:

NameVirtualHost *:8000
Listen 127.0.0.1:8000

Apache将监听该端口。 你也必须编辑你的vhosts。 打开您的虚拟主机并更换

<VirtualHost *:80>

<VirtualHost *:8000>

到现在为止还挺好。 我们现在必须安装一个额外的Apache模块,以确保用户的IP地址正确。 由于Varnish基本上与Apache2通话,您将看到127.0.0.1作为访问者IP。

apt-get install libapache2-mod-rpaf

RPAF(反向代理添加转发)模块将确保由Varnish设置的X-Forwarded-For设置中的IP设置为127.0.0.1的IP。

重新启动守护进程

重新启动Apache:

/etc/init.d/apache2 restart

通过执行以下步骤检查是否绑定到正确的IP /端口:

netstat -lp | grep apache2

如果你看到:

tcp        0      0 localhost:8000          *:*                     LISTEN      4586/apache2

这是对的。 否则你犯了一个错误。 好的,所以现在我们必须重新启动Varnish让它在80端口听。

/etc/init.d/varnish restart

我们再次通过执行:

netstat -lp | grep varnish

结果将是:

tcp        0      0 *:www                   *:*                     LISTEN      4498/varnishd
tcp6       0      0 [::]:www                [::]:*                  LISTEN      4498/varnishd

(是的,Varnish也听任何IPv6地址)。

所以现在我们把Varnish放在Apache2的前面。 我们可以通过简单的访问来测试网站是否仍然可以工作。 你会看到这个网站,就像没有发生任何事情一样。 您可以通过关闭apache来进一步测试。 然后您将看到一个Varnish错误页面。

奖励功能

那么你可能想将HTTP服务器名称从“Apache”更改为别的东西。 这可以通过编辑您的VCL文件,位于/ etc / varnish中 。 后:

sub vcl_fetch {

加:

## Remove the http.Server header
unset obj.http.Server;
## Change the http.Server header to something else
set obj.http.Server = "Incognito";

显然你可以让它看起来像你想要的。 例如Yourdomain.com。 请注意,此服务器上的所有域将使用相同的服务器名称。

那就是这一切。 你现在有一个反向代理在您的Apache前面!
有了一点调整,你可以让它缓存或负载平衡。

赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏