Lassen Sie nginx die Site-Konfiguration ignorieren, wenn der Upstream nicht erreicht werden kann

10

In meinem Nginx gibt es mehrere Site-Konfigurationen. Wenn ich den Computer neu starte und einer der Upstreams der Sites nicht erreicht werden kann, wird Nginx überhaupt nicht gestartet, und diese fehlerfreie Site wird nicht gestartet Nginx diese ungültigen Websites ignorieren?

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/*;
}

und sites-enabled / example1 ist

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;
}
}

und sites-enabled / example2 ist

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;
}
}

Wenn ich den Computer neu starte und zu diesem Zeitpunkt example2.service.example.com nicht verfügbar ist, wird nginx überhaupt nicht gestartet, dh sogar example1.service.example.com ist verfügbar, nginx wird beispielsweise nicht bereitgestellt1

===== update Erläuterung von "is down": Alle Subdomains werden automatisch auf meinem eigenen DNS-Server registriert / abgemeldet. Wenn der Server also nicht verfügbar ist, antwortet der DNS nicht auf eine solche Domain, wenn er versucht, sie aufzulösen.

cgcgbcbc
quelle
Könnten Sie Ihre Konfiguration zeigen?
Tero Kilkanen
@TeroKilkanen hinzugefügt.
cgcgbcbc
@ AD7six ja, ich meine, der Upstream löst sich nicht auf, siehe Frage Update für weitere Details
cgcgbcbc
Ich glaube nicht, dass Sie Nginx zwingen können, mit dem zu beginnen, was auf eine schlechte Konfiguration hinausläuft. Da Sie das DNS steuern, können Sie es möglicherweise so einrichten, dass mit einem kurzen Resolver-Cache ein gültiges Ergebnis mit nginx zurückgegeben wird.
AD7six
@ AD7six würde Backup im Upstream umgehen? Ich meine, wenn ich einen anderen Host (der immer auflösbar ist) im Upstream als Backup hinzugefügt hätte, würde nginx dann gestartet, wenn der normale Upstream nicht aufgelöst werden kann?
cgcgbcbc

Antworten:

14

Schließlich finde ich den Walkaround heraus, löse die Domain insdie Location funktioniert!

Beispiel:

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

Und nginx wird nicht versuchen, http://something.service.lab.muzur Startzeit eine Lösung zu finden.

cgcgbcbc
quelle
1
Hat bei mir nicht funktioniert. Wenn proxy_pass $target;ich dies tue , erhalte ich "502 Bad Gateway" und erhalte " proxy_pass http://$target500 Internal Server Error". In diesem Fall kann Nginx den Host tatsächlich auflösen.
kba
3
Mit der Hinzufügung von @ EmilBurzo funktioniert dies.
kba
13

Für alle, die über dieses Problem stolpern, ist @cgcgbcbc korrekt.

Sie müssen aber auch ein hinzufügen

resolver 8.8.8.8;

Richtlinie über der

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

Andernfalls wird in nginx eine Fehlermeldung angezeigt:

no resolver defined to resolve
Emil Burzo
quelle