我有一台运行着一堆 docker 镜像的服务器(基本上只是托管了一堆网站)
它们都有不同的域名,都指向服务器的 IP
(假设服务器 IP 是 111.222.333.444)
(我的域名是 www.one.com、www.two.com、www.three.com)
目前,docker 镜像全部将 80 端口导出到服务器的不同端口:
- www.one.com 是端口 5080
- www.two.com 是端口 5180
- www.three.com 是端口 5280
所以如果我访问 URL:port,那么网站就会显示出来。
但我想使用虚拟主机,这样我就可以访问每个 URL 上的端口 80,然后它就会重定向到相关端口。
我知道如何使用 apache 来做到这一点,并且可能可以使用 nginx 来解决这个问题。
但我听说这就是 squid 的真正用途(另外,apache 作为虚拟主机似乎很重)
我已经在我的 ubuntu12.04 服务器上安装了 squid3
这是目前为止我的 squid.conf
http_port 80 accel defaultsite=www.one.com no-vhost
cache_peer 127.0.0.1 parent 5080 0 no-query originserver name=YourAccelNameHere
acl your_site_acl dstdomain www.one.com
http_access allow your_site_acl
cache_peer_access YourAccelNameHere allow your_site_acl
cache_peer_access YourAccelNameHere deny all
从阅读教程得知“应该”将 www.one.com 转发到本地主机的 5080 端口(但事实并非如此)
我真的不了解 squid,而且从我所有的谷歌搜索中我似乎找不到一个简单的教程来做我想做的事情。
有人能给我提供一份好的教程,或者更好地为我提供一个可以满足我需求的 squid.conf 吗?
谢谢
答案1
我自己回答了
我的解决方案是:
我用清漆解决了这个问题
apt-get install varnish
然后我设置我的
/etc/default/varnish
到
START=yes
NFILES=131072
MEMLOCK=82000
DAEMON_OPTS="-a :80 \
-T localhost:6082 \
-f /etc/varnish/default.vcl \
-S /etc/varnish/secret \
-s malloc,256m"
然后设置我的
/etc/varnish/default.vcl
到
backend default {
.host = "127.0.0.1";
.port = "80";
}
backend one_website {
.host = "127.0.0.1";
.port = "5080";
}
backend two_website {
.host = "127.0.0.1";
.port = "5180";
}
## Multiple virtual host
sub vcl_recv {
if (req.http.host ~ "^www.default.com(:[0-9]+)?$") {
set req.backend = default;
} else if (req.http.host ~ "^www.one.com(:[0-9]+)?$") {
set req.backend = one_website;
} else if (req.http.host ~ "^www.two.com(:[0-9]+)?$") {
set req.backend = two_website;
}
}
## 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;
}
我希望这可以帮助其他面临这个问题的人!