我想尝试一个Varnish配置,它在默认端口6081上监听,Apache停留在80.这个想法来自这个blog about varnish。
iptables重定向然后将所有80个流量发送到6081.这样做可以让我继续使用我的Web控制面板而不会破坏它(面板在8080本身运行,并且在Apache的监听改变时也会中断)
现在我正在安装Apache和Varnish的服务器的干净安装,只是为了看看它是否正常工作。我可以通过以下方式获得Varnish并运行:
curl -I 192.168.0.1:6081
然而,即使iptable规则启动并运行,它也无法单独处理IP。以下是我的结果和设置显然使用虚拟IP 192.168.0.1
iptables -L -t nat
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
REDIRECT tcp -- anywhere anywhere tcp dpt:http redir ports 6081
IP表规则 - (来自here的想法)
iptables -t nat -A PREROUTING -i eth0 -p tcp -m tcp --dport 80 -j REDIRECT --to-port 6081
curl -I与端口6081的结果
curl -I http://192.168.0.1:6081
HTTP/1.1 200 OK
Date: Wed, 06 Jun 2018 21:45:20 GMT
Server: Apache/2.4.25 (Debian)
Last-Modified: Wed, 06 Jun 2018 21:08:27 GMT
Vary: Accept-Encoding
Content-Type: text/html
X-Varnish: 2
Age: 0
Via: 1.1 varnish (Varnish/6.0)
ETag: W/"29cd-56dff9168052e-gzip"
Accept-Ranges: bytes
Connection: keep-alive
卷曲的结果-I没有端口
curl -I http://192.168.0.1
HTTP/1.1 200 OK
Date: Wed, 06 Jun 2018 21:36:49 GMT
Server: Apache/2.4.25 (Debian)
Last-Modified: Wed, 06 Jun 2018 21:08:27 GMT
ETag: "29cd-56dff9168052e"
Accept-Ranges: bytes
Content-Length: 10701
Vary: Accept-Encoding
Content-Type: text/html
的/ etc /默认/清漆
DAEMON_OPTS="-a :6081 \
-T localhost:6082 \
-f /etc/varnish/default.vcl \
-S /etc/varnish/secret \
-s malloc,256m
/etc/varnish/default.vcl
# Default backend definition. Set this to point to your content server.
backend default {
.host = "127.0.0.1";
.port = "80";
我错过了什么? Apache是80,Varnish是6081,80流量被重定向到6081,Varnish正在收听。
答案 0 :(得分:1)
我不确定我是否完全掌握了这里的问题。为什么从80重定向到6081?
默认情况下,Varnish将在6081下公开,这主要是不与在80等流行端口下运行的其他现有服务发生冲突。
鉴于您的设置,我会反过来做。我将在端口80下启动Varnish,并在6081下启动Apache(或其他任何端口-我假设8089在其后),当然,请确保将Apache设置为Varnish的正确后端。
毕竟,这是您想要带走热量的代理。
例如:
/etc/varnish/default.vcl
backend default {
.host = "127.0.0.1";
.port = "8089"; # I will assume Apache runs under 8089.
}
因此,是这样的:
$ curl -is http://127.0.0.1/foo/bar
首先会打入Varnish,Varnish会尝试通过询问其后端(上面定义的Apache)来满足请求。
话虽如此,您可以禁用80到6081重定向。
答案 1 :(得分:0)
为什么要这样?
我认为您应该在端口80上使用清漆,并在apache上使用两个位置,比如说:8080和:8081。
APACHE>设置2个虚拟主机
Site1>在端口8080上播放面板
Site2>在端口8081上播放您的站点
清漆>
为面板设置BackEnd1
为您的网站设置BackEnd2
一个用于8080的Web面板
还有一个在8081实际站点上
告诉清漆backend1“面板”将所有内容传递给backend1 8080(这样清漆将把您传递给apache)
告诉varnish的backend2“站点”缓存您想要为8081缓存的任何内容
所以,只说几句话。
面板由清漆提供,并将所有内容传递给Apache
从清漆服务的站点,您可以在其中应用命中率/未命中率等缓存规则。
请更改/ etc / default / varnish并将其设置在端口80上。
PS:切勿将其应用于Varnish / Apache的组合,而是在Varnish / nginx上进行。
您应该检查apache是否可以执行此操作。我怀疑他不能.....
答案 2 :(得分:0)
让我看看是否可以帮忙解决这个问题。因此,您只想尝试与Web服务器并行使用Varnish,以便可以尝试。如果是这样,那就不成问题了。
首先,端口6081用于Varnish的管理功能。您可以通过此端口远程进行处理。
假设您的Web服务器位于端口80上,则可以将Varnish服务器配置为:8080,可以通过以下方式将/ etc / varnish配置设置为链接:
NFILES=131072
MEMLOCK=82000
RELOAD_VCL=1
VARNISH_VCL_CONF=/etc/varnish/mysite.vcl
VARNISH_LISTEN_PORT=8080
VARNISH_ADMIN_LISTEN_ADDRESS=127.0.0.1
VARNISH_ADMIN_LISTEN_PORT=6082
VARNISH_SECRET_FILE=/etc/varnish/secret
VARNISH_MIN_THREADS=100
VARNISH_MAX_THREADS=8000
VARNISH_THREAD_TIMEOUT=240
VARNISH_STORAGE_FILE=/var/lib/varnish/varnish_storage.bin
VARNISH_STORAGE_SIZE=12G
#VARNISH_STORAGE="file,${VARNISH_STORAGE_FILE},${VARNISH_STORAGE_SIZE}"
VARNISH_STORAGE="malloc,${VARNISH_STORAGE_SIZE}"
VARNISH_TTL=120
DAEMON_OPTS="-a ${VARNISH_LISTEN_ADDRESS}:${VARNISH_LISTEN_PORT} \
-f ${VARNISH_VCL_CONF} \
-T ${VARNISH_ADMIN_LISTEN_ADDRESS}:${VARNISH_ADMIN_LISTEN_PORT} \
-t ${VARNISH_TTL} \
-w ${VARNISH_MIN_THREADS},${VARNISH_MAX_THREADS},${VARNISH_THREAD_TIMEOUT} \
-u varnish -g varnish \
-S ${VARNISH_SECRET_FILE} \
-s ${VARNISH_STORAGE}"
然后,在“ mysite.vcl”配置中,可以将清漆链接到您的网站:
backend webserver { # Define one backend
.host = "127.0.0.1"; # IP or Hostname of backend
.port = "80"; # Port for backend listener (Apache, NGINX, etc.)
然后只需设置IP表以接受8080和80的流量,就可以分别在:8080和80上分别测试Varnish和Web服务器。顺便说一句,您不应将管理端口(6081、6082等)暴露在外面。
如果您决定使用Varnish,则可以将其放在Web服务器的前面。将清漆侦听端口设置为80,将Web服务器设置为8080,或者将其他任何端口(如果它们位于同一服务器上)设置为8080。如果它们是不同的服务器,则可以将Web服务器端口保留为80,只需将其从防火墙中拉出即可,使其无法直接与外界联系。
祝你好运!