buat nginx abaikan konfigurasi situs saat upstreamnya tidak dapat dijangkau

12

Ada beberapa konfigurasi situs di nginx saya, dan ketika saya me-restart mesin, jika salah satu hulu situs tidak dapat dijangkau, nginx tidak akan memulai sama sekali, dan situs yang sehat itu tidak akan mulai sebagai hasilnya, bagaimana membiarkan nginx abaikan situs yang tidak valid itu?

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

dan situs-enabled / example1 adalah

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

dan situs-enabled / example2 adalah

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

Ketika saya me-restart mesin dan pada saat itu example2.service.example.com sedang down, nginx tidak akan memulai sama sekali, yaitu bahkan example1.service.example.com tersedia, nginx tidak akan melayani sebagai contoh1

===== update Penjelasan "sedang down": Semua subdomain secara otomatis terdaftar / dideregistrasi di server dns saya sendiri, jadi jika servernya down, dns akan merespon tidak ada domain seperti itu ketika mencoba menyelesaikannya.

cgcgbcbc
sumber
Bisakah Anda menunjukkan konfigurasi Anda?
Tero Kilkanen
@TeroKilkanen menambahkan.
cgcgbcbc
@ AD7six ya, maksud saya hulu tidak menyelesaikan, lihat pembaruan pertanyaan untuk lebih jelasnya
cgcgbcbc
Saya tidak berpikir Anda bisa memaksa nginx untuk memulai dengan apa yang bermuara pada konfigurasi yang buruk. Karena Anda mengontrol DNS, mungkin atur untuk mengembalikan hasil yang valid dengan nginx menggunakan cache penyelesai pendek.
AD7six
@ AD7six akankah cadangan di hulu bekerja di sekitar? Maksud saya jika saya menambahkan host lain (yang akan selalu dapat diselesaikan) di hulu sebagai cadangan, akankah nginx memulai ketika hulu normal tidak dapat menyelesaikan?
cgcgbcbc

Jawaban:

15

Akhirnya saya menemukan solusi, menyelesaikan lokasi domain insdie berfungsi!

contoh:

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

Dan nginx tidak akan mencoba menyelesaikannya http://something.service.lab.mudi waktu mulai.

cgcgbcbc
sumber
1
Tidak bekerja untuk saya. Ketika melakukan proxy_pass $target;, saya mendapatkan "502 Bad Gateway", proxy_pass http://$targetmemberi saya "500 Server Internal Kesalahan". Saat itulah Nginx sebenarnya mampu menyelesaikan host.
kba
3
Dengan tambahan @ EmilBurzo, ini berfungsi.
kba
13

Bagi siapa pun yang menemukan masalah ini, @cgcgbcbc benar.

Tetapi Anda juga perlu menambahkan

resolver 8.8.8.8;

arahan di atas

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

jika tidak, Anda akan mendapatkan kesalahan di nginx, seperti:

no resolver defined to resolve
Emil Burzo
sumber