Tengo una aplicación Rails en marcha y funcionando en mi servidor y ahora me gustaría añadir otro.

Quiero Nginx para comprobar lo que la solicitud es para y dividir el tráfico basado en el nombre de dominio

Ambos sitios tienen sus propias nginx.conf se enlazan en sites-enabled, pero me da un error al iniciar el nginx Starting nginx: nginx: [emerg] duplicate listen options for 0.0.0.0:80 in /etc/nginx/sites-enabled/bubbles:6

Que están escuchando en los 80 pero para cosas diferentes.

Sitio #1

upstream blog_unicorn {
  server unix:/tmp/unicorn.blog.sock fail_timeout=0;
}

server {
  listen 80 default deferred;
  server_name walrus.com www.walrus.com;
  root /home/deployer/apps/blog/current/public;

  location ^~ /assets/{
    gzip_static on;
    expires max;
    add_header Cache-Control public;
  }

  try_files $uri/index.html $uri @blog_unicorn;
  location @blog_unicorn {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_redirect off;
    proxy_pass http://blog_unicorn;
  }

  error_page 500 502 503 504 /500.html;
  client_max_body_size 4G;
  keepalive_timeout 10;
}

Sitio dos:

upstream bubbles_unicorn {
  server unix:/tmp/unicorn.bubbles.sock fail_timeout=0;
}

server {
  listen 80 default deferred;
  server_name bubbles.com www.bubbles.com;
  root /home/deployer/apps/bubbles/current/public;

  location ^~ /assets/{
    gzip_static on;
    expires max;
    add_header Cache-Control public;
  }

  try_files $uri/index.html $uri @bubbles_unicorn;
  location @bubbles_unicorn {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_redirect off;
    proxy_pass http://bubbles_unicorn;
  }

  error_page 500 502 503 504 /500.html;
  client_max_body_size 4G;
  keepalive_timeout 10;
}
  • FYI, la sintaxis de ‘default’ cambia a ‘default_server’ en 0.8.21 nginx.org/en/docs/http/request_processing.html
  • Gracias, esta de repente se fijo en mi "default_server" parameter can be specified for the default "listen" directive only error
InformationsquelleAutor Chris | 2012-12-03

3 Comentarios

  1. 104

    La documentación dice:

    La default_server parámetro, si está presente, hacer que el servidor el servidor predeterminado para la dirección especificada:par de puertos.

    También es obvio, no puede ser sólo una defecto servidor.

    Y también se dice:

    Una directiva de escucha puede tener varios parámetros adicionales específicos a la toma relacionados con el sistema de llamadas. Se pueden especificar en cualquier directiva de escuchar, pero sólo una vez para la siguiente dirección:puerto de par.

    Así, usted debe quitar default y deferred de uno de los listen 80 directivas. Y lo mismo se aplica a ipv6only=on directiva así.

    • Bueno yo hice eso, y tiene más allá de la comprobación de errores en nginx partida. Sitio 2 funciona como se esperaba, el sitio 1 devuelve 400 de nginx. Alguna sugerencia?
    • Lo que está en el registro de error?
    • mismo como esto: stackoverflow.com/questions/7334193/… Sin errores pero «-» 400 0 «-» «-» en el registro de acceso
    • Si usted no tiene ningún error en nginx registro de error, a continuación, el error fue devuelto de unicornio. Revise. Para confirmar esta suposición puede intentar solicitar algún archivo estático de su /assets/ ubicación.
    • No le veo nada de malo allí. Si me golpeó la IP directamente, tengo Sitio 2 correctamente, pero el dominio devuelve el 400. Es este un problema de configuración de DNS? Estoy usando Un (Dirección), tanto para la www y @ a través de namecheap en ambos sitios. Uno funciona el otro no
    • Me pidió un activo directamente y 400 d así
    • Trate de revisar su dns usando herramientas en línea como intodns.com o dnscheck.pingdom.com
    • Ambas pruebas se presentaron 100% verde 🙁
    • Está vivo! Debe haber sido una propagación de las DNS problema, ya que ahora funciona como se esperaba. Gracias por la ayuda!
    • ipv6only=on ser de un solo uso directiva ha cogido a mí un par de veces ahora
    • Sólo quiero mencionar que service nginx reload no se aplican los cambios, pero service nginx restart hizo.

  2. 13

    Acaba de golpear a este mismo problema, pero el duplicado default_server directiva no fue la única causa de este mensaje.

    Sólo puede utilizar el backlog parámetro en uno de los server_name directivas.

    Ejemplo

    sitio 1:

    server {
        listen 80 default_server backlog=2048;
        server_name www.example.com;
        location /{
            proxy_pass http://www_server;
        }
    

    sitio 2:

    server {
        listen 80;    ## NOT NOT DUPLICATE THESE SETTINGS 'default_server backlog=2048;'
        server_name blogs.example.com;
        location /{
            proxy_pass http://blog_server;
        }
    
  3. 0

    Yo estaba teniendo el mismo problema. Me fijo por la modificación de mi /etc/nginx/sitios-disponible/ejemplo2.com archivo. He cambiado el servidor de bloque para

    server {
            listen 443 ssl; # modified: was listen 80;
            listen [::]:443; #modified: was listen [::]:80;
            . . .
    }
    

    Y en /etc/nginx/sitios-disponible/ejemplo1.com he comentado listen 80 y listen [::]:80 debido a que el bloque de servidor ya había sido configurado para 443.

Dejar respuesta

Please enter your comment!
Please enter your name here