अमेज़न AWS EC2 माइक्रो-उदाहरण पर पायथन सीजीआई - एक कैसे!


23

तुम कैसे एक EC2 माइक्रो उदाहरण बना सकते हैं lgttpd से CGI लिपियों की सेवा? उदाहरण के लिए पायथन सीजीआई?

खैर, इसमें आधा दिन लगा, लेकिन मैंने लाइटटैप सर्वर का उपयोग करके एक मुफ्त अमेज़ॅन एडब्ल्यूएस ईसी 2 माइक्रो-इंस्टेंस पर चलने वाले पायथन सीटीआई को प्राप्त किया है। मुझे लगता है कि यह मेरे साथी को एक ही स्थान पर सभी कदम रखने में मदद करेगा। नीचे दिए गए सरल चरणों के साथ, आपको चीजों को स्थापित करने में केवल 15 मिनट लगेंगे!

इसे पढ़ने वाले अधिक अनुभवी उपयोगकर्ताओं के लिए मेरा प्रश्न है: क्या मैंने जो किया है, उसमें कोई सुरक्षा खामी है? (फ़ाइल और निर्देशिका अनुमतियाँ देखें।)

चरण 1: अपना EC2 उदाहरण शुरू करें और उसमें ssh करें।

[जाहिर है, आपको Amazon EC2 के लिए साइन अप करना होगा और अपने प्रमुख जोड़े को * .pem फ़ाइल में सहेजना होगा। मैं इस पर नहीं जाऊंगा, क्योंकि अमेज़न आपको बताता है कि यह कैसे करना है।]

  1. अपने AWS खाते में साइन इन करें और अपना EC2 उदाहरण शुरू करें। वेब के पास ऐसा करने के लिए ट्यूटोरियल हैं। ध्यान दें कि डिफ़ॉल्ट उदाहरण-आकार जो अमेज़ॅन आपके लिए प्रस्तुत करता है वह "छोटा" है। यह "माइक्रो" नहीं है और इसलिए यह आपको पैसा खर्च करेगा। मैन्युअल रूप से "माइक्रो" चुनना सुनिश्चित करें। (सूक्ष्म उदाहरण केवल पहले वर्ष के लिए स्वतंत्र हैं ...)

  2. अपने चलने के उदाहरण के लिए सार्वजनिक DNS कोड खोजें। ऐसा करने के लिए, डैशबोर्ड के शीर्ष फलक में इंस्टेंस पर क्लिक करें और अंत में आपको "पब्लिक डीएनएस" फ़ील्ड नीचे वाले फलक में दिखाई देगी। (आपको थोड़ी सी बेला करने की आवश्यकता हो सकती है।) सार्वजनिक DNS कुछ इस तरह दिखता है:
    ec2-174-129-110-23.compute-1.amazonaws.com

  3. अपना यूनिक्स कंसोल प्रोग्राम शुरू करें। (अधिकतम OS X पर, इसे टर्मिनल कहा जाता है, और एप्लिकेशन -> यूटिलिटीज फ़ोल्डर में रहता है।)

  4. अपने डेस्कटॉप सिस्टम पर निर्देशिका के लिए cd जिसमें आपकी * .pem फ़ाइल होती है जिसमें आपका AWS keypairs होता है।

  5. अपने EC2 उदाहरण के लिए एक कमांड का उपयोग करके ssh जैसे:
    ssh -i <<your *.pem filename>> ec2-user@<< Public DNS address >>

    तो, मेरे लिए, यह था:
    ssh -i amzn_ec2_keypair.pem ec2-user@ec2-174-129-110-23.compute-1.amazonaws.com

  6. आपका EC2 उदाहरण आपको अंदर जाने देना चाहिए।

चरण 2: lighttpd को अपने EC2 उदाहरण में डाउनलोड करें।

  1. लाइटटैप को स्थापित करने के लिए, आपको अपने EC2 उदाहरण पर रूट एक्सेस की आवश्यकता होगी। समस्या यह है: अमेज़न आपको रूट के रूप में साइन इन नहीं करने देगा। (सीधे तौर पर नहीं, कम से कम।) लेकिन वर्कअराउंड है। यह कमांड टाइप करें:
    sudo /bin/bash

  2. सिस्टम प्रॉम्प्ट-कैरेक्टर $ # से बदल जाएगा। हम इस पूरी प्रक्रिया में अंतिम चरण तक "सुडो" से बाहर नहीं निकलेंगे।

  3. Lighttpd एप्लिकेशन इंस्टॉल करें (मेरे लिए संस्करण 1.4.28-1.3.amzn1):
    yum install lighttpd

  4. लाइटकैप के लिए FastCGI लाइब्रेरी स्थापित करें (आवश्यक नहीं, लेकिन क्यों नहीं?);
    yum install lighttpd-fastcgi

  5. परीक्षण करें कि आपका सर्वर काम कर रहा है:
    /etc/init.d/lighttpd start

चरण 3: बाहरी दुनिया को अपना सर्वर देखने दें।

  1. यदि आपने अब अपने सर्वर को अपने डेस्कटॉप पर ब्राउज़र से हिट करने का प्रयास किया है, तो यह विफल हो जाएगा। कारण: डिफ़ॉल्ट रूप से, अमेज़न AWS आपके EC2 उदाहरण के लिए कोई पोर्ट नहीं खोलता है। इसलिए, आपको मैन्युअल रूप से पोर्ट खोलना होगा।

  2. अपने डेस्कटॉप के ब्राउज़र में अपने EC2 डैशबोर्ड पर जाएं। बाएँ फलक में "सुरक्षा समूह" पर क्लिक करें। ऊपरी दाएं फलक में एक या अधिक सुरक्षा समूह दिखाई देंगे। जब आपने अपना उदाहरण लॉन्च किया था, तो उसे अपने EC2 उदाहरण में चुना गया था।

  3. निचले दाहिने फलक में "अनुमत कनेक्शन" नामक एक तालिका दिखाई देगी। एक पॉप-अप मेनू आपको कनेक्शन विधि के रूप में "HTTP" चुनने देगा।

  4. तालिका की उस पंक्ति में अन्य मान होना चाहिए: tcp, 80, 80, 0.0.0.0/0

  5. अब अपने ब्राउज़र में डेस्कटॉप से ​​अपने EC2 इंस्टेंस के सर्वर को हिट करें। सार्वजनिक DNS पते का उपयोग करें जिसका उपयोग आपने पहले SSH में किया था। आपको लाइटटैप जेनेरिक वेब पेज देखना चाहिए। यदि आप ऐसा नहीं करते हैं, तो मैं आपकी मदद नहीं कर सकता क्योंकि मैं इस तरह के एक noob हूँ। :-(

चरण 4: सीजीआई की सेवा करने के लिए लाइटटैप को कॉन्फ़िगर करें।

  1. कंसोल प्रोग्राम में cd, lighttpd के लिए कॉन्फ़िगरेशन निर्देशिका में cd:
    cd /etc/lighttpd

  2. CGI को सक्षम करने के लिए, आप <mod.conf> फ़ाइल में एक पंक्ति को अनइंस्टॉल करना चाहते हैं। (मैं फास्ट सीजीआई सक्षम कर सकता था, लेकिन बच्चे के कदम सबसे अच्छे हैं!) आप इसे "एड" संपादक के साथ निम्नानुसार कर सकते हैं:
    ed modules.conf
    /include "conf.d\/cgi.conf"/
    s/#//
    w
    q

  3. वह निर्देशिका बनाएं जहां CGI प्रोग्राम लाइव होंगे। (/Etc/lighttpd/lighttpd.conf फ़ाइल यह निर्धारित करती है कि यह कहां होगा।) हम अपनी निर्देशिका को डिफ़ॉल्ट स्थान पर बनाएंगे, इसलिए हमें कॉन्फ़िगरेशन फ़ाइलों का कोई संपादन नहीं करना होगा:
    cd /var/www/lighttpd
    mkdir cgi-bin
    chmod 755 cgi-bin

  4. लगभग वहाँ! बेशक आपको सीजीआई-बिन निर्देशिका में एक परीक्षण सीजीआई कार्यक्रम डालने की आवश्यकता है। यहाँ एक है:
    cd cgi-bin
    ed
    a
    #!/usr/bin/python
    print "Content-type: text/html\n\n"
    print "<html><body>Hello, pyworld.</body></html>"
    .
    w hellopyworld.py
    q
    chmod 655 hellopyworld.py

  5. अपने लाइटटैप सर्वर को पुनरारंभ करें:
    /etc/init.d/lighttpd restart

  6. अपने CGI प्रोग्राम का परीक्षण करें। अपने डेस्कटॉप के ब्राउज़र में, इस URL को हिट करें, जो आपके EC2 उदाहरण के सार्वजनिक DNS पते को प्रतिस्थापित करता है:
    http://<<Public DNS>>/cgi-bin/hellopyworld.py

    मेरे लिए, यह था:
    http://ec2-174-129-110-23.compute-1.amazonaws.com/cgi-bin/hellopyworld.py

चरण 5: यह बात है! सफाई करो, और धन्यवाद दो!

  • पहले दिए गए "sudo / bin / bash" कमांड से बाहर निकलने के लिए टाइप करें:
    exit

  • आभार: धन्यवाद के ढेर:

    wiki.vpslink.com/Install_and_Configure_lighttpd

    www.cyberciti.biz/tips/lighttpd-howto-setup-cgi-bin-access-for-perl-programs.html

    aws.typepad.com/aws/2010/06/building-three-tier-architectures-with-security-groups.html

  • सौभाग्य, अमीगो! मैं इस "प्रश्न" के गैर-पारंपरिक स्वभाव के लिए माफी माँगता हूँ, लेकिन मुझे स्टैकवर्फ़फ़्लो से इतनी मदद मिली है कि मैं कुछ वापस देने के लिए उत्सुक था।


4
मैं आपको एक गाइड पोस्ट करने के लिए सराहना करता हूं, लेकिन एसओ सवाल पूछने के लिए है। मैं इसके लिए blogspot या कुछ इसी तरह की सलाह दूंगा। यदि आप वापस देने के लिए उत्सुक हैं, तो आपको सवालों का जवाब देना चाहिए :)

मैं प्रस्तुत करता हूं कि किसी भी "कैसे" में एक अंतर्निहित प्रश्न शामिल है, अर्थात "मैं एक्स कैसे करूं?" भविष्य में मैं इस प्रश्न को स्पष्ट रूप से बताऊंगा, हालाँकि यह शुरू में पदयात्रा जैसा लगता था। लेकिन, क्योंकि यह खोज इंजनों की सहायता कर सकता है और पाठकों में भ्रम की स्थिति से बचा सकता है, मुझे लगता है कि अब यह सार्थक है। धन्यवाद।

इस तरह के एक के बाद एक नए सदस्य से यह बहुत ही दयालु है। वैसे भी, यह उन सवालों के जवाब देता है जो अभी तक नहीं पूछे गए हैं। वैसे, यह मुझे कुछ दिनों पहले आवश्यक जानकारी देता है, अब मैं इस तरह की सेवा के अस्तित्व को जानता हूं। वैसे, ऐसे समय में जहां कोई बहुत अधिक क्लाउड बोलता है, यह पोस्ट बहुत सारे लोगों के लिए बहुत उपयोगी होने की संभावना है। इसलिए वह हतोत्साहित होने के लायक नहीं है, और मैं उत्साहित हूं।

@ user595585 स्वीकृत अभ्यास एक प्रश्न "मैं कैसे करूँ" और इसका उत्तर स्वयं देना है। आप इस तरह से अपनी परेशानी के लिए और अधिक प्रतिनिधि प्राप्त करते हैं। कृपया सामान्य प्रश्न देखें । "अपने सवाल को पूछना और उसका जवाब देना भी पूरी तरह से ठीक है, जब तक आप दिखावा न करें कि आप खतरे में हैं: इसे एक प्रश्न के रूप में वाक्यांश दें।"
सी। रॉस

3
@user संपादित अपने प्रश्न तो यह है एक सवाल है, तो यह सभी विवरण आपके द्वारा दी गई जवाब। इसके अलावा, उन परनों में से कुछ को गिरा दें, आप EC2 पर अजगर की मेजबानी करने की बात कर रहे हैं, लिस्प नहीं।
बंद Ripped

जवाबों:


3

(अजीब पोस्ट, इसलिए उम्मीद है कि यह एक उत्तर के रूप में अजीब नहीं होगा)।

सुरक्षा खामियों के विषय पर: वेब सर्वर के दस्तावेज़ रूट के भीतर cgi-bin स्क्रिप्ट को संग्रहीत करने के लिए सामान्य बुरा व्यवहार माना जाता है। यहां तक ​​कि W3C अपने वर्ल्ड वाइड वेब सिक्योरिटी एफएक्यू में "C सुरक्षित ... जैसी संकलित भाषाएं" के तहत इसे पढ़ता है :

निम्नलिखित परिदृश्य पर विचार करें। सुविधा के लिए, आपने .cgi एक्सटेंशन का उपयोग करके सर्वर को CGI स्क्रिप्ट की पहचान करने का निर्णय लिया है। बाद में, आपको एक व्याख्या किए गए CGI स्क्रिप्ट में एक छोटा सा बदलाव करने की आवश्यकता है। आप इसे Emacs टेक्स्ट एडिटर के साथ खोलें और स्क्रिप्ट को संशोधित करें। दुर्भाग्य से एडिट डॉक्यूमेंट ट्री में चारों ओर पड़े स्क्रिप्ट सोर्स कोड की बैकअप कॉपी छोड़ देता है। यद्यपि दूरस्थ उपयोगकर्ता स्क्रिप्ट को स्वयं लाकर स्रोत कोड प्राप्त नहीं कर सकता है, अब वह URL का आँख बंद करके अनुरोध कर बैकअप प्रतिलिपि प्राप्त कर सकता है:

    http://your-site/a/path/your_script.cgi~

(यह CGI लिपियों को cgi-bin तक सीमित करने और यह सुनिश्चित करने के लिए एक और अच्छा कारण है कि cgi-bin दस्तावेज़ रूट से अलग है।)

यह डॉक्यूमेंट रूट के अंदर फाइल लिखने की क्षमता जितना महत्वपूर्ण नहीं है। हालांकि, एक हमलावर cgi के स्रोत कोड को प्राप्त कर सकता है, इसके खिलाफ एक निर्देशित हमले को तैयार कर सकता है, और इसे सर्वर में एक कदम पत्थर के रूप में उपयोग कर सकता है।

इसे कम करने के लिए, आप cgi-bin को डायरेक्ट / var / www / lighttpd डॉक्यूमेंट रूट से अलग डाइरेक्टरी में lighttpd.conf (या कुछ भिन्नता) के लिए निम्न पंक्तियाँ जोड़ सकते हैं।

$HTTP["url"] =~ "/cgi-bin/" { cgi.assign = ( "" => "" ) }
alias.url = ( "/cgi-bin/" => "/usr/lib/cgi-bin/" )

इसके लिए lighttpd के लिए cgi और उपनाम दोनों मॉड्यूल की आवश्यकता होती है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.