'Varnish' 标签

Nginx与Varnish下获取访客的真实IP地址

首先,nginx -V 查看是否有启动 “–with-http_realip_module” 模块,必须启用才行。

sudo vi /etc/varnish/default.vcl

sub vcl_recv 模块加入:


if (req.restarts == 0) {
                if (req.http.x-forwarded-for) {
                set req.http.X-Forwarded-For =
                        req.http.X-Forwarded-For + ", " + client.ip;
                } else {
                set req.http.X-Forwarded-For = client.ip;
                }
        }
sudo vi /etc/nginx/nginx.conf

http {}模块内加入:

set_real_ip_from   127.0.0.1;
real_ip_header      X-Forwarded-For;

Varnish 不应该是你的选择

发现使用 Varnish 会有个很糟糕的问题,就是新版中的Varnish总是会带来VCL的变化或者一些其它规则的变化,开发者似乎并没考虑旧版的存在。如果你升级到新版本,你必须重写VCL规则~而这不是个容易的过程。没有人愿意折腾!

特别是Varnish的社区或官方支持是很糟糕的,关于Varnish的实际应用相关资料也没有多少,Google上也搜不到多少有用的相关文章,官方论坛更是做看的。

Varnish 是走商业和开源2条路线,所以开源的免费版没有多少支持可能是理所当然。但是,我在它们提供商业服务的网站Varnish-software.com上看到一篇它们直接转载别的网站的关于适用于WordPress 的Varnish 4.x VCL的文章,里面有些Varnish 4.x VCL是错误的,它们也没有改正,直到现在。~这简直太扯了。就算是varnish-cache.org上的一些样例也是错误百出。

选择Varnish,需注意,小玩玩即可。

适合于Varnish 4的WordPress应用场景

花了点时间把原本基于Varnish 3的WordPress应用场景翻新到Varnish 4版本上来。因为VCL的语法规则有不少变化,有些VCl已经停用,并更改到新的VCL。具体的变化请看这个官方文档:Upgrading to Varnish 4

下面这个样例是我根据Varnish网站上提供的基于Varnish 3的一个WordPress真实应用场景VCL更新到适用于Varnish 4上。放到Github上,希望有人来参与继续完善。

适用于WordPress的Varnish实际应用场景

场景一,来源Varnish官方网站给的一个实际应用样例,不过它们给出的代码有2处错误。下面我给出的这个版本以经改正了原本的2处错误。


sub vcl_recv {
  if (req.http.Accept-Encoding) {
#revisit this list
    if (req.url ~ "\.(gif|jpg|jpeg|swf|flv|mp3|mp4|pdf|ico|png|gz|tgz|bz2)(\?.*|)$") {
      remove req.http.Accept-Encoding;
    } elsif (req.http.Accept-Encoding ~ "gzip") {
      set req.http.Accept-Encoding = "gzip";
    } elsif (req.http.Accept-Encoding ~ "deflate") {
      set req.http.Accept-Encoding = "deflate";
    } else {
      remove req.http.Accept-Encoding;
    }
  }
  if (req.url ~ "\.(gif|jpg|jpeg|swf|css|js|flv|mp3|mp4|pdf|ico|png)(\?.*|)$") {
    unset req.http.cookie;
    set req.url = regsub(req.url, "\?.*$", "");
  }
  if (req.url ~ "\?(utm_(campaign|medium|source|term)|adParams|client|cx|eid|fbid|feed|ref(id|src)?|v(er|iew))=") {
    set req.url = regsub(req.url, "\?.*$", "");
  }
  if (req.http.cookie) {
    if (req.http.cookie ~ "(wordpress_|wp-settings-)") {
      return(pass);
    } else {
      unset req.http.cookie;
    }
  }
}

sub vcl_fetch {
  if (req.url ~ "wp-(login|admin)" || req.url ~ "preview=true" || req.url ~ "xmlrpc.php") {
    return (hit_for_pass);
  }
  if ( (!(req.url ~ "(wp-(login|admin)|login)")) || (req.request == "GET") ) {
    unset beresp.http.set-cookie;
  }
  if (req.url ~ "\.(gif|jpg|jpeg|swf|css|js|flv|mp3|mp4|pdf|ico|png)(\?.*|)$") {
    set beresp.ttl = 365d;
  }
}

sub vcl_deliver {
# multi-server webfarm? set a variable here so you can check
# the headers to see which frontend served the request
#   set resp.http.X-Server = "server-01";
   if (obj.hits > 0) {
     set resp.http.X-Cache = "HIT";
   } else {
     set resp.http.X-Cache = "MISS";
   }
}

Ubuntu Server 14.04 安装或卸载 Varnish

在Ubuntu Server 14.04 LTS 安装Varnish,现在是4.0版,

  1. apt-get install apt-transport-https
  2. curl https://repo.varnish-cache.org/GPG-key.txt | apt-key add –
  3. echo “deb https://repo.varnish-cache.org/ubuntu/ precise varnish-4.0” >> /etc/apt/sources.list.d/varnish-cache.list
  4. apt-get update
  5. apt-get install varnish

在执行到apt-get update这一步如果提示sources无法读取,编辑并把“”里的源地址加#注释掉即可。

卸载 Varnish

  1. sudo apt-get remove varnish //删除 varnish package
  2. sudo apt-get remove –auto-remove varnish //删除相关的东西

如果也想删除配置文件(将无法通过重新安装包来恢复)
sudo apt-get purge varnish
或者
sudo apt-get purge –auto-remove varnish

最后别忘了重启服务器。

管理Varnish

varnishadm -S /etc/varnish/secret -T 127.0.0.1:6082 //登录并管理varnish
varnish>-V //查看版本
varnish> vcl.list //列出全部配置文件

Nginx Ubuntu Varnish WordPress – Amazon EC2

这里以Ubuntu 12.04 LTS为例,和Nginx,Varnish来搭建WordPress运行环境。

EC2的SSH登录名称是ubuntu,需要转到root状态下。

sudo -i

安装MySQL
apt-get install mysql-server mysql-client
过程中按提示设置root SQL password

安装Nginx
apt-get install nginx
/etc/init.d/nginx start
访问你实例的公共DNS URL,就会见到Welcome to nginx!’

配置防火墙
ufw allow ssh
ufw allow http
ufw enable
ufw status

安装PHP,通过PHP-FPM安装PHP和Mysql扩展
apt-get install php5-fpm php5-mysql