Tenho o nginx configurado para um dos meus domínios. Funciona como um frontend para o servidor de aplicativos Wildfly. Um dia resolvi configurar ambiente de testes beta na mesma máquina. Então adicionei outro subdomínio à configuração. Após reiniciar 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;
}
}
Preciso acrescentar que todas as configurações acima funcionam conforme o esperado quando estão sozinhas. Mas juntos eles não gostam um do outro. Solicitar o primeiro deles retorna o status HTTP NOT FOUND.
Claro, o problema pode estar localizado no meu servidor Wildfly. Ele 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 é proxy do nginx, funciona bem.
Obrigado pela ajuda.
Responder1
Patryk, infelizmente você não pode definir mais de um servidor HTTPS baseado em nome. As explicações são longas, mas você pode conferiraquipara obter algumas informações e exemplos detalhados (baseado em Apache, não tenho ideia sobre nginx)
Responder2
Você pode usar mais de um site https.
A tecnologia é chamada SNI, ou indicação de nome de servidor.Referência
Ao mover a parte SSL para fora das configurações do servidor, você também reduz a sobrecarga de configuração dos 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 a utilização de certificados separados com nomes comuns diferentes.