2014-09-27 8 views
12

मैं लोचदार beanstalk पर nginx की विन्यास का पालन करने की कोशिश कर रहा हूँ और कुछ चीजें जोड़ नहीं है।लोचदार बीनस्टॉक अजीब nginx विन्यास

  • उदाहरण सुरक्षा समूहों में पोर्ट 80 खोल रहा है, इसलिए मैं सभी आने वाली यातायात कि बंदरगाह

  • बिल्ली /etc/nginx/conf.d/00_elastic_beanstalk_proxy में nginx विन्यास के माध्यम से आ रहा है मान लेते हैं। 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; 
    } 
    

    पोर्ट 8080? वह कहां से आया है? मैंने इसके साथ गड़बड़ करने की कोशिश की है, यह वास्तविक निर्देश है जो काम कर रहा है।

  • server_name गुम है, फिर भी टीटी इससे कोई फर्क नहीं पड़ता कि आपने इसमें क्या रखा है। यदि मैं स्वयं server_name में कोई मान डालता हूं, तो यह सर्वर नियम अभी भी सभी अनुरोधों से मेल खाता है, यहां तक ​​कि वे जो सर्वर_नाम मान को दूरस्थ रूप से संशोधित नहीं कर रहे हैं।

  • जबकि उदाहरण ही यह दोनों बंदरगाहों में कार्य किया जा रहा है लगता है से जुड़ा:

    [EC2 उपयोगकर्ता @ आईपी-172-31-45-222 ~] $ sudo netstat -lnptu

    टीसीपी 0 0 0.0.0.0:8080 सुनें 0.0.0.0:* 22,506/nginx

    टीसीपी 0 0 0.0.0.0:80 सुनें 0.0.0.0:* 22,506/nginx

एक बार फिर, 8080 खोला कभी नहीं किया गया है इनमें क्यूरिटी ग्रुप, इतनी लोचदार लोड संतुलित पोर्ट 80 के माध्यम से अंदर आ रही है। क्या यातायात जादुई रूप से 80 से 8080 तक जाता है? कोई विचार क्या हो रहा है?

उत्तर

31

आपको लगता है कि nginx config के एक भाग को देखने के लिए भूल जाते हैं:

upstream nodejs { 
    server 127.0.0.1:8081; 
    keepalive 256; 
} 

वह भाग सर्वर nodejs कहा जाता है के एक समूह बनाने के लिए के रूप में आप here के बारे में पढ़ सकते हैं nginx कह रहा है।

8081 वह पोर्ट है जो नोडजेएस चालू है (यदि आप उदाहरण के लिए sample application का उपयोग करते हैं)।

आप लचीला बीनस्टॉक लॉग को देखकर यह सत्यापित कर सकते हैं:

------------------------------------- 
/var/log/nodejs/nodejs.log 
------------------------------------- 
Server running at http://127.0.0.1:8081/ 

तो अगर हम nginx.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; 
    } 


} 

यह बताता है पोर्ट 8080 से हमारे अपस्ट्रीम समूह nodejs पर पोर्ट 8080 पर चलने के लिए proxy pass module का उपयोग करने के लिए nginx का उपयोग करने के लिए पोर्ट 8080 पर चल रहा है। इसका मतलब है कि पोर्ट 8081 केवल स्थानीय रूप से इसका उपयोग करने के लिए है, लेकिन पोर्ट 8080 है जो बाहर की इकाइयों को nginx से बात करता है जो तब गुजरता है नोडज पर सामान।

सीधे नोडजेएस को उजागर करने के कुछ कारण this StackOverflow answer में पाए जा सकते हैं।

पोर्ट 8080 का उपयोग किया जाता है क्योंकि यह HTTP alternate port है जो "आमतौर पर वेब प्रॉक्सी और कैशिंग सर्वर के लिए उपयोग किया जाता है, या एक गैर-रूट उपयोगकर्ता के रूप में वेब सर्वर चलाने के लिए।"

बंदरगाहों। अब ईएलबी के मुद्दे और कैसे चीजें एक दूसरे से बात कर रहे हैं।

के बाद से सुरक्षा समूह केवल पोर्ट 80 पर पहुँच की अनुमति दे रहे बताते हैं कि, वहाँ एक iptables नियम यह है कि आगे के लिए सेटअप है पोर्ट 8080 को पोर्ट 80 यह गैर-रूट पोर्ट 8080 करने के लिए बाध्य करने के लिए, क्योंकि कम पोर्ट संख्या रूट विशेषाधिकारों की आवश्यकता होती है की अनुमति देता है

आप चलाकर इस की पुष्टि कर सकते हैं:।

[[email protected] ~]$ sudo iptables -t nat -L 
Chain PREROUTING (policy ACCEPT) 
target  prot opt source    destination   
REDIRECT tcp -- anywhere    anywhere    tcp dpt:http redir ports 8080 

Chain INPUT (policy ACCEPT) 
target  prot opt source    destination   

Chain OUTPUT (policy ACCEPT) 
target  prot opt source    destination   
REDIRECT tcp -- anywhere    anywhere    tcp dpt:http redir ports 8080 

Chain POSTROUTING (policy ACCEPT) 
target  prot opt source    destination   

तो सारांश में, जब आप लोड सीएनएन, अपने सीएनएन लोड करें er पोर्ट 80 पर किसी दिए गए आवृत्ति पर यातायात को दोबारा शुरू कर रहा है, जिसे सुरक्षा समूह के माध्यम से अनुमति दी जाती है, फिर iptables पोर्ट 8080 को अग्रेषित कर रहा है, जो पोर्ट है जो nginx पोर्ट 8081 पर यातायात को पारित करने के लिए प्रॉक्सी का उपयोग कर रहा है जो कि है नोडजेएस के स्थानीय बंदरगाह।

उम्मीद है कि मदद करता है।

+1

लेकिन nginx रूट के रूप में चल रहा है, और सभी nginx उदाहरणों में हमेशा विन्यास में 80 है, इसलिए मैं उलझन में था, बीनस्टॉक पर्यावरण के बारे में क्या विशेष है। –

+0

निश्चित रूप से * पोर्ट * 80 पर nginx के सभी * कॉन्फ़िगरेशन नहीं चल रहे हैं। यह एक पोर्टेबल लिखने के लिए पोर्ट 80 का उपयोग करके ट्यूटोरियल लिखना थोड़ा आसान है, इसे एक आईपटेबल फ़िल्टर के साथ एक अलग बंदरगाह पर चलाने के लिए। लोचदार बीनस्टॉक के बारे में कुछ खास नहीं है, यह वही है जो चुना गया है। –

+0

यह नोडजेस ऐप्स के लिए लोचदारबीनस्टॉक nginx सेटअप का एक उत्कृष्ट स्पष्टीकरण है, विशेष रूप से अंतिम iptables चरण। – Jessedc

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