Faça um servidor gerenciar vários sites

2

Eu comprei um servidor dedicado da DigitalOcean e configurei nginx , mysql e php, seu endereço IP é a.b.c.d . Eu comprei dois domínios de GoDaddy : siteone.com e sitetwo.com . Eu fiz um subdomínio sub.siteone.com , será um WordPress site. Eu fiz sub.siteone.com encaminhar para a.b.c.d em GoDaddy .

Seguindo este post e Neste post , coloquei os arquivos do WordPress em /var/www/sub.siteone.com/html/ . /etc/nginx/sites-available/sub.siteone.com contém o seguinte:

server {
    listen 80 default_server;
    listen [::]:80 default_server ipv6only=on;

    root /var/www/sub.siteone.com/html;
    index index.php index.html index.htm;

    server_name sub.siteone.com;

    location / {
            try_files $uri $uri/ /index.php?q=$uri&$args;
    }

    error_page 404 /404.html;

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

    location ~ \.php$ {
            try_files $uri =404;
            fastcgi_split_path_info ^(.+\.php)(/.+)$;
            fastcgi_pass unix:/var/run/php5-fpm.sock;
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include fastcgi_params;
    }
}

Como resultado, quando eu digito sub.siteone.com em um navegador, ele redireciona para a.b.c.d e mostra bem o site do WordPress.

O problema é que eu quero que meu servidor ( a.b.c.d ) contenha vários sites (por exemplo, domínios). Então, um mecanismo que imagino seria a.b.c.d/one/ contém o primeiro domínio e a.b.c.d/two/ contém o segundo domínio. Como resultado,

  • quando eu digito sub.siteone.com em um navegador, a URL permanece a mesma enquanto o conteúdo é de a.b.c.d/one/ ;
  • quando eu digito sub.siteone.com/photos/ em um navegador, a URL permanece a mesma enquanto o conteúdo é de a.b.c.d/one/photos ;
  • quando eu digito sitetwo.com em um navegador, a URL permanece a mesma enquanto o conteúdo é de a.b.c.d/two/ ;
  • quando eu digito sitetwo.com/downloads/ em um navegador, a URL permanece a mesma enquanto o conteúdo é de a.b.c.d/two/downloads

Alguém poderia me dizer se esse mecanismo faz sentido? E como eu poderia modificar a configuração do nginx e do GoDaddy para perceber isso?

    
por SoftTimur 18.08.2015 / 00:52

4 respostas

5

Você pode conseguir isso facilmente usando blocos de servidor no Nginx para criar vários 'hosts virtuais', cada um com uma configuração HTTP diferente. Isso funciona pelo Nginx processando sua solicitação de maneira diferente, dependendo de qual URL você usou para acessar o servidor.

Simplificando, para acessar o siteone.com, você precisa criar um bloco server com um valor server_name de siteone.com . Cada bloco de servidor pode estar em seu próprio arquivo ou no mesmo arquivo, isso realmente não importa.

siteone.com:

server {
    listen 80;
    server_name sub.siteone.com;
    root /var/www/sub.siteone.com/html;
    # ADD ADDITIONAL SITEONE CONFIGURATION HERE
}

sub.siteone.com:

server {
    listen 80;
    server_name sub.siteone.com;
    root /var/www/sub.siteone.com/html;
    # ADD ADDITIONAL SUB.SITEONE CONFIGURATION HERE
}

sitetwo.com

server {
    listen 80;
    server_name sitetwo.com;
    root /var/www/sitetwo.com/html;
    # ADD ADDITIONAL SITETWO CONFIGURATION HERE
}

Isso deve fornecer o comportamento de que você precisa. Também é importante notar que você pode fazer muito mais do que usar diferentes diretórios-raiz para cada servidor, também é útil ter diferentes arquivos de log para cada host virtual, encaminhando solicitações e muito mais recursos.

Aqui está um exemplo grosseiro de ter arquivos de log específicos para sitetwo.com

server {
    listen      80;
    server_name sitetwo.com;
    root        /var/www/sitetwo.com/html;
    error_log   /var/www/sitetwo.com/logs/error.log;
    access_log  /var/www/sitetwo.com/logs/access.log;
    # ADD ADDITIONAL SITETWO CONFIGURATION HERE
}
    
por 24.08.2015 / 20:08
6

O que você deseja é chamado de hospedagem virtual. E funciona muito melhor do que você descreveu!

Basta adicionar vários blocos server com diferentes diretórios server_name e root . Um server de bloco por nome de domínio. Observe que apenas um deles pode ser marcado como default_server , mas, além disso, todos os blocos podem parecer idênticos.

A melhor maneira de fazer isso é criar um arquivo por site e, em seguida, vincular cada arquivo a /etc/nginx/sites-enabled/ . Depois de fazer isso, reinicie o nginx com service nginx restart

    
por 20.08.2015 / 12:37
1

Com o Nginx, você deve criar quantos arquivos de configuração do site forem necessários e simplesmente modificar o nome_do_servidor e as sentenças raiz para mapear domínios externos para seu conteúdo e código.

    
por 20.08.2015 / 12:36
0

A resposta de Ben também é boa, aqui está uma alternativa apenas por uma questão de variedade: Crie um servidor e dentro dele adicione vários blocos de localização apontando para a localização do seu site.

servidor {

   listen  443 ssl;
   server_name dev.domainofmysite.com;

   server_tokens off;


   location /param {
     proxy_pass http://127.0.0.1:8888;
   }
   location /tparam {

     proxy_pass http://127.0.0.1:7172;
   }
   location /dparam {
     proxy_pass http://127.0.0.1:7172;
   }

}

    
por 28.04.2017 / 13:58