उप डोमेन के लिए नेगनेक्स परस्पर विरोधी सर्वर नाम


15

मैं वर्तमान में foo.domain.com के लिए Nginx पर एक vhost चला रहा हूं और सब कुछ बहुत अच्छा काम करता है।

मैंने एक नई उप-डोमेन के लिए एक नई फ़ाइल बनाई है जिसे मैं bar.domain.com जोड़ना चाहता हूं। मैं दोनों के लिए समान सेटिंग्स का उपयोग करता हूं।

जब मैं Nginx को पुनः आरंभ करता हूं तो मुझे मिलता है

Restarting nginx: nginx: [warn] conflicting server name "" on 0.0.0.0:443, ignored nginx.

जब मैं bar.domain.com पर जाता हूं, तो मैं वह देखता हूं जो मैं देखने वाला हूं, लेकिन जब मैं foo.domain.com पर जाता हूं, तो मैं उस पृष्ठ को देखता हूं जो bar.domain.com लिंक करता है।

फू

upstream php-handler {
    server unix:/var/run/php5-fpm.sock;
}

server {
        listen 80;
        server_name foo.domain.com;
        return 301 https://$server_name$request_uri;
}

server {
        listen 443;

        ssl on;
        ssl_certificate      [path_foo]/cacert.pem;
        ssl_certificate_key  [path_foo]/privkey.pem;

        root [path]/foo;

        ...
}

बार

server {
        listen 80;
        server_name bar.domain.com;
        return 301 https://$server_name$request_uri;
}

server {
        listen 443;

        ssl on;
        ssl_certificate      [path_bar]/cacert.pem;
        ssl_certificate_key  [path_bar]/privkey.pem;

        root [path]/bar;
}

मुझसे कहां गलती हो रही है?


आपको server_nameSSL (443) कॉन्फिगर करने की आवश्यकता है ।
जकजन

जैसा कि listen 443प्रत्येक सर्वर में जोड़ने के बाद server_name [foo/bar].domain.com?
रॉकजेक

जवाबों:


10

मुझे ऐसा लगता है जैसे आपके https ब्लॉक को सर्वर नाम की आवश्यकता है जैसे कि

server {
    listen 443;
    server_name bar.domain.com;
    ssl on;
    ssl_certificate      [path_bar]/cacert.pem;
    ssl_certificate_key  [path_bar]/privkey.pem;

    root [path]/bar;
}

3

आपके पास अतिरिक्त फ़ाइलें भी हो सकती हैं जो इससे /etc/nginx/sites-available/<site-name>जुड़ी हुई हैं /etc/nginx/sites-enabled/<site-name>

उन फ़ाइलों में सेटिंग्स /etc/nginx/sites-available/defaultफ़ाइल के साथ विरोध कर सकते हैं


3

जब मैंने गलती से सर्वर नाम डुप्लिकेट किया था तो मेरे पास एक समान मुद्दा था:

server_name myserver.example.com myserver.example.com;

इसे बदलकर फिक्स्ड:

server_name myserver.example.com;

मेरे मामले में, मेरे पास गलती से एक ही साथ दो अलग-अलग vhosts थे server_name; मेरे पास वर्षों से उस कॉन्फ़िगरेशन है और उस त्रुटि संदेश के बारे में बहुत चिंतित नहीं है। यह पता चला है कि मैं ग़लती से एक vhost शुरू कर रहा था जो सिर्फ एक टेम्पलेट होना चाहिए था
Gwyneth Llewelyn

2

इसके अलावा /etc/nginx/conf.dडुप्लिकेट के लिए प्रत्येक फ़ाइल की जाँच करें ।

मेरे मामले में, nginx -tउत्तीर्ण किए गए परीक्षण - मुझे वह त्रुटि संदेश मिला जब नेगनेक्स शुरू करने का प्रयास किया गया था।

मेरी /etc/nginx/sites-enabledफाइलें डोमेन (सर्वर नाम) डुप्लिकेट से मुक्त थीं, और इसमें केवल 1 संदर्भ था server_default(और कोई localhostडुप्लिकेट नहीं )

इसके बजाय, इसमें 2 फाइलें थीं, conf.dदोनों ने एक विशेष डोमेन को संदर्भित किया (यानी 2 फाइलों में एक लाइन थी जैसे:, servername mydomain.comजहां एक डोमेन नाम 2 फाइलों में सूचीबद्ध था)।

मेरा समाधान: इसलिए सुनिश्चित करें कि सभी फाइलें conf.dकेवल किसी भी विशेष servername(डोमेन नाम) मान को एक बार में देखें।


( दुर्भाग्य से उपरोक्त मुद्दे को ठीक करने के बाद, मुझे अब मिल गया है:
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use) त्रुटि संदेश जब मैं nginx को पुनरारंभ करने का प्रयास करता हूं।)

अद्यतन : FYI करें, फिर: ... Address already in useत्रुटि संदेश ऊपर:
सभी मुझे क्या करना था sudo fuser -k 80/tcpतो service nginx restartएक आकर्षण की तरह काम किया!
मुझे यहाँ उत्तर मिला: https://easyengine.io/tutorials/nginx/troublesourcing/emerg-bind-failed-98-address-already-in-use/

अपडेट 2 :
यह सुझाव दिया गया है कि एक और प्रक्रिया पोर्ट 80 का उपयोग कर रही थी, (इसीलिए इसे मारना काम कर रहा था, और यह भी समझ में आता है कि b / c nginx उस समय नहीं चल रहा था )।
https://community.letsencrypt.org/t/nginx-emerg-bind-to-80-failed-98-address-already-in-use/52914/4

वे यह भी बताते हैं कि इस प्रक्रिया को देखने से पहले, इसे मारने से पहले, इस मुद्दे के कारण पर जानकारी प्रदान कर सकते हैं।
इसलिए, संभवतः या तो उपयोग करना बेहतर है: sudo fuser -k 80/tcp(-k विकल्प के बिना), इसके बाद grepउन प्रक्रिया संख्याओं के लिए।
systemctl list-unit-filesआउटपुट, परस्पर विरोधी प्रक्रिया पर अंतर्दृष्टि प्रदान कर सकता है

या:,
fuser -kivn tcp 80जहां:
-vप्रक्रिया आईडी के अलावा प्रक्रिया का नाम प्रिंट
-iकरता है, यह https://community.letsencrypt.org/t/nginx-emerg-bind-to-80-failed-98-address-already को मारने से पहले उसे शीघ्र बनाता है।
में उपयोग / 52914/5


0

मेरे मामले में, मुझे कोई डुप्लिकेट नहीं मिला। हालाँकि, मेरे पास default.conf था जहाँ मैंने सर्वर को खोलने और ब्रैकेट को बंद करने के अलावा सभी कॉन्फिगरेशन पर टिप्पणी की थी ... और इससे परस्पर विरोधी त्रुटि उत्पन्न हुई।

असल में, यह सर्वर ब्लॉक के बिना एक सर्वर_नाम निर्देश के बिना अस्वीकार्य था जो समस्या का कारण था, डुप्लिकेट नहीं।

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