कई एसएसएल vhosts nginx में वाइल्डकार्ड प्रमाण पत्र का उपयोग कर


14

मेरे पास एक ही डोमेन नाम साझा करने वाले दो होस्टनाम हैं जो मैं HTTP पर सेवा करना चाहता हूं। मुझे वाइल्डकार्ड-एसएसएल प्रमाणपत्र मिला है और दो वीएचएस कॉन्फ़िगरेशन बनाए गए हैं:

होस्ट ए

listen      127.0.0.1:443 ssl;
server_name     a.example.com;
root        /data/httpd/a.example.com;
ssl_certificate /etc/ssl/wildcard.cer;
ssl_certificate_key /etc/ssl/wildcard.key;

मेजबान बी

listen      127.0.0.1:443 ssl;
server_name     b.example.com;
root        /data/httpd/b.example.com;
ssl_certificate /etc/ssl/wildcard.cer;
ssl_certificate_key /etc/ssl/wildcard.key;

हालाँकि, मुझे वही होस्टल होस्टनाम के लिए दिया गया है।

जवाबों:


17

आपको ssl सुनने / विन्यास भाग से vhosts को विभाजित करने की आवश्यकता है:

सुनकर भाग:

server {
  listen              127.0.0.1:443 default_server ssl;
  server_name         _;
  ssl_certificate     /etc/ssl/wildcard.cer;
  ssl_certificate_key /etc/ssl/wildcard.key;
}

और अब vhosts:

server {
  listen      127.0.0.1:443;
  server_name a.example.com;
  root        /data/httpd/a.example.com;
}

server {
  listen      127.0.0.1:443;
  server_name b.example.com;
  root        /data/httpd/b.example.com;
}

यह काम नहीं करेगा। एक vhost की जरूरत है ssl_certificateऔर ssl_certificate_keyइसे अंदर serverया httpस्थान पर कॉन्फ़िगर किया जाना चाहिए । आपके उदाहरण में, आपने इसे पहले serverस्थान के अंदर घोषित किया है , लेकिन अन्य दो vhosts के लिए इसे घोषित नहीं किया है।
पोथी कालीमुथु

2
यह कॉन्फ़िगर करने के लिए पर्याप्त है ssl_certificate, ssl_certificate_keyऔर ssldefault_server पर ही। BTW, यह विन्यास वास्तव में काम करता है।
टेफिन

दुर्भाग्य से यह काम नहीं करता है: nginx दोनों मेजबान पर एक ही vhost सामग्री प्रदान करता है।
विन्सेंट.आईओ

2
जाहिरा तौर पर आपको इन परिवर्तनों को करने के दौरान इसे फिर से लोड करने के बजाय nginx को पुनरारंभ करने की आवश्यकता है । बहुत धन्यवाद, आपका जवाब एक आकर्षण की तरह काम करता है :)
vincent.io

1
इस के लिए धन्यवाद, मैं की जरूरत sslपर listenएक 1.4.x nginx साथ काम करने के लिए इस के लिए निर्देश। listenVhosts में मेरे निर्देशों का भी शाब्दिक रूप से एक ही होना था (तार्किक समानता पर्याप्त नहीं थी)।
डेव एस।

13

यह वास्तव में मैनुअल में समझाया गया है: http://nginx.org/en/docs/http/configuring_https_servers.html#certificate_with_several_names

ssl_certificate /etc/ssl/wildcard.cer;
ssl_certificate_key /etc/ssl/wildcard.key;
server {
  listen      443 ssl;
  server_name a.example.com;
  root        /data/httpd/a.example.com;
}
server {
  listen      443 ssl;
  server_name b.example.com;
  root        /data/httpd/b.example.com;
}

अब, यदि आपके पास कई साइटें हैं, तो मैं उन सभी को फ़ोल्डर में केवल सर्वर {} भाग के साथ एकल फ़ाइलों में संग्रहीत करने का सुझाव देता हूं, और उन सभी को लोड करने के लिए मुख्य फ़ाइल में निर्देश शामिल करता हूं:

ssl_certificate /etc/ssl/wildcard.cer;
ssl_certificate_key /etc/ssl/wildcard.key;
include /etc/nginx/conf.d/subfolder/*;
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.