在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前面!
有了一点调整,你可以让它缓存或负载平衡。