hacer que nginx ignore la configuración del sitio cuando no se puede alcanzar su flujo ascendente

11

Hay múltiples configuraciones de sitio en mi nginx, y cuando reinicio la máquina, si no se puede acceder a uno de los sitios aguas arriba, nginx no se iniciará en absoluto, y ese sitio saludable no se iniciará como resultado, cómo dejar nginx ignora esos sitios inválidos?

http {

##
# Basic Settings
##

sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
# server_tokens off;

# server_names_hash_bucket_size 64;
# server_name_in_redirect off;

include /etc/nginx/mime.types;
default_type application/octet-stream;

##
# Logging Settings
##

access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;

##
# Gzip Settings
##

gzip on;
gzip_disable "msie6";

# gzip_vary on;
# gzip_proxied any;
# gzip_comp_level 6;
# gzip_buffers 16 8k;
# gzip_http_version 1.1;
# gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

##
# nginx-naxsi config
##
# Uncomment it if you installed nginx-naxsi
##

#include /etc/nginx/naxsi_core.rules;

##
# nginx-passenger config
##
# Uncomment it if you installed nginx-passenger
##

#passenger_root /usr;
#passenger_ruby /usr/bin/ruby;

##
# Virtual Host Configs
##

include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}

y sites-enabled / example1 es

upstream example1 {
    server example1.service.example.com;
}
server {
listen 80;
server_name example1.com;
location / {
    proxy_pass http://example1/;
    proxy_set_header X-Forwarded-For $remote_addr;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
}
}

y sites-enabled / example2 es

upstream example2 {
    server example2.service.example.com;
}
server {
listen 80;
server_name example2.com;
location / {
    proxy_pass http://example2/;
    proxy_set_header X-Forwarded-For $remote_addr;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
}
}

Cuando reinicio la máquina y en ese momento example2.service.example.com está inactivo, nginx no se iniciará en absoluto, es decir, incluso example1.service.example.com está disponible, nginx no servirá por ejemplo1

===== actualización Explicación de "está inactivo": todos los subdominios se registran / anulan automáticamente en mi propio servidor dns, por lo que si el servidor está inactivo, el dns no responderá a dicho dominio cuando intente resolverlo.

cgcgbcbc
fuente
¿Podrías mostrar tu configuración?
Tero Kilkanen
@TeroKilkanen agregado.
cgcgbcbc
@ AD7six sí, quiero decir que el flujo ascendente no se resuelve, consulte la actualización de la pregunta para obtener más detalles
cgcgbcbc
No creo que pueda forzar a nginx a comenzar con lo que se reduce a una mala configuración. Como controlas el DNS, quizás configúralo para que devuelva un resultado válido con nginx usando un caché de resolución corto.
AD7six
¿@ AD7six haría una copia de seguridad en una solución alternativa? Quiero decir, si agrego otro host (que siempre será resoluble) en el flujo ascendente como respaldo, ¿se iniciará nginx cuando el flujo ascendente normal no pueda resolverse?
cgcgbcbc

Respuestas:

14

Finalmente descubro el recorrido, ¡resuelvo que la ubicación del dominio interno funciona!

ejemplo:

server {
    listen 9000;
    server_name example1.example.com;
    location / {
        set $target http://something.service.lab.mu;
        proxy_pass http://$target;
    }
}

Y nginx no intentará resolver http://something.service.lab.mua la hora de inicio.

cgcgbcbc
fuente
1
No funciono para mi. Al hacerlo proxy_pass $target;, obtengo "502 Bad Gateway", proxy_pass http://$targetme da "500 Internal Server Error". Es entonces cuando Nginx es capaz de resolver el host.
kba
3
Con la incorporación de @ EmilBurzo, esto funciona.
kba
13

Para cualquiera que se encuentre con este problema, @cgcgbcbc es correcto.

Pero también necesitas agregar un

resolver 8.8.8.8;

directiva sobre el

set $target http://something.service.lab.mu;

de lo contrario, obtendrá un error en nginx, como:

no resolver defined to resolve
Emil Burzo
fuente