nginx conflito de configuração de dois sites

1

Eu tenho o nginx configurado para um dos meus domínios. Funciona como uma interface para o servidor de aplicativos Wildfly. Um dia decidi configurar o ambiente de testes beta na mesma máquina. Então, adicionei outro subdomínio à configuração. Após o reinício, o nginx parou para servir o primeiro aplicativo. Meus arquivos de configuração são:

subdomínio principal:

server {
    listen 80;
    server_name sub.example.com;
    return 301 https://$host$request_uri;
}

server {

    listen 443;
    server_name sub.example.com;

    ssl_certificate           /etc/nginx/ssl/bundle.crt;
    ssl_certificate_key       /etc/nginx/ssl/sub.example.com.key;

    ssl on;
    ssl_session_cache  builtin:1000  shared:SSL:10m;
    ssl_protocols  TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4;
    ssl_prefer_server_ciphers on;

    access_log            /var/log/nginx/sub.example.com.access.log;

    location / {

      proxy_set_header        Host $host;
      proxy_set_header        X-Real-IP $remote_addr;
      proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header        X-Forwarded-Proto $scheme;

      proxy_pass          http://localhost:8080;
      proxy_read_timeout  90;
    }
}

subdomínio de teste:

server {
    listen 443;
    server_name sub-test.example.com;
    return 301 http://$host$request_uri;
}

server {

    listen 80;
    server_name sub-test.example.com;


    access_log            /var/log/nginx/sub-test.example.com.access.log;

    location / {

      proxy_set_header        Host $host;
      proxy_set_header        X-Real-IP $remote_addr;
      proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header        X-Forwarded-Proto $scheme;

      proxy_pass          http://localhost:8080;
      proxy_read_timeout  90;

    }
}

Eu preciso adicionar que todas as configurações acima funcionem conforme o esperado, quando sozinhas. Mas juntos eles não gostam um do outro. A solicitação do primeiro deles retorna o status HTTP NÃO ENCONTRADO.

Claro, o problema pode estar localizado no meu servidor Wildfly. Está configurado para lidar com hosts virtuais e não tenho certeza se está tudo bem. Mas quando ambos os aplicativos são executados e apenas um deles é proxied por nginx, ele funciona bem.

Obrigado pela ajuda.

    
por Patryk Dobrowolski 01.06.2015 / 17:57

2 respostas

1

Patryk, infelizmente você não pode definir mais de um servidor HTTPS baseado em nome. As explicações são longas, mas você pode checar aqui para algumas informações indeep e exemplos (baseado em apache, não tem idéia sobre nginx)

    
por 01.06.2015 / 18:09
0

Você pode usar mais de um site https.

A tecnologia é chamada SNI, ou indicação do nome do servidor. Referência

Ao mover a parte ssl para fora das configurações do servidor, você também reduz o overhaed para configurar os certificados. Eu uso a seguinte estrutura em meus proxies reversos:

sites.d/ | -ssl.conf | -vhost1.conf | -vhost2.conf

ssl.conf então contém:

ssl_certificate /etc/ssl/certs/ssl.crt; ssl_certificate_key /etc/ssl/certs/server.key;

Outra opção seria o uso de certificados separados com nomes comuns diferentes.

    
por 01.06.2015 / 19:58