2015-12-10 11 views
5

मैं अपने स्थानीय कंप्यूटर में Nginx और आरओआर वेब सर्वर (जैसे Unicorn, Thin या WEBrick) द्वारा अपने स्थानीय कंप्यूटर में रेल रूबी पर अपनी रूबी को तैनात करना चाहता हूं।मैं nginx प्रॉक्सी पास के माध्यम से सबडोमेन तक क्यों नहीं पहुंच सकता?

नीचे दिखाया गया है, मैं post उप डोमेन के आधार पर अपने वेब ऐप्लिकेशन पर पहुंच चाहते हैं:

upstream sub { 
    server unix:/tmp/unicorn.subdomain.sock fail_timeout=0; 
# server 127.0.0.1:3000; 
} 

server { 
    listen 80; 
    server_name post.subdomain.me; 

    access_log /var/www/subdomain/log/access.log; 
    error_log /var/www/subdomain/log/error.log; 
    root  /var/www/subdomain; 
    index index.html; 

    location/{ 
    proxy_set_header X-Real-IP $remote_addr; 
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
    proxy_set_header Host $http_host; 
    proxy_redirect off; 
    try_files /system/maintenance.html $uri $uri/index.html $uri.html @ruby; 
    } 

    location @ruby { 
    proxy_pass http://sub; 
    } 
} 

सब कुछ ठीक काम कर रहा है और जब मैं post.subdomain.me टाइप मैं अपने आतंक विरोधी एप्लिकेशन देख सकते हैं।

समस्या: जब मैं post.subdomain.me यूआरएल का उपयोग मैं अपने उप डोमेन में उपयोग नहीं कर सकते (request.subdomain रिटर्न खाली और request.host रिटर्न subdomainsubdomain.me के instaed)। लेकिन जब मैं post.subdomain.me:3000 का उपयोग करता हूं तो हर चीज सही काम करती है (मैंने इसे महसूस करने के लिए अपने बाल का आधा खो दिया)। मैं इसे कैसे और कैसे हल कर सकता हूं?

+0

HTTP सर्वर के लिए आप क्या उपयोग कर रहे हैं? आपने यूनिकॉर्न, थिन और वेब्रिक का उल्लेख किया लेकिन आपने यह नहीं कहा कि आपने किसने कोशिश की थी। –

+0

@ टॉमल: उन सभी के साथ मुझे एक ही समस्या है। –

+0

आपके सभी 'proxy_xxx' निर्देश गलत' स्थान 'ब्लॉक में हैं। आपको उन्हें 'स्थान @ रूबी' ब्लॉक में 'proxy_pass' निर्देश के साथ रखने की आवश्यकता है, अन्यथा उन्हें अनदेखा कर दिया जाएगा। –

उत्तर

3

आप पोर्ट के साथ अनुप्रयोग का उपयोग करते हैं - आप रेल सर्वर तक पहुँच रहे हैं सीधे, नहीं nginx द्वारा प्रॉक्सी, इस डिबग के लिए ठीक है, लेकिन आम तौर पर उत्पादन के लिए अच्छी तरह से नहीं है।

शायद मेजबानी हैडर ग्राहक द्वारा पर पारित नहीं है, nginx की मेजबानी के लिए $host चूक

location @ruby { 
    proxy_set_header Host $host; 
    proxy_pass http://sub; 
} 

और एक 'hardcode' तरह का प्रयास करें: proxy_set_header Host post.subdomain.me;

+0

नहीं, यह नहीं है। उत्तर के लिए धन्यवाद। –

+0

'$ host' या hardcode डोमेन – Vasfed

+0

साथ बदलने के लिए' $ http_host' अभी तक काम नहीं करता संपादित, मैं उन दोनों की कोशिश की। –

2

proxy_set_header और proxy_redirect निर्देशों कॉन्फ़िगर proxy_pass निर्देश और उसी स्थान ब्लॉक के भीतर होने की आवश्यकता है या server ब्लॉक से विरासत में मिला है। आप इस तरह अपने विन्यास फाइल प्रारूप में तैयार करना:

location/{ 
    try_files /system/maintenance.html $uri $uri/index.html $uri.html @ruby; 
} 

location @ruby { 
    proxy_set_header X-Real-IP $remote_addr; 
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
    proxy_set_header Host $http_host; 
    proxy_redirect off; 
    proxy_pass http://sub; 
} 

संपादित करें: यह मानते हुए कि nginx सही ढंग से आतंक विरोधी के लिए जानकारी गुजर नहीं है, के रूप में @Vasfed का सुझाव दिया, proxy_set_header Host के लिए अन्य मान प्रयास करें। तीन अन्य उम्मीदवार हैं, सभी थोड़ा अलग अर्थों के साथ।

proxy_set_header Host post.subdomain.me; 
    proxy_set_header Host $server_name; 
    proxy_set_header Host $host; 
+0

मैंने कोशिश की, अभी तक काम नहीं करता है। –

+0

@ अलीसेफरी.केएच संपादित करें: स्पष्ट रूप से वासफेड के सुझाव में कहा गया है। –

+0

हाँ, आप पूरी तरह से सही हैं। मेरी गलती। –

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