Vários sites em nginx, um IP

7

Então eu estou usando o oceano digital e nginx. Quero hospedar vários sites (meus projetos), mas não quero comprar um domínio para cada um deles.

Existe uma maneira de hospedar vários sites em nginx e oceano digital enquanto os acessa usando esse ip?

    
por Bros Code 02.05.2016 / 14:37

1 resposta

10

Existem duas maneiras de conseguir isso. Ou você faz tudo por endereço IP, com locais de subpastas, ou precisa comprar um domínio one e, em seguida, tem vários subdomínios nesse domínio (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 de endereços IP, e se você tentar compartilhar informações com outras pessoas, você também tem o mesmo problema de outras pessoas se lembrarem do endereço IP. Endereço IP.

O one-IP, muitas subpastas se aproximam, sem um nome de domínio

  

AVISO! Não temos informações sobre seus projetos em que você está trabalhando. Precisamos saber mais para determinar se você pode fazer essa abordagem, pois muitos frameworks da Web não funcionarão sem um verdadeiro nome de domínio vinculado a ele.

No lado nginx , precisamos fazer uma abordagem 'mal' para isso - um endereço IP, muitos locais de docroots e subpastas. Esta é uma abordagem muito malvada e pode causar muitos problemas com alguns frameworks web.

Supondo que um nginx padrão seja instalado como uma base dos repositórios, temos que criar uma configuração de site para manipular cada solicitação de subdiretório do projeto. Então nós temos que criar uma ligação simbólica no local certo.

Crie /etc/nginx/sites-available/my-projects com o seguinte (use isso como um modelo / guia - ele assume três projetos com HTML estático e nenhum aplicativo dinâmico da Web em PHP ou python ou similar, e você pode copiar os blocos de localização individuais e criar novos locais em conformidade, também assume que o IP do seu 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/ {
        root /var/www/proj1;
        try_files $uri $uri/ =404;

        # any additional configuration for non-static content
    }

    location /proj2/ {
        root /var/www/proj2;
        try_files $uri $uri/ =404;

        # any additional configuration for non-static content
    }

    location /proj3/ {
        root /var/www/proj3;
        try_files $uri $uri/ =404;

        # any additional configuration for non-static content
    }
}

Agora, substituímos a configuração padrão (removê-la) e adicionamos a nossa:

sudo rm /etc/nginx/sites-enabled/default
sudo ln -s /etc/nginx/sites-available/my-projects /etc/nginx/sites-enabled

Em seguida, reinicie o nginx service:

# 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 vários subdomínios com um domínio.

  

Esta seção de respostas pressupõe que você tenha um domínio e vários subdomínios. Se você não tem isso, por favor, esclarecer isso na sua pergunta

Com cada bloco nginx server {} na configuração, você precisará definir o nome do servidor e, provavelmente, definir um quarto bloco de servidor como 'capturar tudo' para outras solicitações.

  

Exemplo: tenho três projetos, 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 configuração nginx , que apontará para um projeto cada. Meu servidor reside em 1.2.3.4 e servirá todos os sites.

Com o cenário acima, temos duas partes: domínios e subdomínios e a configuração do servidor.

(1): Configuração do DNS

Configure seu DNS em seu host de forma que o seguinte seja verdadeiro com os registros de 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 as configurações de nginx . Eu estou supondo que você vai ter as configurações nginx padrão e os pacotes dos Repositórios (eu vou usar 14.04 como um exemplo de base). Teremos quatro arquivos de configuração colocados em /etc/nginx/sites-available , primeiro. Talvez seja necessário usar sudo ao criar esses arquivos, pois a pasta em questão pertence a 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, configuramos a configuração dos seus sites / projetos. Eu vou assumir que eles são todos arquivos estáticos, no entanto. Cada um deles implica que você também tem diferentes diretórios da web para cada projeto no servidor (diferentes 'document root').

/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, temos que remover a configuração 'padrão' de /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, reiniciámos o processo nginx :

# If on 14.04, use this:
sudo service nginx restart

# If on 15.04 or newer, use this:
sudo systemctl restart nginx

Quando o DNS se propaga, os sites funcionam como deveriam.

    
por Thomas Ward 02.05.2016 / 15:20

Tags