Nginx 400 से निपटना "सादा HTTP अनुरोध HTTPS पोर्ट को भेजा गया था" त्रुटि



Answers

कनेक्शन सुरक्षा के बावजूद http पर पृष्ठों की सेवा करने की अनुमति देने के लिए उपर्युक्त उत्तर गलत हैं, 'यह कनेक्शन HTTPS' परीक्षण है।

क्लाइंट को उसी अनुरोध को पुनः प्रयास करने के लिए क्लाइंट को रीडायरेक्ट करने के लिए एक NGINX विशिष्ट http 4xx त्रुटि कोड पर त्रुटि-पृष्ठ का उपयोग करके सुरक्षित उत्तर। (जैसा कि यहां बताया गया है https://serverfault.com/questions/338700/redirect-http-mydomain-com12345-to-https-mydomain-com12345-in-nginx )

ओपी का उपयोग करना चाहिए:

server {
  listen        12345;
  server_name   php.myadmin.com;

  root         /var/www/php;

  ssl           on;

  # If they come here using HTTP, bounce them to the correct scheme
  error_page 497 https://$host:$server_port$request_uri;

  [....]
}
Question

मैं यात्री / nginx के पीछे एक सिनात्रा ऐप चला रहा हूँ। मैं इसे http और https दोनों कॉलों का जवाब देने की कोशिश कर रहा हूं। समस्या यह है कि, जब दोनों सर्वर ब्लॉक में परिभाषित होते हैं तो https कॉल सामान्य रूप से प्रतिक्रिया देते हैं लेकिन http 400 "सादा HTTP अनुरोध HTTPS पोर्ट को भेजा गया" त्रुटि उत्पन्न करता है। यह एक स्थिर पृष्ठ के लिए है, इसलिए मुझे लगता है कि सिनात्रा के पास इसके साथ कुछ लेना देना नहीं है। कोई राय कि इसे कैसे ठीक किया जाए?

सर्वर ब्लॉक यहां है:

server {
        listen 80;
        listen 443  ssl;
        server_name localhost;
        root /home/myhome/app/public;
        passenger_enabled on;

        ssl on;
        ssl_certificate      /opt/nginx/ssl_keys/ssl.crt;
        ssl_certificate_key  /opt/nginx/ssl_keys/ssl.key;
        ssl_protocols        SSLv3 TLSv1;
        ssl_ciphers          HIGH:!aNULL:!MD5;

        location /static {
            root  /home/myhome/app/public;
            index  index.html index.htm index.php;
        }

        error_page 404 /404.html;

        # redirect server error pages to the static page /50x.html
        error_page 500 /500.html;

        access_log /home/myhome/app/logs/access.log;
        error_log /home/myhome/app/logs/error.log;
}



दरअसल आप इसके साथ ऐसा कर सकते हैं:

ssl off; 

इसने nginxvhosts का उपयोग करने में मेरी समस्या हल की; अब मैं एसएसएल और सादे HTTP दोनों का उपयोग करने में सक्षम हूं। संयुक्त बंदरगाहों के साथ भी काम करता है।




IPv6 समर्थन के साथ एक ही कॉन्फ़िगरेशन ब्लॉक में HTTP और HTTPS कॉन्फ़िगर करने के लिए यहां एक उदाहरण दिया गया है। कॉन्फ़िगरेशन का परीक्षण उबंटू सर्वर और एनजीआईएनएक्स / 1.4.6 में किया जाता है लेकिन यह सभी सर्वरों के साथ काम करना चाहिए।

server {
    # support http and ipv6
    listen 80 default_server;
    listen [::]:80 default_server ipv6only=on;

    # support https and ipv6
    listen 443 default_server ssl;
    listen [::]:443 ipv6only=on default_server ssl;

    # path to web directory
    root /path/to/example.com;
    index index.html index.htm;

    # domain or subdomain
    server_name example.com www.example.com;

    # ssl certificate
    ssl_certificate /path/to/certs/example_com-bundle.crt;
    ssl_certificate_key /path/to/certs/example_com.key;

    ssl_session_timeout 5m;

    ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers "HIGH:!aNULL:!MD5 or HIGH:!aNULL:!MD5:!3DES";
    ssl_prefer_server_ciphers on;
}

ssl on शामिल न करें जिस ssl on 400 त्रुटि हो सकती है। उपरोक्त विन्यास के लिए काम करना चाहिए

http://example.com

http://www.example.com

https://example.com

https://www.example.com

उम्मीद है की यह मदद करेगा!




मेरे पास एक ही समस्या थी, मेरे पास आपके उदाहरण के समान विन्यास है और मुझे लाइन को हटाकर यह काम कर रहा है:

ssl on;

दस्तावेज़ उद्धृत करने के लिए:

यदि HTTP और HTTPS सर्वर बराबर हैं, तो एक सर्वर जो HTTP और HTTPS अनुरोधों को संभालता है, निर्देश "एसएसएल ऑन" निर्देश को हटाकर और *: 443 पोर्ट के लिए एसएसएल पैरामीटर जोड़कर कॉन्फ़िगर किया जा सकता है





Tags

nginx