我有一个 13.04 的 Ubuntu 服务器,有两个相关的 IP 地址。例如,IP 是123.456.789.111和123.456.789.222,服务器有两个域,比如说example1.com和example2.com。
我目前有 example2.com 由 Apache 提供服务,我有 example1.com 由Varnish > Nginx提供服务。除了example1.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";
}
它将所有东西从清漆转发到 nginx,因为:
/etc/nginx/sites-available/example1.com
root /var/www/example1.com/public/
我有:
server {
listen 127.0.0.1:8080;
需要注意的是,我还将该域与sites-enabled/example1.com 进行了simlinked。
所以 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。
看来,在
/etc/apache2/ports.conf
你有Listen 80
而不是,说Listen 123.456.789.222:80
。这样,端口将绑定到特定的 IP 地址。