spraw, aby nginx zignorował konfigurację witryny, gdy nie można uzyskać do niego dostępu

12

W moim nginx jest wiele konfiguracji witryny, a kiedy ponownie uruchomię maszynę, jeśli nie można uzyskać dostępu do jednego z nich, nginx w ogóle się nie uruchomi, a te zdrowe witryny nie uruchomią się, jak pozwolić Nginx zignorować te nieprawidłowe witryny?

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

a obsługa witryn / przykład1 to

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

a obsługa witryn / przykład2 to

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

Kiedy zrestartuję komputer i w tym czasie przykład2.service.example.com jest wyłączony, nginx w ogóle się nie uruchomi, tzn. Nawet przykład1.service.example.com jest dostępny, nginx nie będzie działał na przykład1

===== aktualizacja Wyjaśnienie „nie działa”: Wszystkie subdomeny są automatycznie rejestrowane / wyrejestrowywane na moim własnym serwerze dns, więc jeśli serwer jest wyłączony, dns nie odpowie na taką domenę przy próbie jej rozwiązania.

cgcgbcbc
źródło
Czy możesz pokazać swoją konfigurację?
Tero Kilkanen
Dodano @TeroKilkanen.
cgcgbcbc
@ AD7six tak, mam na myśli, że upstream nie rozwiązuje problemu, zobacz aktualizację pytania, aby uzyskać więcej informacji
cgcgbcbc
Nie sądzę, że możesz zmusić nginx do rozpoczęcia od tego, co sprowadza się do złej konfiguracji. Ponieważ kontrolujesz DNS, być może ustaw go tak, aby zwracał prawidłowy wynik w nginx przy użyciu krótkiej pamięci podręcznej resolvera.
AD7six,
@ AD7six czy kopia zapasowa w upstream będzie działać? Mam na myśli, że jeśli dodam inny host (który zawsze będzie możliwy do rozwiązania) w kopii zapasowej, czy nginx uruchomi się, gdy normalny protokół pobierania nie może rozwiązać?
cgcgbcbc

Odpowiedzi:

15

W końcu dowiaduję się, że rozwiązanie problemu z lokalizacją insdie domeny działa!

przykład:

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

A Nginx nie będzie próbował rozwiązać http://something.service.lab.muw momencie rozpoczęcia.

cgcgbcbc
źródło
1
Nie działało dla mnie. Kiedy to robię proxy_pass $target;, dostaję „502 Bad Gateway”, proxy_pass http://$targetdaje mi „500 Internal Server Error”. Wtedy Nginx jest w stanie rozwiązać hosta.
kba
3
Z dodatkiem @ EmilBurzo to działa.
kba
13

Dla każdego, kto natknie się na ten problem, @cgcgbcbc ma rację.

Ale musisz także dodać

resolver 8.8.8.8;

dyrektywa powyżej

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

w przeciwnym razie pojawi się błąd w nginx, na przykład:

no resolver defined to resolve
Emil Burzo
źródło