Como criar dois domínios para acessar um servidor e usar duas páginas diferentes?

1

Eu tenho um servidor Digitalocean com Ubuntu Linux, nginx 1.4.6 (rodando na porta 80), verniz 3.0.5 (rodando na porta 8080, juntos) Eu tenho dois domínios, digamos siteA.com e siteB.com. No default.conf do nginx eu configurei para que a porta da frente (80) use a pasta siteA como root, o código é:

server {
    listen *:8080 default_server;

    root /home/sitea;
    index index.html index.htm index.php;

    server_name IP_domain_siteA;

    location / {
    autoindex on;
        autoindex_exact_size off;
    # First attempt to serve request as file, then
    # as directory, then fall back to displaying a 404.
    try_files $uri $uri/ =404;
    # Uncomment to enable naxsi on this location
    # include /etc/nginx/naxsi.rules
     }    

     location ~ \.php$ {
        try_files $uri =404;
        expires off;
        fastcgi_read_timeout 900s;
        fastcgi_index index.php;
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

}

mas eu quero que o SiteB use a mesma porta para acesso usando os 2 domínios para o mesmo servidor. então quando eu acessar:

siteA.com => carry my server folder:
/home/siteA/index.php
siteB.com => carry the same server folder (same ip as well):
/home/siteB/index.html

Como faço isso? ja tentei de tudo, inclusive incluindo essas linhas de backend em default.VCL (configuração de verniz).

backend siteA{
     .host = "sitea.com";
     .port = "8080";
 }
 backend siteB{
      .host = "siteb.com";
      .port = "8080";
 }
 sub vcl_recv {
    if (req.http.host == "sitea.com") {
        #You will need the following line only if your backend has multiple virtual host names
        set req.http.host = "sitea.com";
        set req.backend = siteA;
        return (lookup);
    }
    if (req.http.host == "siteb.com") {
        #You will need the following line only if your backend has multiple virtual host names
        set req.http.host = "siteb.com";
        set req.backend = siteB;
        return (lookup);
    }
 }

Não resolvido, ele me retorna o erro:

BACKEND HOST "siteB.com": resolves to multiple IPv4 addresses. Only one address is allowed.

eu já uso hosts virtuais , para outras pastas com nginx mas só é possível para mudar PORTAS, a linha server_name direcionada para domainA ou domainB, não funciona .... porque é o mesmo IP

O que posso fazer com sugestões? obrigado

EDIT 1:

A configuração do nginx para ambos os sites está aqui (siteA):

server {
  listen *:8080 default_server;
  root /var/www/public/sitea;
  try_files $uri $uri/ @handler;
  index index.php index.html index.htm;

  # Make site accessible from http://localhost/
##domain address 1 of server...
server_name www.sitea.com.br sitea.com.br;  
  #location / {
    # First attempt to serve request as file, then
    # as directory, then fall back to displaying a 404.
    #try_files $uri $uri/ =404;
    # Uncomment to enable naxsi on this location
    # include /etc/nginx/naxsi.rules
  #}

  ## These locations would be hidden by .htaccess normally
      location ^~ /app/                { deny all; }
    location ^~ /includes/           { deny all; }
    location ^~ /lib/                { deny all; }
      location ^~ /media/downloadable/ { deny all; }
      location ^~ /pkginfo/            { deny all; }
      location ^~ /report/config.xml   { deny all; }
      location ^~ /var/                { deny all; }

      location /var/export/ { ## Allow admins only to view export folder
          auth_basic           "Restricted"; ## Message shown in login window
          auth_basic_user_file htpasswd; ## See /etc/nginx/htpassword
          autoindex            on;
      proxy_read_timeout 150;
    }

  error_page 404 /404.html;
  error_page 500 502 503 504 /50x.html;
  location = /50x.html {
    root /usr/share/nginx/html;
  }

  location @handler { ## Magento uses a common front handler
         rewrite / /index.php;
      }

      location ~ .php/ { ## Forward paths like /js/index.php/x.js to relevant handler
           rewrite ^(.*.php)/ $1 last;
      }


  # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
  #
  location ~ \.php$ {
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    fastcgi_pass unix:/var/run/php5-fpm.sock;
    fastcgi_index index.php;
    fastcgi_read_timeout 120;
    include fastcgi_params;
  }


}

o outro site (siteB):

server {
    listen 8090;

    client_max_body_size 20M;
    root /var/www/public/siteb;
    index index.html index.htm index.php;

    ##domain address 2 of server...
    server_name www.siteb.com.br siteb.com.br;

    location / {
        autoindex on;
        try_files $uri $uri/ /index.php?q=$request_uri;
        autoindex_exact_size off;
        proxy_pass http://localhost:8080;
     }

     location ~ \.php$ {
        #try_files $uri =404;
        expires off;
        fastcgi_read_timeout 900s;
        fastcgi_index index.php;
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

}
    
por Matheus Silva Itep 09.01.2016 / 21:19

2 respostas

1

Se você estiver usando o Varnish, poderá configurar a limpeza para o site adicional, por exemplo, em default.vcl:

acl purge {
  "localhost";
  "127.0.0.1";
  "siteb.com";
}

e na configuração do nginx:

server {
  listen 8080 default_server;
  server_name sitea.com;

  ...
}

server {
  listen 8080;
  server_name siteb.com;

  ...
}

Se você armazenar em cache ambos os websites em verniz, o nginx não poderá diferenciá-lo corretamente. Talvez tenha uma maneira melhor, mas isso também funciona.

    
por 11.01.2016 / 17:21
1

O erro que você está recebendo sugere que o siteB.com tem vários endereços IPv4. Em vez de especificar seus hosts de backend usando o nome DNS, basta usar localhost ou 127.0.0.1. Isso pode aplacar o verniz e elimina uma pesquisa de DNS que pode causar atrasos ou (aparentemente, como neste caso) dar errado. Eu não estou muito familiarizado com o verniz, mas eu teria adicionalmente pensado que você só precisa especificar um backend único (como é de fato a mesma caixa aqui) e apenas se certificar de que os cabeçalhos de host corretos estão fazendo isso para nginx . Falando nisso ...

Você não precisa configurar mais proxies. O Nginx permitirá que você especifique dois hosts virtuais ouvindo na mesma porta e usará a diretiva server_name para corresponder ao cabeçalho do host de solicitações recebidas. Quaisquer solicitações que não correspondam a um server_name conhecido serão capturadas pelo bloco do servidor padrão, geralmente aquele especificado primeiro, a menos que você substitua a opção default_server na diretiva listen. Veja o seguinte exemplo:

server {
  listen 8080;
  server_name siteA.com;

  ...
}

server {
  listen 8080 default_server;
  server_name siteB.com;

  ...
}

Aqui, os dois blocos do servidor estão atendendo à porta 8080 e o nginx sabe quais solicitações são para qual site, correspondendo ao cabeçalho do host. Se receber uma solicitação para a qual ela não tem uma correspondência de host, ela normalmente passaria para o bloco de siteA.com como o primeiro bloco definido, mas sobrescrevemos especificamente esse comportamento declarando que o bloqueio de siteB.com é o padrão servidor para pedidos nessa porta.

Como sua configuração de verniz é garantir que você defina os cabeçalhos de host apropriados antes que eles passem as solicitações para o back-end, isso deve ser tudo o que você precisa fazer para veicular vários sites a partir dele. Eu não deveria ter pensado que você precisaria fazer isso manualmente no verniz neste caso, já que você não está sobrescrevendo os cabeçalhos; principalmente, o que parece ser feito para normalização (ou seja, reunir tanto www.site.com quanto site.com para que você não armazene em cache duas cópias da mesma coisa). Minha leitura sugere que você não precisa especificar vários backends, pois é o mesmo servidor na mesma porta que você está olhando. O verniz deve ser inteligente o suficiente para separar os caches com base em hosts diferentes.

    
por 11.01.2016 / 11:03