2010-02-23 8 views
15

मुझे अभी पता चला है कि मैं पाइथन का उपयोग करके वास्तव में simple web server लिख सकता हूं। मेरे पास पहले से ही एक अपाचे वेब सर्वर है, मैं इस मशीन पर पायथन आधारित वेब सर्वर को आजमा देना चाहता हूं। लेकिन मुझे डर है कि अगर मैं कोशिश करता हूं तो मुझे कुछ प्रकार का संघर्ष मिल सकता है। मेरा मतलब है कि दो वेब सर्वर "निर्णय" कैसे करेंगे, जिन्हें क्लाइंट से अनुरोध करने की आवश्यकता है?क्या मैं एक ही कंप्यूटर पर दो वेब सर्वर चला सकता हूं?

+0

एफडब्ल्यूआईडब्ल्यू, पायथन में एक अंतर्निहित वेब सर्वर मॉड्यूल (SimpleHTTPServer) है। इसका डिफ़ॉल्ट पोर्ट 8000 है। आप इसे कमांड लाइन में कमांड लाइन में चला सकते हैं: python -m SimpleHTTPServer – ianalis

उत्तर

26

उन्हें विभिन्न बंदरगाहों को सुनें और आप ठीक होंगे।

डिफ़ॉल्ट वेब पोर्ट 80 है। जब आप पोर्ट को निर्दिष्ट किए बिना ब्राउज़र में कुछ यूआरएल खोलते हैं, तो 80 डिफ़ॉल्ट रूप से उपयोग किया जाता है।

आप एक अलग बंदरगाह को सुनने के लिए अपने वेब सर्वर कॉन्फ़िगर कर सकते हैं, लेकिन फिर आप भी यूआरएल में स्पष्ट रूप से यह निर्दिष्ट करने के लिए की आवश्यकता होगी:

http://localhost:8080 

जब एक बंदरगाह भुगतान ध्यान चुनने इस विशेष पोर्ट संख्या नहीं है कि अभी तक आपके द्वारा इंस्टॉल किए गए किसी भी सॉफ़्टवेयर द्वारा उपयोग में और आपके बॉक्स पर चल रहा है। अन्यथा, जैसा कि आपने सही ढंग से अनुमान लगाया है, एक संघर्ष होगा।

पीएस बस कुछ दिन पहले पुनर्स्थापित करने के बाद मुझे आईआईएस शुरू करने में सक्षम नहीं था (प्रतीत होता है बिना कारण के)। स्काइप के नए संस्करण को इस डिफ़ॉल्ट बंदरगाह पर कब्जा कर लिया! इसकी सेटिंग को हटा देना था "आने वाले कनेक्शन के विकल्प के रूप में पोर्ट 80 और 443 का उपयोग करें"।

+0

ठीक है। क्या वेब ब्राउज़र द्वारा उपयोग किया जाने वाला एक डिफ़ॉल्ट पोर्ट है? जब मैं एक विशिष्ट वेब सर्वर पर एक वेब पेज खोलने का प्रयास करता हूं तो क्या मैं पोर्ट निर्दिष्ट कर सकता हूं? – Roman

+0

डिफ़ॉल्ट HTTP पोर्ट 80 है। आप यूआरएल में पोर्ट्स निर्दिष्ट कर सकते हैं: 'http: // yourserver: portnumber'। –

+0

HTTPS के लिए HTTP 443 के लिए डिफ़ॉल्ट 80 है। आप – Ofir

1

यदि आप दो या दो से अधिक वेब सर्वर बनाना चाहते हैं, तो आप एक ही बंदरगाह (जो डिफ़ॉल्ट 80 है) में दो वेब सर्वर नहीं खोल सकते हैं, आपको विभिन्न बंदरगाहों का उपयोग करना होगा।

यदि आप एक DNS का उपयोग कर रहे हैं, तो आप विभिन्न वेब साइटों के साथ अलग-अलग अनुरोधों के जवाब देने के लिए आसानी से अपना वेब सर्वर सेट कर सकते हैं, जो उपयोगी हो सकता है यदि आपको सबडोमेन या विभिन्न डोमेन के लिए अलग-अलग वेब साइटें हों।

+1

HTTP/1.1 जीतने के लिए वास्तव में –

+0

जीतने के लिए एक अलग निर्दिष्ट कर सकते हैं, HOST-HEADER जय हो! – Dal

7

एक वेब सर्वर एक विशिष्ट पोर्ट से जुड़ा हुआ है। आम तौर पर, यह पोर्ट 80 है। यदि पोर्ट स्पष्ट रूप से निर्दिष्ट नहीं है, तो वह पोर्ट है जो ब्राउज़र हिट करने का प्रयास करेगा।

आप अपने वैकल्पिक सर्वर को एक अलग बंदरगाह पर चलाने के लिए प्राप्त कर सकते हैं (8080 या 8081 वेब सर्वर के लिए लोकप्रिय अलर्ट प्रतीत होता है, लेकिन पसंद तुम्हारा है)।

यह संघर्ष होने से रोक देगा। पोर्ट 80 पर जाने वाली हर चीज आपके पुराने सर्वर को हिट करती है। सब कुछ 8080 (या जो भी पोर्ट आप अपने सर्वर को चलाने का फैसला करते हैं) पर जा रहा है, आपके सरल पायथन सर्वर को हिट करेगा।

http://localhost:8080/

1

वेबसर्वर को जो एक कनेक्शन अनुरोध सेवाओं में कोई बात कहने का होता है (इस कार्य को ऑपरेटिंग सिस्टम के स्तर पर अभी भी है) -:

आपके अन्य सर्वर हिट करने के लिए, एक ऐसा URL का उपयोग करें। इसके अलावा, विशेष सॉकेट विकल्पों के बिना, सॉकेट इंटरफेस, इंटरनेट पता और बंदरगाह के अद्वितीय संयोजन के लिए बाध्य होना चाहिए।

0

मैं सुझाव दूंगा कि आप https (पोर्ट 443) अनुरोधों की सेवा करने के लिए एक सर्वर समर्पित करें।

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

सर्वर एक:

http://localhost 

सर्वर बी:

https://localhost 
8

आप वास्तव में अलग-अलग सर्वर को चलाने के लिए सर्वर सॉफ्टवेयर का परीक्षण करने के लिए अन्य उत्तर देखने चाहते हैं, लेकिन ...

ऐसा लगता है (क्योंकि आप एक डेवलपर हैं, एक sysadmin सही नहीं है?) आप वास्तव में बस एक ही कंप्यूटर पर पायथन और PHP साइटों को चलाने के लिए चाहते हैं। तो, अगर मैं आपके प्रश्न में पढ़ रहा हूं तो मुझे माफ़ कर दो, लेकिन यह सेटअप मुझे एक ही कंप्यूटर पर एक ही बंदरगाह (पोर्ट 80) के साथ एक ही कंप्यूटर, अपाचे में एक ही कंप्यूटर पर दोनों प्रकार की साइटों को चलाने की अनुमति देता है। और उन्हें 127.0.0.1 को इंगित:

मैं/मेजबान फ़ाइल (\ Windows \ System32 \ drivers \ etc \ Windows पर मेजबान या सी): मेरे/आदि में नई प्रविष्टियां बनाने तब

127.0.0.1  localhost 

# development projects 
127.0.0.1  somephpsite.com.local 
127.0.0.1  www.somephpsite.com.local 
127.0.0.1  otherpythonsite.com.local 
127.0.0.1  www.otherpythonsite.com.local 

अपाचे में मैं प्रत्येक साइट के लिए VirtualHosts जोड़ें:

<VirtualHost *:80> 
    DocumentRoot "/Library/WebServer/Documents" 
    ServerName localhost 
</VirtualHost> 

<VirtualHost *:80> 
    <Directory "/Users/Robert/Projects/SomeSite/somephpsite.com"> 
     Options Indexes FollowSymLinks MultiViews 
     AllowOverride All 
     Order allow,deny 
     Allow from all 
    </Directory> 
    DocumentRoot "/Users/Robert/Projects/SomeSite/somephpsite.com" 
    ServerName somephpsite.com.local 
    ServerAlias www.somephpsite.com.local 
    ErrorLog "/Users/Robert/Projects/SomeSite/error.log" 
    CustomLog "/Users/Robert/Projects/SomeSite/access.log" common 
</VirtualHost> 

<VirtualHost *:80> 
    <Directory "/Users/Robert/Projects/OtherSite/otherpythonsite.com"> 
     Order allow,deny 
     Allow from all 
    </Directory> 
    DocumentRoot "/Users/Robert/Projects/OtherSite/otherpythonsite.com/static" 
    Alias /(.*(\.css|\.gif|\.ico|\.jpg|\.js|\.pdf|\.txt)) /Users/Robert/Projects/OtherSite/otherpythonsite.com/static/$1 
    WSGIScriptAlias//Users/Robert/Projects/OtherSite/otherpythonsite.com/wsgi.py 
    ServerName otherpythonsite.com.local 
    ServerAlias www.otherpythonsite.com.local 
    ErrorLog "/Users/Robert/Projects/OtherSite/error.log" 
    CustomLog "/Users/Robert/Projects/OtherSite/access.log" common 
</VirtualHost> 

तो, PHP साइटों DocumentRoot में चलाने की तरह वे हमेशा करते हैं। और पाइथन साइटें डब्लूएसजीआई में चलती हैं। और वे दोनों अपाचे में दौड़ते हैं। फिर परीक्षण करने के लिए, मैं अपने स्थानीय प्रतिलिपि पर काम करने के लिए उपयोग कर रहे किसी भी ब्राउज़र में ".local" जोड़ता हूं।

+2

+1, प्रश्न का उत्तर नहीं देता है लेकिन फिर भी उपयोगी और प्रासंगिक है। – AlexMA

+3

बस मुझे क्या चाहिए! कोई भी कभी भी पोर्ट नंबर में उपयोगकर्ताओं को टाइप क्यों करना चाहेगा? –

+0

बस अगर किसी को दो अलग-अलग वेब सर्वर की आवश्यकता होती है। उदाहरण के लिए एक नोड.जेएस ऐप और एक पीएचपी ऐप, दोनों सार्वजनिक। यदि ये दोनों एक ही सर्वर पर हैं, तो इनमें से एक को अलग-अलग बंदरगाह को सुनना चाहिए। – Akis

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

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