我知道我在问题中添加了太多信息,但请耐心等待。
我们的网站在域名上运行,例如 - domain1.com有ip说例如 - 192.168.1.25。现在,我们得到另一台运行在IP上的服务器,例如192.168.1.26有plesk面板12.5.30。请注意,我们没有将我们的域名domain1.com指向我们希望保留的192.168.1.26 在我们设置所有内容并准备开始作为生产工作之前,它是私有的我们在plesk面板中使用domain1.com设置了域名,并创建了staging.domain1.com作为子域名。
我们修改了本地计算机上的主机文件,将staging.domain1.com指向192.168.1.26,这样我们就可以从新服务器访问我们的网站了,而主域名 - domain1.com仍然运行在192.168.1.25以上,我们是能够以domain1.com的身份访问
基本上,我们正在设置超过192.168.1.26 IP的登台环境。我们确实在新的暂存域上运行了CentOS 6,并且我们启用了防火墙规则来在plesk面板中的某些IP上运行网站。
我们想在新服务器上配置清漆并安装它。 [我们已经在plesk论坛上对varnish请求进行了投票。]在plesk上,我们确实在端口7080上运行了apache& nginx在端口80上运行。
> netstat -ntlp | grep -w 80
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 29795/nginx
tcp 0 0 :::80 :::* LISTEN 29795/nginx
> netstat -ntlp | grep -w 7080
tcp 0 0 0.0.0.0:7080 0.0.0.0:* LISTEN 10161/httpd
我们将A记录设置为192.168.1.26 - staging.domain1.com到我们的DNS,我们在登台域上获得了正确的IP。我们将/etc/varnish/default.vcl文件设置如下:
backend default {
.host = "192.168.1.26";
.port = "80";
}
backend admin {
.host = "192.168.1.26";
.port = "80";
.first_byte_timeout = 18000s;
.between_bytes_timeout = 18000s;
}
sub vcl_recv {
if (req.restarts == 0) {
if (req.http.x-forwarded-for) {
set req.http.X-Forwarded-For = req.http.X-Forwarded-For + ", " + cl$
} else {
set req.http.X-Forwarded-For = client.ip;
}
}
if (req.request != "GET" &&
req.request != "HEAD" &&
req.request != "PUT" &&
req.request != "POST" &&
req.request != "TRACE" &&
req.request != "OPTIONS" &&
req.request != "DELETE" &&
req.request != "PURGE") {
/* Non-RFC2616 or CONNECT which is weird. */
return (pipe);
}
if (req.http.cookie ~ "adminhtml=") {
set req.backend = admin;
}
}
这是/ etc / sysconfig / varnish文件:
VARNISH_LISTEN_PORT=6081
VARNISH_ADMIN_LISTEN_PORT=6082
VARNISH_VCL_CONF=/etc/varnish/default.vcl
我们开始提供清漆服务 - /etc/init.d/varnish start并检查端口6081:
> netstat -ntlp | grep -w 6081
tcp 0 0 0.0.0.0:6081 0.0.0.0:* LISTEN 23745/varnishd
tcp 0 0 :::6081 :::* LISTEN 23745/varnishd
但是当我们通过访问staging.domain1.com:6081检查我们的网站时,我们得到了响应,但浏览器中显示的URL指向domain1.com。所以我们在默认情况下更改了.host管理员到域名 - staging.domain1.com,如下面,然后重新启动清漆服务,但它没有这样做。
backend default {
.host = "staging.domain1.com";
.port = "80";
}
backend admin {
.host = "staging.domain1.com";
.port = "80";
.first_byte_timeout = 18000s;
.between_bytes_timeout = 18000s;
}
我没有理解为什么在添加真实(子)域名后它没有重新启动。另一件事:网站从端口80即nginx服务。理想情况下,清漆应该在端口80上运行,我们试图这样做,但不知怎的,我们失败了。我们按照 - https://www.theshell.guru/change-nginx-port-plesk-12-centos-6-6/的指导设法在端口8080上运行nginx。基本上,我们在/ usr / local / psa / admin / conf / templates下添加了自定义目录,并在那里复制了以下文件并更新到端口8080。
然后我们改变了,清漆监听端口到80而不是端口6081但是当我们开始清漆时,它直接显示失败并且我们的域 - staging.domain1.com无法加载所以我们恢复了所有内容,如上所述
我认为我应该有以下情况:
在第一种情况下,我们无法确认是否正确配置了清漆[如果我们设置IP而不是真实的主机名],在第二种情况下,我们无法启动清漆服务,尽管它应该是理想的情况。
基本上,我在这里没有弄错。
答案 0 :(得分:0)
首先,不要在Plesk或任何控制面板上使用Varnish。这永远不会带来好结果。在裸机Linux服务器上使用它,这样您就可以更好地了解正在发生的事情。
其次,你几乎就在那里:)清漆VCL中的后端IP必须保留为IP。将域放在那里而不是IP是错误的。 Varnish会自动将您的HTTP请求中的Host头转换为底层后端服务器。 因此,如果您打开包含网址http://staging-domain:6081/的网页,那么会发生以下情况:
您的初始问题很可能是您的应用/网站发起的重定向。
简而言之,您正在尝试访问http://staging-domain:6081/并且您的应用已重定向到http://domain/,因为它的设置/配置中有“域”硬编码。这是一件非常普遍的事情。
所以解决方案是:
您可能还需要将实际端口转换为Nginx并在Nginx配置中禁用重定向端口:
port_in_redirect off;
如果全部失败,请使用专业的安装服务:)