子域

时间:2017-01-25 12:28:42

标签: centos varnish plesk

我知道我在问题中添加了太多信息,但请耐心等待。

我们的网站在域名上运行,例如 - 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。

  • nginx.php
  • nginxDomainForwarding.php
  • nginxDomainForwardingIpDefault.php
  • nginxDomainVhost.php
  • nginxDomainVhostIpDefault.php
  • nginxWebmail.php

然后我们改变了,清漆监听端口到80而不是端口6081但是当我们开始清漆时,它直接显示失败并且我们的域 - staging.domain1.com无法加载所以我们恢复了所有内容,如上所述

    端口6081上的
  • 清漆[80后的VCL后端]
  • apache 7080
  • nginx 80

我认为我应该有以下情况:

  • Varnish - 端口80 [default.vcl文件应该从8080端口获取内容]
  • Nginx - 端口8080
  • Apache - 端口7080。

在第一种情况下,我们无法确认是否正确配置了清漆[如果我们设置IP而不是真实的主机名],在第二种情况下,我们无法启动清漆服务,尽管它应该是理想的情况。

基本上,我在这里没有弄错。

1 个答案:

答案 0 :(得分:0)

首先,不要在Plesk或任何控制面板上使用Varnish。这永远不会带来好结果。在裸机Linux服务器上使用它,这样您就可以更好地了解正在发生的事情。

其次,你几乎就在那里:)清漆VCL中的后端IP必须保留为IP。将域放在那里而不是IP是错误的。 Varnish会自动将您的HTTP请求中的Host头转换为底层后端服务器。 因此,如果您打开包含网址http://staging-domain:6081/的网页,那么会发生以下情况:

  • 主机:staging-domain的HTTP请求到达Varnish
  • 然后Varnish会以相同的值传递给Apache / Nginx。

您的初始问题很可能是您的应用/网站发起的重定向。

简而言之,您正在尝试访问http://staging-domain:6081/并且您的应用已重定向到http://domain/,因为它的设置/配置中有“域”硬编码。这是一件非常普遍的事情。

所以解决方案是:

  • 将varnish listen IP转为80
  • 将Nginx /您的后端Web服务器更改为其他端口,即8080
  • 将清漆VCL后端定义调整为Web服务器的IP和端口,即192.168.1.26和8080
  • 调整您的网络应用设置,尤其是基本网址

您可能还需要将实际端口转换为Nginx并在Nginx配置中禁用重定向端口:

port_in_redirect off;

如果全部失败,请使用专业的安装服务:)