Existem duas maneiras de conseguir isso. Você faz tudo por endereço IP, com locais de subpastas ou precisará comprar um domínio e, em seguida, terá vários subdomínios nesse domínio (os subdomínios não devem custar nada, se você comprar o domínio, mas verifique com seu registrador).
Eu não aconselho o método de endereço IP, apenas porque é muito ruim ter que lembrar endereços IP, e se você tentar compartilhar informações com outras pessoas, também terá o mesmo problema de outras pessoas terem que se lembrar do endereço IP.
A abordagem de um único IP, muitas subpastas, sem um nome de domínio
AVISO PRÉVIO! Não temos informações sobre seus projetos nos quais você está trabalhando. Precisamos saber mais para determinar se você pode fazer essa abordagem, pois muitas estruturas da Web não funcionarão sem um nome de domínio verdadeiro vinculado a ela.
AVISO : Nos testes em andamento desses exemplos, foi descoberto que a abordagem "Um domínio, muitos subdiretórios" não é recomendada para fazer proxy de dados reversos no back-end, pois o URI solicitado incluirá os subdiretórios no URI; isso pode fazer com que os servidores back-end tenham problemas de comportamento adequado.
Por nginx
outro lado, precisamos fazer uma abordagem "malvada" para isso - um endereço IP, muitos documentos e localizações de subpastas. Essa é uma abordagem muito maléfica e pode causar muitos problemas em algumas estruturas da web.
Assumindo uma nginx
instalação padrão como base a partir dos repositórios, precisamos criar uma configuração de site para lidar com cada solicitação de subdiretório do projeto. Em seguida, precisamos vincular o link no local certo.
Crie /etc/nginx/sites-available/my-projects
com o seguinte (use-o como um modelo / guia - ele assume três projetos com HTML estático e sem aplicativos dinâmicos da web em PHP ou python ou similar, e você pode copiar os blocos de localização individuais e criar novos locais de acordo; IP do servidor é 1.2.3.4
).
server {
listen 80 default_server;
server_name 1.2.3.4;
location / {
return 410; # Default root of site won't exist.
}
location /proj1/ {
alias /var/www/proj1;
try_files $uri $uri/ =404;
# any additional configuration for non-static content
}
location /proj2/ {
alias /var/www/proj2;
try_files $uri $uri/ =404;
# any additional configuration for non-static content
}
location /proj3/ {
alias /var/www/proj3;
try_files $uri $uri/ =404;
# any additional configuration for non-static content
}
}
Agora substituímos a configuração padrão (remova-a) e adicionamos a nossa:
sudo rm /etc/nginx/sites-enabled/default
sudo ln -s /etc/nginx/sites-available/my-projects /etc/nginx/sites-enabled
E, em seguida, reinicie o nginx
serviço:
# If on 14.04, use this:
sudo service nginx restart
# If on 15.10 or newer, use this:
sudo systemctl restart nginx
A abordagem de um único domínio e vários subdomínios.
Esta seção de resposta assume que você possui um domínio e vários subdomínios. Se você não possui isso, esclareça isso na sua pergunta
Com cada nginx
server {}
bloco na configuração, você precisará definir o nome do servidor e provavelmente definir um quarto bloco de servidor como um 'catch all' para outras solicitações.
Exemplo: I têm três projectos, proj1
, proj2
, proj3
. Eu tenho um domínio chamado evil-projects.net
(NOTA: Não existe realmente). Eu quero três subdomínios diferentes, um para cada nginx
configuração que apontará para um projeto cada. Meu servidor reside em 1.2.3.4 e servirá todos os sites.
No cenário acima, temos duas partes: domínios e subdomínios e a configuração do servidor.
(1): Configuração de DNS
Configure seu DNS no seu host de forma que o seguinte seja verdadeiro com os registros DNS:
evil-projects.net IN A 1.2.3.4
proj1.evil-projects.net IN A 1.2.3.4
proj2.evil-projects.net IN A 1.2.3.4
proj3.evil-projects.net IN A 1.2.3.4
(2): configuração do NGINX no servidor (1.2.3.4)
Agora para suas nginx
configurações. Estou assumindo que você terá as configurações padrão do nginx e os pacotes dos Repositórios (vou usar o 14.04 como um exemplo básico). /etc/nginx/sites-available
Primeiro, colocaremos quatro arquivos de configuração . Pode ser necessário usar sudo
ao criar esses arquivos, pois a pasta em questão pertence root
.
/etc/nginx/sites-available/catch-all
- este será o 'catch all' para todos os domínios não válidos. Eu gosto de retornar o código de erro http 410 (GONE).
server {
listen 80 default_server;
server_name _;
return 410;
}
Em seguida, definimos a configuração para seus sites / projetos. Eu vou assumir que todos eles são arquivos estáticos. Cada um deles implica que você também possui diretórios da web diferentes para cada projeto no servidor (diferentes 'raízes do documento').
/etc/nginx/sites-available/proj1.evil-projects.net
:
server {
listen 80;
server_name proj1.evil-projects.net;
root /var/www/proj1;
index index.htm index.html;
location / {
try_files $uri $uri/ =404;
}
}
/etc/nginx/sites-available/proj2.evil-projects.net
:
server {
listen 80;
server_name proj2.evil-projects.net;
root /var/www/proj2;
index index.htm index.html;
location / {
try_files $uri $uri/ =404;
}
}
/etc/nginx/sites-available/proj3.evil-projects.net
:
server {
listen 80;
server_name proj3.evil-projects.net;
root /var/www/proj3;
index index.htm index.html;
location / {
try_files $uri $uri/ =404;
}
}
Em seguida, precisamos remover a configuração 'padrão' /etc/nginx/sites-enabled
e adicionar a nossa. Novamente, sudo
é necessário aqui.
sudo rm /etc/nginx/sites-enabled/default
sudo ln -s /etc/nginx/sites-available/proj1.evil-projects.net /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/proj2.evil-projects.net /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/proj3.evil-projects.net /etc/nginx/sites-enabled/
E então reiniciaremos o nginx
processo:
# If on 14.04, use this:
sudo service nginx restart
# If on 15.04 or newer, use this:
sudo systemctl restart nginx
Depois que o DNS se propagar, os sites funcionarão como deveriam.
X.Y.Z.W/foo
,X.Y.Z.W/bar
)? Por que você não pode obter domínios para eles? (Você pode atribuir o mesmo IP a vários domínios)?