2015-06-28 9 views
11

मैं एक 3-पक्ष ui सर्वर एक डोकर कंटेनर में चल रहा है, पोर्ट 8080http रेफरर के आधार पर URL में अतिरिक्त पथ वाले पृष्ठों के सेट पर nginx रिवर्स प्रॉक्सी?

यह एक निरपेक्ष पथ के साथ संसाधनों के लोड होने की उम्मीद करने लगता है पर उजागर किया है: http://localhost:8080/index.html, http://localhost:8080/js/some_jsfiles आदि

मैं करना चाहते हैं यह करने के लिए एक रिवर्स प्रॉक्सी बनाने तो यह लग रहा है ऐसा लगता है जैसे एक अलग रास्ता से आ रही है:

https://myserver.com/stormui/index.html, https://myserver.com/stormui/js/...

पहले मैं

की कोशिश की
location /stormui/ { 
     proxy_set_header Host $host; 
     proxy_set_header X-Real-IP $remote_addr; 
     #rewrite ^/stormui/(.*) /$1 break; 
     proxy_pass http://127.0.0.1:8080/; 
} 

index.html पृष्ठ लोड होता है, लेकिन ब्राउज़र अभी भी अतिरिक्त पथ के बिना पुन: प्रस्तुत सामग्री को लोड करने का प्रयास करता है, इसलिए मुझे index.html से संदर्भित सभी जावास्क्रिप्ट आदि पर 404 मिलते हैं।

तब मैं संदर्भित उपयोग करने के लिए, फिर से लिखने स्थान/{

if ($http_referer ~ "^/stormui/.*") { 
     rewrite ^/(.*) /stormui/$1 break; 
    } 

    root /usr/share/nginx/html; 
    index index.html index.htm; 
    ... 
} 

कि काम नहीं किया करने के लिए या तो की कोशिश की। क्या इसे करने का कोई तरीका है?

+0

क्या जेनरेट किए गए index.html में जेएस/सीएसएस के लिए पूर्ण यूआरएल हैं? – Marki555

उत्तर

1

मैं इसी तरह के मुद्दों रहा था nginx सेट करने के दौरान तूफान-यूआई

के लिए प्रॉक्सी रिवर्स कुछ समय के लिए खुदाई के बाद, मैं यह काम कर रहा मिला है।

server { 
    listen 80; 

    server_name example.com; 

    location ^~ /css/ { 
     rewrite /(.*) /storm-ui/$1; 
    } 

    location ^~ /js/ { 
     rewrite /(.*) /storm-ui/$1; 
    } 

    location ^~ /templates/ { 
      rewrite /(.*) /storm-ui/$1; 
    } 

    location ^~ /api/ { 
      rewrite /(.*) /storm-ui/$1; 
    } 

    location ~ ^/topology(.*) { 
      rewrite /(.*) /storm-ui/$1; 
    } 

    location /storm-ui/ { 
     proxy_redirect//storm-ui/; 
     #proxy_pass http://<STORM_MASTER_IP/HOSTNAME>:<PORT>/; 
     proxy_pass http://10.14.23.10:8080/; 
    }  
} 
3

मुझे यकीन नहीं है कि मैं पूरी तरह से समझता हूं। क्या यूआई सर्वर से HTML (उदा। Index.html) (लोकलहोस्ट पर चल रहा है: 8080) में पूर्ण यूआरएल हैं? यदि ऐसा है, तो आपके पास दो विकल्प हैं:

  1. प्रॉक्सी सर्वर में HTML को पुनर्लेखन करें। अर्थात। अपनी आवश्यकताओं के अनुसार यूआरएल बदलें।
  2. मुझे लगता है कि आपके यूआई सर्वर (मूल सर्वर) को कॉन्फ़िगर करने के लिए कुछ सेटिंग्स होनी चाहिए, जैसे कि यह इन पूर्ण URL का उपयोग स्थानीयहोस्ट: 8080 पर नहीं करता है।

मैं बैकएंड पर क्या चल रहा है, इस बारे में अधिक जानकारी के बिना # 2 का उत्तर नहीं दे सकता।

+0

यूआई अपाचे तूफान के लिए यूआई है, जो डॉकर में चल रहा है। मैंने उनके स्रोत कोड में खोला और वास्तव में यह उनके index.html/all/have/absolute/paths से संदर्भित संसाधनों की तरह दिखता है। बहुत मुश्किल मुझे लगता है कि मेरा एकमात्र विकल्प एनजीएक्सएक्स के लिए एचटीएमएल रीराइट प्लगिंग प्राप्त करना है। –

+1

आपको अपने कोड को ठीक करने के लिए अपाचे तूफान समुदाय को काम/समझाना चाहिए। यूआरएल के "बेस" को संशोधित करने की इजाजत नहीं है वास्तव में क्रमी है। आदर्श रूप में, जब संभव हो तो वे संबंधित यूआरएल का उपयोग करेंगे। असल में, आधार URL को संशोधित करने में सक्षम नहीं होने पर, इन संसाधनों में से कुछ को सीडीएन स्टाइल सेवा प्रदाता के पीछे रखना मुश्किल हो जाता है। –

+1

इसके अलावा, भले ही वे पूर्ण हैं (लेकिन http: // के बिना), आप nginx पर उपयुक्त स्थान/proxy_pass नियम जोड़ सकते हैं। –

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