Varnish 4 基本认证
Varnish 4 Basic authentication
我必须缓存多个后端服务器,我从 Nginx 切换到 Varnish,最后发现 2 个服务器需要 运行 HTTP 基本身份验证。
我尝试了这个 link http://blog.tenya.me/blog/2011/12/14/varnish-http-authentication 但它对我不起作用(他们 运行 Varnish 3)
有没有简单的方法在 Varnish 4 中配置基本身份验证?
您可以使用 VMOD basicauth
安装清漆 VMOD
首先你需要安装它。从 the Git repo for basicauth 下载源代码。提取到您的主目录中,例如~/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)
下载源
制作清漆
您必须"make"下载的源
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
请注意,您不必安装源代码,因此不要"make-install",因为这可能会扰乱您当前的安装。
构建并安装 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 中。
确保将“/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";
}
}
对于在 Debian Jessie 上遵循这些步骤的任何人 - 从源代码构建 Varnish 时,您可能会遇到几个问题。
automake 需要在 configure.ac 第 18 行中指定的子目录选项
AM_INIT_AUTOMAKE([1.11 foreign color-tests parallel-tests subdir-options])
bin/varnishadm 和 bin/varnishhist 中的 Makefile 需要将变量 $(top_srcdir) 替换为 ../../ 由于变量中的错误automake 中的扩展(参见 https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=402727)
varnishadm_SOURCES = \
varnishadm.c \
../../lib/libvarnish/vas.c \
../../lib/libvarnish/vsa.c \
../../lib/libvarnish/vtcp.c \
../../lib/libvarnish/vss.c
解决这些问题,然后您可以按照上面 jacob-rastad 的答案中的说明进行操作。
我在这里做了一些进一步的注释:http://www.blue-bag.com/blog/compiling-varnish-modules
这就是我在 Docker 容器 https://github.com/blmr/varnish-basic-auth-docker
中使用 Varnish 4.1 进行基本身份验证 VMOD 的方式
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) 获取 Varnish 源码并编译
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";
}
}
这也有效:
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);
}
}
来源:http://blog.tenya.me/blog/2011/12/14/varnish-http-authentication/#comment-2882579903
我必须缓存多个后端服务器,我从 Nginx 切换到 Varnish,最后发现 2 个服务器需要 运行 HTTP 基本身份验证。 我尝试了这个 link http://blog.tenya.me/blog/2011/12/14/varnish-http-authentication 但它对我不起作用(他们 运行 Varnish 3) 有没有简单的方法在 Varnish 4 中配置基本身份验证?
您可以使用 VMOD basicauth
安装清漆 VMOD
首先你需要安装它。从 the Git repo for basicauth 下载源代码。提取到您的主目录中,例如~/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)
下载源制作清漆
您必须"make"下载的源
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
请注意,您不必安装源代码,因此不要"make-install",因为这可能会扰乱您当前的安装。
构建并安装 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 中。
确保将“/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";
}
}
对于在 Debian Jessie 上遵循这些步骤的任何人 - 从源代码构建 Varnish 时,您可能会遇到几个问题。
automake 需要在 configure.ac 第 18 行中指定的子目录选项
AM_INIT_AUTOMAKE([1.11 foreign color-tests parallel-tests subdir-options])
bin/varnishadm 和 bin/varnishhist 中的 Makefile 需要将变量 $(top_srcdir) 替换为 ../../ 由于变量中的错误automake 中的扩展(参见 https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=402727)
varnishadm_SOURCES = \ varnishadm.c \ ../../lib/libvarnish/vas.c \ ../../lib/libvarnish/vsa.c \ ../../lib/libvarnish/vtcp.c \ ../../lib/libvarnish/vss.c
解决这些问题,然后您可以按照上面 jacob-rastad 的答案中的说明进行操作。
我在这里做了一些进一步的注释:http://www.blue-bag.com/blog/compiling-varnish-modules
这就是我在 Docker 容器 https://github.com/blmr/varnish-basic-auth-docker
中使用 Varnish 4.1 进行基本身份验证 VMOD 的方式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) 获取 Varnish 源码并编译
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";
}
}
这也有效:
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);
}
}
来源:http://blog.tenya.me/blog/2011/12/14/varnish-http-authentication/#comment-2882579903