清漆4基本认证

时间:2015-01-27 04:29:46

标签: varnish

我必须缓存多个后端服务器,我从Nginx切换到Varnish,最后发现2个服务器需要运行HTTP基本身份验证。 我试试这个链接http://blog.tenya.me/blog/2011/12/14/varnish-http-authentication它对我不起作用(他们运行了Varnish 3) 有没有一种简单的方法在Varnish 4中配置基本身份验证?

4 个答案:

答案 0 :(得分:7)

您可以使用VMOD basicauth

安装Varnish VMOD

首先你需要安装它。从the Git repo for basicauth下载源代码。提取到您的homedir,例如〜/ VMOD-的BasicAuth /

您还需要使用Varnish源来构建VMOD。

在Debian / Ubuntu类型

apt-get source varnish

这会将来源复制到您的密码。

然后执行此操作以安装它。请注意,您需要根据您的设置和清漆版本

更改路径
cd ~/vmod-basicauth
./configure VARNISHSRC=$HOME/varnish-4.0.2
make 
sudo make install
sudo make check

<强>更新 似乎已经从Ubuntu和Debian软件包中删除了源代码(很可能是偶然的)。

直接从Git (v4.0.2)

下载来源

制作清漆

你必须&#34;制作&#34;下载的来源

cd ~
wget https://github.com/varnish/Varnish-Cache/archive/varnish-4.0.2.zip
unzip varnish-4.0.2.zip
cd Varnish-Cache-varnish-4.0.2
sudo ./autogen.sh
sudo ./configure --prefix=/usr
sudo make

请注意,您不必安装源代码,因此不要&#34; make-install&#34; ,因为这可能会破坏您当前的安装。< / p>

构建&amp;安装VMOD

cd ~
./configure VARNISHSRC=$HOME/Varnish-Cache-varnish-4.0.2
make 
sudo make install
sudo make check

如果无法自动检测VMOD安装目录,则可能还需要指定它。如果./configure失败,请尝试此

./configure VARNISHSRC=$HOME/Varnish-Cache-varnish-4.0.2 VMODDIR=/usr/lib/varnish/vmods/

某些构建依赖项

我经常需要很多不同的构建依赖项,因此我经常在设置新的Varnish服务器时安装它们。

sudo apt-get install git-core zlib1g-dev automake build-essential libtool libssl-dev libreadline-dev libyaml-dev libsqlite3-dev ncurses-dev sqlite3 libxml2-dev libxslt1-dev libpcre3-dev libcurl4-openssl-dev python-docutils python-software-properties libvarnishapi-dev

配置Varnish以使用VMOD

它使用.htpasswd文件进行身份验证,而不是将密码直接存储在VCL中。

确保更改&#34; /var/www/.htpasswd"到你的htpasswd文件的路径。

#default.vcl
import basicauth;

sub vcl_recv {
    if (!basicauth.match("/var/www/.htpasswd",  req.http.Authorization)) {
        return(synth(401, "Authentication required"));
    }
}

#Prompt the user for a password
sub vcl_synth {
    if (resp.status == 401) {
        set resp.http.WWW-Authenticate = "Basic";
    }
}

答案 1 :(得分:4)

这也有效:

sub vcl_recv {
  if (! req.http.Authorization ~ "Basic Zm9vOmJhcg==") {
    return(synth(401, "Authentication required"));
  }
  unset req.http.Authorization
}

sub vcl_synth {
  if (resp.status == 401) {
    set resp.status = 401;
    set resp.http.WWW-Authenticate = "Basic";
    return(deliver);
  }
}

src:http://blog.tenya.me/blog/2011/12/14/varnish-http-authentication/#comment-2882579903

答案 2 :(得分:2)

对于在Debian Jessie上执行这些步骤的任何人 - 从源代码构建Varnish时可能会遇到一些问题。

  1. 该automake需要在configure.ac第18行中指定的subdir-options

    AM_INIT_AUTOMAKE([1.11 foreign color-tests parallel-tests subdir-options])
    
  2. bin / varnishadm和bin / varnishhist中的Makefile要求变量$(top_srcdir)替换为../../,因为automake中的变量扩展存在错误(请参阅https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=402727)< / p>

    varnishadm_SOURCES = \ 
            varnishadm.c \ 
            ../../lib/libvarnish/vas.c \ 
            ../../lib/libvarnish/vsa.c \ 
            ../../lib/libvarnish/vtcp.c \ 
            ../../lib/libvarnish/vss.c
    
  3. 修复这些内容,然后您可以按照上面jacob-rastad的答案中的说明进行操作。

    我在这里做了一些进一步的说明:http://www.blue-bag.com/blog/compiling-varnish-modules

答案 3 :(得分:2)

这就是我在Docker容器中使用Varnish 4.1进行基本身份验证VMOD的方法https://github.com/blmr/varnish-basic-auth-docker

1)安装依赖项

apt-get install -y apt-transport-https \
&& apt-get install -y git-core zlib1g-dev automake build-essential libtool libssl-dev \
libreadline-dev libyaml-dev libsqlite3-dev ncurses-dev sqlite3 libxml2-dev libxslt1-dev \
libpcre3-dev libcurl4-openssl-dev python-docutils python-software-properties libvarnishapi-dev

2)添加清漆回购

curl https://repo.varnish-cache.org/GPG-key.txt | apt-key add -
printf "deb https://repo.varnish-cache.org/ubuntu/ trusty varnish-4.1 \ndeb-src https://repo.varnish-cache.org/ubuntu/ trusty varnish-4.1" >> /etc/apt/sources.list.d/varnish-cache.list && apt-get update

3)安装Varnish 4.1

apt-get install -qy varnish

4)获取清漆源并进行编译

apt-get source varnish && rm *.diff.gz *.dsc *.tar.gz \
&& mv varnish* varnish-source && cd varnish-source && ./autogen.sh && ./configure --prefix=/usr/sbin && make

5)获取Varnish basic auth VMOD并进行编译

git clone http://git.gnu.org.ua/cgit/vmod-basicauth.git && cd vmod-basicauth \
&& git clone http://git.gnu.org.ua/repo/acvmod.git && ./bootstrap \
&& ./configure VARNISHSRC=/varnish-source VMODDIR=/usr/lib/varnish/vmods/ && make && make install && make check

6)更新default.vcl

sub vcl_recv {
if (!basicauth.match("/etc/varnish/htpasswd",  req.http.Authorization)) {
            return(synth(401, "Authentication required"));
    }
}

sub vcl_synth {
  if (resp.status == 401) {
        set resp.http.WWW-Authenticate = "Basic";
  }
}