a nginx não ouve a porta 80 duas vezes?
Editar: leia isto, primeiro:
para além da resposta aceite, estes erros ocorrem quando a nginx é iniciada Sem systemd. Kill nginx: ps -ax | grep nginx
→ find the nginx master pid → kill ###
; Executar nginx com systemd: systemctl start nginx
.
Se o systemctl não for usado para iniciar o nginx, o systemctl parar o nginx não parece funcionar (pelo menos no meu servidor); por isso, o systemctl reiniciar o nginx dá este erro quando tenta iniciar o nginx um segundo tempo.
Sobre a minha configuração. Estou no Debian 10, Buster, com um servidor ao vivo. Eu testei ambos os nomes de domínio, e eles transmitem por si mesmos usando esses arquivos de configuração, mas eles não transmitem quando ambos os arquivos de configuração estão ativos. O que estou a tentar fazer ... Como posso criar dois sítios Web num único endereço ip usando a nginx?mensagem(s) de erro:
nginx: [emerg] a duplicate default server for 0.0.0.0:80 in /etc/nginx/sites-enabled/example.com:22
linha 2.
nginx: [emerg] a duplicate default server for 0.0.0.0:443 in /etc/nginx/sites-enabled/example.com:22
linha 2. default_server
é utilizado no Porto 443.
nginx: [emerg] duplicate listen options for [::]:443 in /etc/nginx/sites-enabled/example.com:23
linha 3. default_server
tentado como http2
num ficheiro e é usada a porta 443.
nginx: [emerg] duplicate listen options for [::]:80 in /etc/nginx/sites-enabled/example.com:23
linha 3. default_server
tentei como http2
num ficheiro.
nginx: [emerg] invalid parameter "example.com" in /etc/nginx/sites-enabled/example.com:23
linha 3: default_server
tentou como example.com
ficheiros de Configuração (Sem comentários):
existem dois desses arquivos (código visto abaixo). Meus arquivos de configuração são exatamente como visto no bloco de código abaixo com apenas uma diferença: em ambos os arquivos, example.com
é um nome de domínio real e único que eu possuo.
A Minha os ficheiros de configuração vivem em /etc/nginx/sites-available
, e estão ligados a /etc/nginx/sites-enabled
.
server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;
root /var/www/example.com; #example.com is different in both files.
index index.html index.htm index.nginx-debian.html;
server_name example.com www.example.com; #example.com is different in both files.
location / {
try_files $uri $uri/ =404;
}
}
dissonância Primária:
outra questão de pilha diz para reescrever estas linhas ou comentar uma delas. As reescritas ou não resolvem o erro ou resultam em uma situação em que os arquivos não são servidos publicamente (example.com não vai a lado nenhum).
resumo:
esta pergunta parece ser sobre a linha 2, linha 3, ou linha 2 e 3.
Essencialmente, todos os principais how-to's ou diz expressamente ao leitor para usar o código acima - ou - eles não mencionam estas linhas.4 answers
Quando indicar a opção default_server
numa directiva listen
, o nginx irá usar esse server
bloco para servir qualquer pedido em que o cabeçalho HTTP Host
não corresponda ao server_name
em qualquer outro bloco do servidor (ou o cabeçalho Host
em falta). Você pode usar a opção default_server
em qualquer IP: combinação de portos dada como parâmetro da Directiva listen
apenas uma vez. Mas você pode usar esta bandeira várias vezes em diferentes IP:combinações de portas.
Alguns exemplos, assumindo que o seu servidor tem várias redes interfaces:
server {
listen 1.2.3.4:80 default_server; # this will be default server block for any request coming to 1.2.3.4 IP address on port 80
...
}
server {
listen 5.6.7.8:80 default_server; # this will be default server block for any request coming to 5.6.7.8 IP address on port 80
...
}
server {
listen 80 default_server; # this will be default server block for any request coming to any other IP address (except 1.2.3.4 and 5.6.7.8) on port 80
...
}
Exemplo de trabalho:
Normalmente, quando preciso de servir vários sites no mesmo servidor, uso a seguinte configuração (claro que isto é simplificado, hoje em dia normalmente usamos HTTPS com http://example.com
para https://example.com
redireccionamento):
Ficheiro de configuração do 'Site 1'
server {
listen 80;
server_name example1.com www.example1.com;
...
}
Ficheiro de configuração do 'Site 2'
server {
listen 80;
server_name example2.com www.example2.com;
...
}
Ficheiro de configuração do servidor por omissão
server {
listen 80 default_server;
server_name _;
return 444;
}
Por causa da bandeira default_server
na listen
directiva, o terceiro bloco do servidor é usado quando o cabeçalho Host
do request não contém nenhum dos nomes dos meus sites (ou o pedido não tem nenhum cabeçalho Host
). Eu não espero visitantes que não saiba que site eles estão visitando (estes são tipicamente scanners portuários, buscadores de vulnerabilidade, etc.), então eu uso código especial nginx 444 (fechar conexão sem qualquer resposta) para eles.
Como a mensagem de erro sugere, não pode ter dois ouvintes predefinidos no mesmo endereço IP e Porto. Remover default_server
das declarações listen
num ou em ambos os blocos do seu servidor.
listen 80;
listen [::]:80 ipv6only=on;
Você não pode executar duas aplicações no mesmo endereço com o mesmo Porto.
O que você precisa fazer é apenas mudar o porto de sua aplicação um com 80 e outro aplicativo com algum outro porto digamos 3000.
Se quiser que a sua aplicação corra apenas com 80 portas do que apenas remover o ficheiro por omissão de
/etc/nginx/sites-available/default
E , opcionalmente, também de
/etc/nginx/sites-enabled/default
Podes correr
sudo rm -rf /etc/nginx/sites-available/default
sudo rm -rf /etc/nginx/sites-enabled/default
Agora você será capaz para executar uma das suas aplicações no porto 80
Uso um certificado ssl gratuito que só pode assinar num nome de máquina. Por isso, aplico três certificados ssl.
server {
listen 443 backlog=50000;
server_name example1.com;
server {
listen 443;
server_name example2.com;
server {
listen 443 backlog=50000;
server_name example3.com;
Quando USO nginx -t
para testar o ficheiro de configuração, ele mostra
Eu arranjei-o por ... remover oNginx: [emerg] duplicate listen options for 0. 0. 0. 0: 443 in /etc/nginx / conf.d / example1_ https.conf: 2
Nginx: ficheiro de configuração /etc/nginx / nginx.teste conf falhou
backlog=50000
do example3.com