Comprei um servidor dedicado da DigitalOcean e configurei nginx
, mysql e php, seu endereço IP é a.b.c.d
. Comprei dois domínios de GoDaddy
: siteone.com
e sitetwo.com
. Fiz um subdomínio sub.siteone.com
, vai ser um WordPress
site. Eu sub.siteone.com
avancei para a.b.c.d
dentro GoDaddy
.
Seguindo este post e este 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 entro sub.siteone.com
em um navegador, ele redireciona a.b.c.d
e mostra bem o site WordPress.
O problema é que eu quero que meu servidor ( a.b.c.d
) contenha vários sites (ou seja, domínios). Portanto, um mecanismo que imagino a.b.c.d/one/
conteria o primeiro domínio e a.b.c.d/two/
o segundo domínio. Como resultado,
- quando entro
sub.siteone.com
em um navegador, a url permanece a mesma enquanto o conteúdo é dea.b.c.d/one/
; - quando entro, por exemplo
sub.siteone.com/photos/
, em um navegador, a url permanece a mesma enquanto o conteúdo é dea.b.c.d/one/photos
; - quando entro
sitetwo.com
em um navegador, a url permanece a mesma enquanto o conteúdo é dea.b.c.d/two/
; - quando entro, por exemplo
sitetwo.com/downloads/
, em um navegador, a url permanece a mesma enquanto o conteúdo é dea.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?
O que você quer é chamado de hospedagem virtual. E funciona muito melhor do que o que você descreveu!
Basta adicionar vários
server
blocos com diferentes diretóriosserver_name
eroot
. Umserver
bloco por nome de domínio. Observe que apenas um deles pode ser marcado como,default_server
mas fora isso todos os blocos podem parecer idênticos.A melhor maneira de fazer isso é criar um arquivo por site e, em seguida, criar um link simbólico para cada arquivo em
/etc/nginx/sites-enabled/
. Depois de fazer isso, reinicie o nginx comservice nginx restart
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 porque o Nginx processa sua solicitação de maneira diferente, dependendo de qual URL você usou para acessar o servidor.
Simplificando, para acessar siteone.com, você precisa criar um
server
bloco com umserver_name
valor desiteone.com
. Cada bloco de servidor pode estar em seu próprio arquivo ou no mesmo arquivo, isso realmente não importa.siteone.com:
sub.siteone.com:
sitetwo.com
Isso deve fornecer o comportamento que você precisa. Também vale a pena 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, encaminhar solicitações e muitos outros recursos.
Aqui está um exemplo grosseiro de ter arquivos de log específicos para sitetwo.com
Com o Nginx, você deve criar quantos arquivos de configuração de site forem necessários e simplesmente modificar o server_name e as sentenças raiz para mapear domínios externos para seu conteúdo e código.
A resposta de Ben também é boa, aqui está uma alternativa apenas para variar: Crie um servidor e dentro dele adicione vários blocos de localização apontando para a localização do seu site.
servidor{
}