हां, आपके पास HTTP सर्वरों के लिए nginx प्रॉक्सी अनुरोध हो सकते हैं, और फिर खुद HTTPS पर ग्राहकों को जवाब दे सकते हैं। ऐसा करते समय, आप यह सुनिश्चित करना चाहेंगे कि nginx <-> प्रॉक्सी कनेक्ट होने की संभावना नहीं है जो भी आपका अपेक्षित हमलावर है। सुरक्षित-पर्याप्त दृष्टिकोणों में शामिल हो सकते हैं:
- एक ही मेजबान के लिए निकटता (जैसा कि आप करते हैं)
- अपने फ़ायरवॉल के पीछे अन्य मेजबानों के निकट
सार्वजनिक इंटरनेट पर किसी अन्य होस्ट की प्रॉक्सी सुरक्षित-पर्याप्त होने की संभावना नहीं है।
यहाँ उन्हीं वेबसर्वर का उपयोग कर एक लेट्स एनक्रिप्ट सर्टिफिकेट प्राप्त करने के निर्देश हैं जो आप प्रॉक्सी के रूप में उपयोग कर रहे हैं।
लेट्स एनक्रिप्ट से अपने प्रारंभिक प्रमाणपत्र का अनुरोध करना
server
उपनिर्देशिका .well-known
को स्थानीय निर्देशिका से सेवा करने की अनुमति देने के लिए अपना खंड संशोधित करें , जैसे:
server {
listen 80;
server_name sub.domain.com www.sub.domain.com;
[…]
location /.well-known {
alias /var/www/sub.domain.com/.well-known;
}
location / {
# proxy commands go here
[…]
}
}
http://sub.domain.com/.well-known
वह जगह है जहां चलो एनक्रिप्ट क्रिप्ट्स सर्वर उन चुनौतियों के जवाबों की तलाश करेगा।
इसके बाद आप उपयोग कर सकते हैं certbot का उपयोग कर आइए एन्क्रिप्ट से एक प्रमाणपत्र अनुरोध करने के लिए ग्राहक webroot प्लगइन (रूट के रूप में):
certbot certonly --webroot -w /var/www/sub.domain.com/ -d sub.domain.com -d www.sub.domain.com
अब आपकी की, सर्टिफिकेट और सर्टिफिकेट चेन इनस्टॉल हो जाएगी /etc/letsencrypt/live/sub.domain.com/
अपने प्रमाणपत्र का उपयोग करने के लिए nginx को कॉन्फ़िगर करना
पहले इस तरह एक नया सर्वर क्लॉज बनाएं:
server {
listen 443 ssl;
# if you wish, you can use the below line for listen instead
# which enables HTTP/2
# requires nginx version >= 1.9.5
# listen 443 ssl http2;
server_name sub.domain.com www.sub.domain.com;
ssl_certificate /etc/letsencrypt/live/sub.domain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/sub.domain.com/privkey.pem;
# Turn on OCSP stapling as recommended at
# https://community.letsencrypt.org/t/integration-guide/13123
# requires nginx version >= 1.3.7
ssl_stapling on;
ssl_stapling_verify on;
# Uncomment this line only after testing in browsers,
# as it commits you to continuing to serve your site over HTTPS
# in future
# add_header Strict-Transport-Security "max-age=31536000";
access_log /var/log/nginx/sub.log combined;
# maintain the .well-known directory alias for renewals
location /.well-known {
alias /var/www/sub.domain.com/.well-known;
}
location / {
# proxy commands go here as in your port 80 configuration
[…]
}
}
पुन: लोड करें:
service nginx reload
सत्यापित करें कि HTTPS अब जाकर https://sub.domain.com
और https://www.sub.domain.com
आपके ब्राउज़र में काम करता है (और आपके द्वारा विशेष रूप से समर्थन करने की इच्छा रखने वाले किसी भी अन्य ब्राउज़र) और जाँच कर रहा है कि वे प्रमाण पत्र की त्रुटियाँ नहीं हैं।
अनुशंसित: raymii.org की भी समीक्षा करें: nginx पर मजबूत SSL सुरक्षा
और SSL Labs पर अपने कॉन्फ़िगरेशन का परीक्षण करें ।
(अनुशंसित) HTTPS के लिए HTTP अप्रत्यक्ष अनुरोध
एक बार जब आप पुष्टि कर लेते हैं कि आपकी साइट https://
URL के संस्करण के साथ काम करती है , बजाय इसके कि कुछ उपयोगकर्ता असुरक्षित सामग्री परोसते हैं क्योंकि वे http://sub.domain.com
साइट के HTTPS संस्करण में उन्हें पुनर्निर्देशित करते हैं।
अपने संपूर्ण पोर्ट को 80 server
खंडों से बदलें :
server {
listen 80;
server_name sub.domain.com www.sub.domain.com;
rewrite ^ https://$host$request_uri? permanent;
}
आपको पोर्ट 443 कॉन्फ़िगरेशन में अब इस लाइन को अनइंस्टॉल करना चाहिए, ताकि ब्राउज़र साइट के HTTP वर्जन को भी न आज़माएँ:
add_header Strict-Transport-Security "max-age=31536000";
अपने प्रमाणपत्र को स्वचालित रूप से नवीनीकृत करें
आप इस प्रमाणपत्र का उपयोग कर सकते हैं (रूट के रूप में) सर्टिफिकेट के लिए जाने वाले सभी प्रमाणपत्रों को नवीनीकृत करने के लिए और नए प्रमाणपत्र का उपयोग करके पुन: लोड करें (जो आपके मौजूदा प्रमाणपत्र के समान पथ होगा):
certbot renew --renew-hook "service nginx reload"
प्रमाण पत्र केवल 60 दिनों से अधिक पुराने प्रमाणपत्रों को नवीनीकृत करने का प्रयास करेगा, इसलिए यह इस आदेश को नियमित रूप से चलाने के लिए सुरक्षित (और अनुशंसित!) है , और यदि संभव हो तो स्वचालित रूप से। उदाहरण के लिए, आप निम्नलिखित कमांड डाल सकते हैं /etc/crontab
:
# at 4:47am/pm, renew all Let's Encrypt certificates over 60 days old
47 4,16 * * * root certbot renew --quiet --renew-hook "service nginx reload"
आप या तो एक ड्राई-रन के साथ नवीकरण का परीक्षण कर सकते हैं, जो आपके डोमेन से संपर्क करने की वास्तविक परीक्षा करने के लिए स्टेजिंग सर्वरों को एन्क्रिप्ट करने के लिए संपर्क करेगा , लेकिन परिणामी प्रमाणपत्रों को संग्रहीत नहीं करेगा :
certbot --dry-run renew
या आप के साथ एक प्रारंभिक नवीकरण के लिए मजबूर कर सकते हैं:
certbot renew --force-renew --renew-hook "service nginx reload"
नोट: आप जितनी बार चाहें उतनी बार चला सकते हैं, लेकिन वास्तविक नवीनीकरण लेट्स एनक्रिप्ट की सीमा के अधीन हैं ।