दिलचस्प पोस्ट
मैं JSON ऑब्जेक्ट के साथ एक TypeScript ऑब्जेक्ट को कैसे प्रारंभ करूं? किसी संख्या को अल्पविराम के रूप में फ्लोट में दशमलव बिंदु के रूप में परिवर्तित करना क्यों डेटाफ्रेम के संयोजन में तेजी से धीमी गति प्राप्त होती है? PHP पृष्ठभूमि प्रक्रियाएं एक वेब पेज की सामग्री (AJAX कॉल के माध्यम से लोड) लाएं decodeurIComponent vs unescape, क्या unescape के साथ गलत है? लॉगकट मेरे लॉग कॉल प्रदर्शित नहीं कर रहा है पुराने पासवर्ड के साथ प्रमाणीकरण अब समर्थित नहीं है, 4.1 शैली पासवर्ड का उपयोग करें MySQL दिनांक स्वरूप डीडी / एमएम / वाई वाई वाई वाई क्वेरी का चयन करें? NumPy सरणी के लिए पायथन अनुक्रम कन्वर्ट, अनुपलब्ध मानों को भरना क्यों strncpy नल समाप्त नहीं करता है? JSON को एक सूची को सीरियल करना पाठ ब्लिंकिंग jQuery बिंदीदार बॉर्डर डॉट्स के बीच स्थान कैसे बढ़ाएं यदि स्ट्रिंग तुलना के साथ बयान विफल हो जाता है

हेरोको नोडजेएस http को https एसएसएल को पुनर्निर्देशित करना जरूरी है

मेरे पास एक आवेदन है और https के साथ नोड पर एक्सप्रेस के साथ हेरोको पर चल रहा है। मैं हेरोोकू पर नोडजे के साथ https के साथ रीडायरेक्ट को बाध्य करने के लिए प्रोटोकॉल की पहचान कैसे करूं?

मेरा ऐप सिर्फ एक सरल HTTP सर्वर है, यह (अभी तक) एहसास नहीं है कि हेओको इसे https अनुरोध भेज रहा है:

/* Heroku provides the port they want you on in this environment variable (hint: it's not 80) */ app.listen(process.env.PORT || 3000); 

वेब के समाधान से एकत्रित समाधान "हेरोको नोडजेएस http को https एसएसएल को पुनर्निर्देशित करना जरूरी है"

उत्तर 'हेडसेट' के शीर्षलेख का उपयोग करना है जो कि हराकोक आगे गुजरता है क्योंकि यह प्रॉक्सी चीज़मोबोब करता है (पक्ष का ध्यान रखें: वे कई अन्य एक्स-चर भी पास करते हैं जो कि आसान हो सकते हैं, उन्हें जांचें )।

मेरा कोड:

 /* At the top, with other redirect methods before other routes */ app.get('*',function(req,res,next){ if(req.headers['x-forwarded-proto']!='https') res.redirect('https://mypreferreddomain.com'+req.url) else next() /* Continue to other routes if we're not redirecting */ }) 

धन्यवाद ब्रेंडन, उस 6 घंटो के समय की देरी की प्रतीक्षा कर रहा था जो मुझे अपने प्रश्न का उत्तर नहीं दे पाए।

आज के रूप में, 10 अक्टूबर 2014 , हेरोको सीडर स्टैक और एक्सप्रेसजएस ~ 3.4.4 का उपयोग करते हुए, यहां कोड का कामकाजी सेट है।

यहां याद रखने वाली मुख्य बात यह है कि हम हेरोकू को तैनात कर रहे हैं। एन्क्रिप्टेड यातायात आपके नोड ऐप पर पहुंचने से पहले एसएसएल समापन लोड बैलेंसर पर होता है। यह जांचना संभव है कि क्या https को req.headers ['x-forwarded-proto'] === 'https' के साथ अनुरोध करने के लिए उपयोग किया गया था।

हमें ऐप आदि के अंदर स्थानीय एसएसएल प्रमाणपत्र होने के संबंध में अपने आप को चिंता करने की ज़रूरत नहीं है, जैसा कि आप अन्य वातावरणों में होस्टिंग के जरिए कर सकते हैं। हालांकि, पहले अपने खुद के प्रमाण पत्र, उप-डोमेन आदि का उपयोग करते समय, आपको पहले हीरोकोड ऐड-ऑन के माध्यम से लागू एक एसएसएल ऐड-ऑन मिलना चाहिए।

फिर HTTPS से HTTPS के अलावा अन्य किसी भी चीज़ से रीडायरेक्ट करने के लिए बस निम्नलिखित को जोड़ें। यह ऊपर स्वीकार किए गए उत्तर के बहुत करीब है, लेकिन:

  1. सुनिश्चित करता है कि आप "ऐप। यूज" का उपयोग करते हैं (सभी कार्यों के लिए, न सिर्फ प्राप्त करें)
  2. स्पष्ट रूप से एक बलित एसएसएल लॉजिक को घोषित समारोह में बाहरी रूप से बाहर करता है
  3. 'एपी' के साथ '*' का उपयोग नहीं करता – यह वास्तव में विफल हुआ जब मैंने इसे परीक्षण किया।
  4. यहां, मैं केवल उत्पादन में एसएसएल चाहता हूं। (आपकी ज़रूरतों के अनुसार सूट के रूप में बदलें)

कोड:

  var express = require('express'), env = process.env.NODE_ENV || 'development'; var forceSsl = function (req, res, next) { if (req.headers['x-forwarded-proto'] !== 'https') { return res.redirect(['https://', req.get('Host'), req.url].join('')); } return next(); }; app.configure(function () { if (env === 'production') { app.use(forceSsl); } // other configurations etc for express go here... } 

सैल्सजेएस (0.10.एक्स) उपयोगकर्ताओं के लिए नोट आप एपीआई / नीतियों के भीतर बस एक नीति (enforceSsl.js) बना सकते हैं:

 module.exports = function (req, res, next) { 'use strict'; if ((req.headers['x-forwarded-proto'] !== 'https') && (process.env.NODE_ENV === 'production')) { return res.redirect([ 'https://', req.get('Host'), req.url ].join('')); } else { next(); } }; 

फिर किसी भी अन्य नीतियों के साथ config / policies.js से संदर्भ, जैसे:

'*': ['प्रमाणित', 'लागू एसएसएल']

मैंने एक छोटा नोड मॉड्यूल लिखा है जो एक्सप्रेस परियोजनाओं पर SSL को लागू करता है। यह मानक परिस्थितियों में और रिवर्स प्रॉक्सी (हेरोोकू, नोडेजीत्सू, आदि) के लिए काम करता है।

https://github.com/florianheinemann/express-sslify

स्वीकार किए गए उत्तर में एक हार्डकोड डोमेन है, जो बहुत अच्छा नहीं है अगर आपके पास कई डोमेन पर समान कोड है (उदाहरण: dev-yourapp.com, test-yourapp.com, yourapp.com)।

इसे इसके बजाय उपयोग करें:

 /* Redirect http to https */ app.get('*', function(req,res,next) { if(req.headers['x-forwarded-proto'] != 'https' && process.env.NODE_ENV === 'production') res.redirect('https://'+req.hostname+req.url) else next() /* Continue to other routes if we're not redirecting */ }); 

https://blog.mako.ai/2016/03/30/redirect-http-to-https-on-heroku-and-node-generally/

यदि आप अपने स्थानीय होस्ट पर x-forwarded-proto शीर्षलेख का परीक्षण करना चाहते हैं, तो आप nginx को एक vhost फ़ाइल सेटअप करने के लिए उपयोग कर सकते हैं, जो आपके सभी नोड एप के अनुरोधों को प्रॉक्सी करता है आपकी nginx vhost कॉन्फ़िग फाइल इस तरह दिखाई दे सकती है

nginx

 server { listen 80; listen 443; server_name dummy.com; ssl on; ssl_certificate /absolute/path/to/public.pem; ssl_certificate_key /absolute/path/to/private.pem; access_log /var/log/nginx/dummy-access.log; error_log /var/log/nginx/dummy-error.log debug; # node location / { proxy_pass http://127.0.0.1:3000/; proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } } 

यहां महत्वपूर्ण बिट्स हैं कि आप सभी अनुरोधों को लोकलहोस्ट पोर्ट 3000 के लिए प्रॉक्सी कर रहे हैं (यह वह जगह है जहां आपका नोड ऐप चल रहा है) और आप X-Forwarded-Proto सहित शीर्ष लेखों का एक समूह सेट कर रहे हैं

तब आपके ऐप में हमेशा की तरह हेडर का पता लगाया जाएगा

व्यक्त

 var app = express() .use(function (req, res, next) { if (req.header('x-forwarded-proto') == 'http') { res.redirect(301, 'https://' + 'dummy.com' + req.url) return } next() }) 

कोआ

 var app = koa() app.use(function* (next) { if (this.request.headers['x-forwarded-proto'] == 'http') { this.response.redirect('https://' + 'dummy.com' + this.request.url) return } yield next }) 

मेजबान

आखिरकार आपको इस लाइन को अपनी hosts फ़ाइल में जोड़ना होगा

 127.0.0.1 dummy.com 

यदि आप मेमोल्डफ़्लोअर डॉट कॉम के रूप में सीडीएन में हीरोकू के साथ संयोजन कर रहे हैं, तो आप आसानी से एसएसएल रीडर के भीतर आसानी से इस तरह से सक्षम कर सकते हैं:

  1. लॉगिन करें और अपने डैशबोर्ड पर जाएं

  2. पृष्ठ नियम का चयन करें

    पृष्ठ नियम का चयन करें

  3. अपना डोमेन जोड़ें, जैसे http://www.example.com और स्विच हमेशा https से ऑन का उपयोग करें हमेशा के लिए https का उपयोग करें स्विच करें

आपको उसकी सुराग-एसएसएल-रीडायरेक्ट पर एक नज़र रखना चाहिए। यह एक सम्मोहन की तरह काम करता है!

 var sslRedirect = require('heroku-ssl-redirect'); var express = require('express'); var app = express(); // enable ssl redirect app.use(sslRedirect()); app.get('/', function(req, res){ res.send('hello world'); }); app.listen(3000); 

एक्स-फॉरवर्ड किए गए-प्रोटोको हेडर में प्रोटोकॉल की जांच करना हेरोकू पर ठीक काम करती है, जैसे डेरेक ने बताया है इसके लायक होने के लिए, यहां एक्सप्रेस मिडलवेयर का एक सार है जिसका उपयोग मैं करता हूं और इसके अनुरूप परीक्षण।

लूपबैक उपयोगकर्ता आर्सेस्लेडन उत्तर के एक छोटे से अनुकूलित संस्करण का उपयोग मिडलवेयर के रूप में कर सकते हैं:

सर्वर / मिडलवेयर / forcessl.js

 module.exports = function() { return function forceSSL(req, res, next) { var FORCE_HTTPS = process.env.FORCE_HTTPS || false; if (req.headers['x-forwarded-proto'] !== 'https' && FORCE_HTTPS) { return res.redirect(['https://', req.get('Host'), req.url].join('')); } next(); }; }; 

सर्वर / server.js

 var forceSSL = require('./middleware/forcessl.js'); app.use(forceSSL()); 
 app.all('*',function(req,res,next){ if(req.headers['x-forwarded-proto']!='https') { res.redirect(`https://${req.get('host')}`+req.url); } else { next(); /* Continue to other routes if we're not redirecting */ } }); 

ऐसा करने के लिए एक अधिक स्पष्ट विशिष्ट तरीका

  app.enable('trust proxy'); app.use('*', (req, res, next) => { if (req.secure) { return next(); } res.redirect(`https://${req.hostname}${req.url}`); });