Nome do servidor conflitante Nginx para subdomínio

14

Atualmente, tenho um vhost rodando no Nginx para foo.domain.com e tudo funciona muito bem.

Criei um novo arquivo para um novo subdomínio que desejo adicionar chamado bar.domain.com. Eu uso as mesmas configurações para ambos.

Quando reinicio o Nginx, recebo

Restarting nginx: nginx: [warn] conflicting server name "" on 0.0.0.0:443, ignored nginx.

Quando vou para bar.domain.com, vejo o que devo ver, mas quando vou para foo.domain.com, vejo a página à qual bar.domain.com está vinculado.

Foo

upstream php-handler {
    server unix:/var/run/php5-fpm.sock;
}

server {
        listen 80;
        server_name foo.domain.com;
        return 301 https://$server_name$request_uri;
}

server {
        listen 443;

        ssl on;
        ssl_certificate      [path_foo]/cacert.pem;
        ssl_certificate_key  [path_foo]/privkey.pem;

        root [path]/foo;

        ...
}

Barra

server {
        listen 80;
        server_name bar.domain.com;
        return 301 https://$server_name$request_uri;
}

server {
        listen 443;

        ssl on;
        ssl_certificate      [path_bar]/cacert.pem;
        ssl_certificate_key  [path_bar]/privkey.pem;

        root [path]/bar;
}

Onde eu estou errando?

RockJake28
fonte
Você precisa especificar também server_namena configuração SSL (443).
23415 zakjan
Como depois listen 443em cada servidor adicionar server_name [foo/bar].domain.com?
RockJake28

Respostas:

9

Parece-me que seus blocos https também precisam de nomes de servidor especificados, por exemplo,

server {
    listen 443;
    server_name bar.domain.com;
    ssl on;
    ssl_certificate      [path_bar]/cacert.pem;
    ssl_certificate_key  [path_bar]/privkey.pem;

    root [path]/bar;
}
Lloyd Wilson
fonte
3

Você também pode ter arquivos adicionais aos /etc/nginx/sites-available/<site-name>quais está vinculado /etc/nginx/sites-enabled/<site-name>.

As configurações nesses arquivos podem entrar em conflito com o /etc/nginx/sites-available/defaultarquivo

hanxue
fonte
3

Eu tive um problema semelhante quando acidentalmente tive o nome de servidor duplicado:

server_name myserver.example.com myserver.example.com;

Corrigido alterando-o para:

server_name myserver.example.com;
Steve Tauber
fonte
No meu caso, eu acidentalmente tinha dois fantasmas separados com o mesmo server_name; Eu tenho essa configuração há anos e nunca me preocupei muito com essa mensagem de erro. Acontece que eu estava iniciando erroneamente um vhost que deveria ser apenas um modelo 😮
Gwyneth Llewelyn
2

Além disso, verifique cada arquivo em /etc/nginx/conf.dbusca de duplicatas.

No meu caso, nginx -tpassei nos testes - recebi essa mensagem de erro ao tentar iniciar o nginx.

Meus /etc/nginx/sites-enabledarquivos estavam livres de duplicatas de domínio (nome do servidor) e tinham apenas 1 referência a server_default(e sem localhostduplicatas)

Em vez disso, havia 2 arquivos em conf.dque ambos referenciavam um domínio específico (ou seja, 2 arquivos tinham uma linha como:, servername mydomain.comonde um dos nomes de domínio estava listado em 2 arquivos).

Minha solução: verifique se todos os arquivos conf.dfazem referência apenas a qualquer valor específico servername(nome de domínio) uma vez, no máximo.


( infelizmente, depois de corrigir o problema acima, agora recebo:
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use) mensagens de erro quando tento reiniciar o nginx.)

update : FYI, Re: ... Address already in usemensagem de erro acima:
Tudo o que eu tinha a fazer era sudo fuser -k 80/tcp, em seguida, service nginx restarttrabalhou como um encanto!
Encontrei a resposta aqui: https://easyengine.io/tutorials/nginx/trou Troubleshooting / emerg - bind - failed - 98 - address - already-in - use/

update2 :
Foi sugerido que outro processo estava usando a porta 80, (é por isso que matá-lo funcionou e também faz sentido porque o b / c nginx não estava sendo executado no momento).
https://community.letsencrypt.org/t/nginx-emerg-bind-to-80-failed-98-address-already-in-use/52914/4

Eles também apontam que ver o processo, antes de matá-lo, pode fornecer informações sobre o que causou o problema.
Portanto, provavelmente é melhor usar: sudo fuser -k 80/tcp(sem a opção -k), seguido de a greppara esses números de processo.
systemctl list-unit-filessaída, pode fornecer informações sobre processos conflitantes

ou:, em
fuser -kivn tcp 80que:
-vimprime o nome do processo, além da identificação do processo
-i, avisa antes de matar
https://community.letsencrypt.org/t/nginx-emerg-bind-to-80-failed-98-address-already- em uso / 52914/5

SherylHohman
fonte
0

No meu caso, não consegui encontrar nenhuma duplicata. No entanto, eu tinha o default.conf onde comentei toda a configuração, exceto o bloco do servidor de abertura e o colchete de fechamento ... e isso causou o erro conflitante.

Basicamente, era um bloco de servidor não contabilizado SEM uma diretiva server_name que causou o problema, não uma duplicada.

Dario Zadro
fonte