जब अपने अपस्ट्रीम तक नहीं पहुंचा जा सकता है, तो nginx को अनदेखा करें


12

मेरे nginx में कई साइट कॉन्फिगर हैं, और जब मैं मशीन को पुनः आरंभ करता हूं, अगर किसी एक साइट के अपस्ट्रीम तक नहीं पहुंचा जा सकता है, तो nginx बिल्कुल भी शुरू नहीं होगा, और उन स्वस्थ साइट के परिणामस्वरूप शुरू नहीं होगा, कैसे जाने दें nginx उन अमान्य साइटों को अनदेखा करता है?

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

और साइट-सक्षम / example1 है

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

और साइट-सक्षम / example2 है

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

जब मैं मशीन को पुनरारंभ करता हूं और उस समय example2.service.example.com नीचे होता है, तो nginx बिल्कुल भी शुरू नहीं होगा, अर्थात example1.service.example.com भी उपलब्ध है, nginx example1 के लिए सेवा नहीं देगा

===== अपडेट "डाउन है" का स्पष्टीकरण: सभी उप-डोमेन स्वचालित रूप से मेरे स्वयं के dns सर्वर पर पंजीकृत / deregistered हैं, इसलिए यदि सर्वर डाउन है, तो डीएनएस ऐसे किसी भी डोमेन का जवाब नहीं देगा जब इसे हल करने का प्रयास करें।


क्या आप अपना विन्यास दिखा सकते हैं?
तेरो किल्केन

@TeroKilkanen गयी।
cgcgbcbc

@ AD7six हाँ, मेरा मतलब है कि अपस्ट्रीम हल नहीं करता है, अधिक विवरण के लिए प्रश्न अद्यतन देखें
cgcgbcbc

मुझे नहीं लगता कि आप nginx को मजबूर कर सकते हैं कि वह खराब कॉन्फिगरेशन से उबरे। चूंकि आप DNS को नियंत्रित करते हैं, शायद इसे शॉर्ट रिज़ॉल्वर कैश का उपयोग करके nginx के साथ एक वैध परिणाम वापस करने के लिए सेट करें।
AD7six

@ AD7six अपस्ट्रीम के काम में बैकअप करेगा? मेरा मतलब है अगर मैंने बैकअप के रूप में अपस्ट्रीम में एक और होस्ट (जो हमेशा रिजॉल्वेबल रहेगा) जोड़ा, क्या नगीनक्स शुरू होगा जब सामान्य अपस्ट्रीम हल नहीं हो सकता है?
cgcgbcbc

जवाबों:


15

अंत में मुझे वॉकअराउंड का पता चला, डोमेन इंडी लोकेशन के कामों को हल किया!

उदाहरण:

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

और nginx http://something.service.lab.muशुरू समय में हल करने की कोशिश नहीं करेगा ।


1
मेरे लिए काम नहीं किया। करते समय proxy_pass $target;, मुझे "502 खराब गेटवे" मिलता है, proxy_pass http://$targetमुझे "500 आंतरिक सर्वर त्रुटि" देता है। यह तब है जब Nginx वास्तव में मेजबान को हल करने में सक्षम है।
kba

3
@ एमिलबर्ज़ो के साथ, यह काम करता है।
काबा

13

इस मुद्दे पर किसी की ठोकर के लिए, @cgcgbcbc सही है।

लेकिन आपको एक जोड़ने की भी आवश्यकता है

resolver 8.8.8.8;

ऊपर निर्देश

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

अन्यथा आपको nginx में एक त्रुटि मिलेगी, जैसे:

no resolver defined to resolve
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.