我有一台 13.04 Ubuntu 服务器,有两个关联的 IP 地址。例如,IP 是123.456.789.111和123.456.789.222假设服务器有两个域名示例1.com和example2.com。
我目前有 example2.com 由 Apache 提供服务,还有 example1.com 由Varnish > Nginx。 除了示例1.com实际上是由 apache 提供服务,尽管所有设置都显示它应该由 nginx 提供服务。
在 DNS 中 example1.com 指向123.456.789.111和example2.com指向123.456.789.222。
在
/etc/apache2/ports.conf
我已将其设置为:
NameVirtualHost 123.456.789.222:80
Listen 80
因此,任何指向该域的域都应由 Apache 提供服务,事实也确实如此。
在
/etc/default/varnish
我已将其设置为:
DAEMON_OPTS="-a 123.456.789.111:80 \
-T localhost:6082 \
-f /etc/varnish/default.vcl \
-S /etc/varnish/secret \
-s malloc,256m"
因此,任何指向该域名的网站都应该被 Varnish 接收。
然后在:
/etc/varnish/default.vcl
我已将其设置为:
backend default {
.host = "127.0.0.1";
.port = "8080";
}
它将所有内容从 varnish 转发到 nginx,因为:
/etc/nginx/sites-available/example1.com
root /var/www/example1.com/public/
我有:
server {
listen 127.0.0.1:8080;
值得注意的是,我还将该域名链接到 sites-enabled/example1.com。
因此 example1.com 应该由 Varnish 加载,然后由 Nginx 提供服务,但实际上它正在从以下位置加载内容:
/var/www/
另外,如果我使用 example1.com 执行 www.isvarnishworking.com,它会说它没有通过 varnish 加载。(是的,我使用的是实际域名,而不是 example1.com,我使用它是为了写这篇文章)。
我还重新启动了 Varnish Nginx 和 Apache 服务,它们都重新启动了,没有任何问题。
我还禁用了 nginx 中的默认站点:
sudo rm -v /etc/nginx/sites-enabled/default
另请参阅:
/etc/apache2/sites-enabled
example1.com 不存在(因为它不应该存在,因为我不希望它被 Apache 加载)。
我不知道还要检查什么。有没有人有什么想法或命令可以帮助我查看哪些 example1.com 没有被 apache 加载并传递给 nginx?
** 更新 **
如果我先停止 nginx、apache2 和 varnish,然后打开 varnish 和 nginx,那么 example1.com 确实会使用 varnish 和 nginx 正确加载。但是如果我运行:
sudo service varnish start
它说:
(98)Address already in use: make_sock: could not bind to address [::]:80
(98)Address already in use: make_sock: could not bind to address 0.0.0.0:80
但我不知道为什么,因为 apache 和 varnish 都在监听端口 80,但它们在不同的 IP 地址上监听端口 80。
答案1
看来/etc/apache2/ports.conf
您有Listen 80
而不是Listen 123.456.789.222:80
。这样端口就会绑定到特定的 IP 地址。