2014-07-10 9 views
6

मैं एक नोड लचीला बीनस्टॉक एप्लिकेशन और चल (ईएलबी हालांकि) मिल गया है की रक्षा करना। अभी यह सर्वर पर केवल एडब्ल्यूएस नमूना नोड एप्लिकेशन है। इससे पहले कि मैं सर्वर मैं पासवर्ड की जरूरत पूरी बात (यह, ग्राहक समीक्षा के लिए प्रयोग की जाने वाली है आदि) की रक्षा करने के लिए अपने वास्तविक कोड धक्का कर सकते हैं इस के बाद से, एक विकास सर्वर है।पासवर्ड एडब्ल्यूएस नोड ईबी आवेदन

मुझे यह पता लगाने की कोशिश करने में परेशानी का एक टन है कि यह कैसे करें। ऐसा लगता है कि आवेदन कोड /var/app/ में गिरा दिया जाता है और /var/www/html/ (कोई छिपी हुई फ़ाइलें) में कोई बात नहीं है जहां मैं सामान्य रूप से सेटअप होगा एक htaccess फ़ाइल। यह nginx प्रॉक्सी, जो मैं कभी उपयोग नहीं किया उपयोग कर रहा है, और मैं वास्तव में यकीन है कि कैसे फ़ाइलों में कार्य किया जा रहा है नहीं कर रहा हूँ।

इस सर्वर को लॉक करने का सबसे अच्छा तरीका क्या है? सुरक्षा समूह? इनको? कुछ और?

उत्तर

2

सुरक्षा समूह केवल स्रोत आईपी के आधार पर अवरुद्ध होंगे, और htaccess nginx द्वारा समर्थित नहीं है। इसके बजाय वे इस तरह विन्यास का समर्थन: इस आप डिफ़ॉल्ट nginx विन्यास को संशोधित करने के लोचदार बीनस्टॉक के .ebextensions का उपयोग करना होगा प्राप्त करने के लिए

server { 
    ... 
    auth_basic "closed website"; 
    auth_basic_user_file conf/htpasswd; 
} 

लेकिन। यह बिल्कुल आसान नहीं है।

आपके लिए सबसे तेज़ तरीका शायद आपके नोड ऐप के भीतर HTTP ऑथ का समर्थन करना है। इस के लिए कई गाइड कर रहे हैं, लेकिन यहाँ एक है: http://www.sitepoint.com/http-authentication-in-node-js/

+0

मैं यहां भी पहुंच गया। [पासपोर्ट] (http://passportjs.org/) इसे प्राप्त करने का सही तरीका था, खासकर एक्सप्रेस के साथ। –

15

अपने Node.js बीनस्टॉक आवेदन में अपने उदाहरणों उनके /etc/nginx/conf.d/00_elastic_beanstalk_proxy.conf इस तरह की स्थापना की है जाएगा:

server { 
    listen 8080; 

    location/{ 
     proxy_pass http://nodejs; 
     proxy_set_header Connection ""; 
     proxy_http_version 1.1; 
     proxy_set_header  Host   $host; 
     proxy_set_header  X-Real-IP  $remote_addr; 
     proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for; 
    } 
    gzip on; 
} 

server { 
    listen 8080; 

    location/{ 
     proxy_pass http://nodejs; 
     proxy_set_header Connection ""; 
     proxy_http_version 1.1; 
     proxy_set_header  Host   $host; 
     proxy_set_header  X-Real-IP  $remote_addr; 
     proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for; 
     auth_basic "Restricted"; 
     auth_basic_user_file /etc/nginx/.htpasswd; 
    } 
    gzip on; 
} 

कि आपके लॉगिन क्रेडेंशियल containts /etc/nginx/.htpasswd पर एक अलग पासवर्ड फ़ाइल के साथ:

तुम क्या चाहते इसे इस तरह स्थापित होने के लिए है।

चरण 1: अपने स्थानीय linux पर्यावरण के लिए जाओ और

sudo htpasswd -c .htpasswd someusernameofyourchoice 

कि .htpasswd फ़ाइल में नेविगेट करने और उपयोगकर्ता नाम और पासवर्ड लाइन है कि आप उत्पन्न बाहर खींच दर्ज करें। यह कुछ इस तरह दिखेगा:

someusernameofyourchoice:$apr1$.1EAU7DD$rt9jdihy1U.cFuBzJTMed. 

कदम 2:

अब आप अपने नोड आवेदन (जहां आपकी .git/निर्देशिका स्थित है) के अपने रूट निर्देशिका में

एक छिपा निर्देशिका .ebextensions बनाएं जिसका नाम/

उस .ebextensions/निर्देशिका में नेविगेट करें क्योंकि आपको 2 फाइलें बनाने की आवश्यकता होगी।

कदम 3:

पहली फ़ाइल कॉन्फ़िग फ़ाइल है कि आपके बीनस्टॉक आवेदन पर अपने .htpasswd फाइल उत्पन्न होगा। उपयोगकर्ता नाम और पासवर्ड हैश जिसे आपने पहले इस फ़ाइल में जेनरेट किया था और इसे निम्न नाम दें:

00_nginx_htpasswd।config

files: 
    "/etc/nginx/.htpasswd" : 
    mode: "000755" 
    owner: root 
    group: root 
    content: | 
     someusernameofyourchoice:$apr1$.1EAU7DD$rt9jdihy1U.cFuBzJTMed. 

चरण 4:

दूसरी फ़ाइल आप अपनी .ebextensions/निर्देशिका अपने लोचदार बीनस्टॉक पर्यावरण पर 00_elastic_beanstalk_proxy.conf फ़ाइल अद्यतन करेगा में पैदा करेगा। नाम इस प्रकार है:

01_nginx_auth.config

files: 
    /tmp/deployment/nginx_auth.sh: 
    mode: "000755" 
    content: | 
     sed -i 's/$proxy_add_x_forwarded_for;/$proxy_add_x_forwarded_for;\n  auth_basic "Restricted";\n auth_basic_user_file \/etc\/nginx\/.htpasswd;\n/' /tmp/deployment/config/#etc#nginx#conf.d#00_elastic_beanstalk_proxy.conf 
container_commands: 
    nginx_auth: 
    command: "/tmp/deployment/nginx_auth.sh" 

नोट: इस तरह के अपने विकास के वातावरण के रूप में आप केवल पासवर्ड सुरक्षा एक निश्चित पर्यावरण पर होना चाहते हैं। आप अपने पर्यावरण में एक पर्यावरण चर (कॉन्फ़िगरेशन> सॉफ़्टवेयर कॉन्फ़िगरेशन पैनल में बीनस्टॉक डैशबोर्ड पर) पास कर सकते हैं और फिर आप इस फ़ाइल के कमांड में एक सशर्त जोड़ सकते हैं जो उस पर्यावरण चर को चलाने से पहले जांचता है। इस तरह से आप पासवर्ड के उपयोग के लिए अपने उत्पादन वातावरण को छोड़कर पासवर्ड को अपने विकास पर्यावरण की रक्षा कर सकते हैं। चूंकि आप इसे अपने बीनस्टॉक पर्यावरण में धक्का देने के लिए सबकुछ गिट में डाल रहे हैं, यह बहुत आसान है। निम्नलिखित उन परिवर्धन के साथ संशोधित फ़ाइल को जाता है:

01_nginx_auth.config

files: 
    /tmp/deployment/nginx_auth.sh: 
    mode: "000755" 
    content: | 
     if [ "$NODE_ENV" == "development" ]; then 
     sed -i 's/$proxy_add_x_forwarded_for;/$proxy_add_x_forwarded_for;\n  auth_basic "Restricted";\n auth_basic_user_file \/etc\/nginx\/.htpasswd;\n/' /tmp/deployment/config/#etc#nginx#conf.d#00_elastic_beanstalk_proxy.conf 
     fi 
container_commands: 
    nginx_auth: 
    command: "/tmp/deployment/nginx_auth.sh" 

कदम 5:

बार जब आप अपने .ebextensions/निर्देशिका में बनाई गई इन फ़ाइलों के दोनों है, उन्हें प्रतिबद्ध और उन्हें अपने लोचदार बीनस्टॉक पर धक्का दें। आपको चरण 1 में जेनरेट किए गए उस उपयोगकर्ता नाम और पासवर्ड संयोजन के लिए संकेत दिया जाना चाहिए।

+0

ग्रेट गाइड! मैंने बस ऐसा करने की कोशिश की और मेरे उदाहरण पर कोई '/ etc/nginx/conf.d/00_elastic_beanstalk_proxy.conf' और मैं और/etc/nginx/conf.d/webapp.conf' को संशोधित करने के लिए नहीं था। मुझे लगता है कि इस लाइन के अंत में कुछ गड़बड़ है, है ना? '/ tmp/परिनियोजन/कॉन्फ़िगर/# आदि # nginx # conf.d # 00_elastic_beanstalk_proxy.conf' –

+0

अमेज़ॅन ने पर्यावरण चरों तक पहुंचने के तरीके को बदल दिया है। अब आपको एक लाइन जोड़नी है जैसे: 'NODE_ENV = \'/opt/elasticbeanstalk/bin/get-config वातावरण --output yaml | grep -oP 'NODE_ENV: \ K \ w +' \ '' grep क्योंकि किसी कारण से get-config --key विकल्प 'पर्यावरण' – Andres

+0

के लिए काम नहीं कर रहा है महान उत्तर! मैंने .htpasswd फ़ाइल को S3 में सहेजने के लिए समाप्त कर दिया, और इसे इस तरह खींच रहा था इसलिए मेरे पास स्रोत नियंत्रण में फ़ाइल की सामग्री नहीं थी। "स्रोत: [एस 3 यूआरएल]" के साथ 00_nginx_htpasswd.config की "सामग्री: ..." पंक्ति को प्रतिस्थापित करना जितना आसान है (मान लीजिए कि आपने यहां वर्णित अनुसार उचित पहुंच दी है: http://docs.aws। amazon.com/elasticbeanstalk/latest/dg/https-storingprivatekeys.html) – arknotts

0

यदि आप Express.js का उपयोग कर रहे हैं तो आप basic-auth package का उपयोग करके हल्के मीडवेयर को जोड़ सकते हैं। मेरे मामले में, मुझे साइट से साइट को लॉक करने के लिए केवल एक उपयोगकर्ता नाम और पासवर्ड था। लोचदार बीनस्टॉक पर एक नोड.जेएस सर्वर का उपयोग करते समय यह उस परिदृश्य के लिए सबसे आसान समाधान था।

var auth = require('basic-auth'); 

app.use(function(req, res, next) { 
    var credentials = auth(req); 

    if (!credentials || credentials.name !== 'buster' || credentials.pass !== 'getinfree') { 
    res.statusCode = 401; 
    res.setHeader('WWW-Authenticate', 'Basic realm="example"'); 
    res.end('Access denied.'); 
    } else { 
    next(); 
    } 
}); 

नोट इस समाधान को आपके नोड ऐप के भीतर कोड जोड़ने की आवश्यकता है, सीधे nginx के साथ हस्तक्षेप नहीं करना।

संबंधित मुद्दे