प्रतिक्रिया हेडर स्थान के nginx प्रॉक्सी_पास को फिर से लिखना


11

इस nginx उदाहरण का उद्देश्य GitLab और OpenWRT लुसी को रिवर्स प्रॉक्सी के माध्यम से पुनर्निर्देशित करना है। यह पहले से ही कई अन्य वेबसाइटों के लिए काम कर रहा है, सभी के पास एक बेस यूआरएल है जो इस मुद्दे का मुकाबला करता है।

  • इस उदाहरण में GitLab 9000 पोर्ट पर स्थानीय सर्वर पर है।
  • Nginx वेबसाइट पोर्ट 8080 पर है।
  • OpenWRT में एक ही मुद्दा है, लेकिन / cgi-bin / luci / के साथ

उदाहरण के स्थान के लिए प्रासंगिक नगनेक्स विन्यास है;

location /gitlab/ {
    proxy_pass http://127.0.0.1:9000/;
    proxy_redirect default;
}
  • ध्यान दें कि परिणाम एक अनुगामी स्लैश के साथ और बिना समान हैं।

इस स्थान पर कुछ हेडर प्रॉक्सी कॉन्फ़िगरेशन विकल्प लागू किए जा रहे हैं।

# Timeout if the real server is dead
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503;

# Basic Proxy Config
proxy_set_header    Host $host:$server_port;
proxy_set_header    Origin $scheme://$host:$server_port;    
proxy_set_header    Connection $http_connection;
proxy_set_header    Cookie $http_cookie;
proxy_set_header    Upgrade $http_upgrade;
proxy_set_header    X-Forwarded-Protocol $scheme;
proxy_set_header    X-Scheme $scheme;
proxy_set_header    X-Real-IP $remote_addr;
proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header    X-Forwarded-Ssl on;
proxy_set_header    X-Frame-Options SAMEORIGIN;

# Advanced Proxy Config
send_timeout            5m;
proxy_read_timeout      300;
proxy_send_timeout      300;
proxy_connect_timeout   300;

proxy_buffers 32 4k;
proxy_buffer_size           4k;
proxy_busy_buffers_size     64k;
proxy_temp_file_write_size  64k;

proxy_http_version 1.1;
proxy_cache_bypass $cookie_session;
proxy_no_cache $cookie_session;]
  • इसके बजाय #proxy_set_header होस्ट को टिप्पणी करना ब्राउज़र को पुनर्निर्देशित करता है https://127.0.0.1:9000/users/sign_in

जब ब्राउज़ करना https://website.com:8080/gitlab/;

GET /gitlab/ HTTP/1.1
Host: website.com:8080

प्रतिक्रिया गलत के /users/sign_inबजाय वापस चली जाती है/gitlab/users/sign_in

HTTP/1.1 302 Found
Cache-Control: no-cache
Connection: keep-alive
Content-Type: text/html; charset=utf-8
Location: https://website.com:8080/users/sign_in

Https: // वेबसाइट पर मैन्युअल रूप से ब्राउज़ करना : 8080 / gitlab / users / sign_in पृष्ठ को लोड करता है, लेकिन कोई भी संपत्ति नहीं है जब तक कि वे ऊपर के समान मुद्दे तक नहीं गिरते।

गितलब असेट फेल

Nginx डॉक्स को पढ़ना , यह बताता है कि डिफ़ॉल्ट प्रॉक्सी व्यवहार को इस परिदृश्य को संभालना चाहिए, हालांकि यह विफल लगता है।

लॉग ज्यादा नहीं दिखाते हैं।

ऐसा क्यों हो रहा है, इसके निदान के लिए क्या अतिरिक्त कदम उठाए जाने चाहिए?

जवाबों:


3

अपने proxy_passलक्ष्य के लिए एक अनुगामी स्लेश जोड़ें ।

अद्यतन: ओपी सटीक नहीं था कि vhost स्वीकार कर रहा था https। जैसा कि योजना के अतिरिक्त हेडर के साथ बैकएंड सर्वर पर भेजा जाता है, तब एक समस्या होती है क्योंकि http के बजाय अपस्ट्रीम उत्तरों में हेडर को फिर से लिखना, जब HTTP स्कीम को डिफ़ॉल्ट रूप से http स्कीम कीproxy_redirect default; अपेक्षा करने के लिए nginx के आदेश के बाद ।Location

इसलिए, इसे और अधिक सामान्य रूप में बदलना होगा (अनुगामी स्लैश अभी भी आवश्यक है):

location /gitlab/ {
    proxy_pass http://127.0.0.1:9000/;
    proxy_redirect $scheme://$host:$server_port/ /gitlab/;
}

हाय जेवियर, उत्तर के लिए धन्यवाद। वहां कोई किस्मत नहीं। यह उन चीजों में से एक है जो मुझे आज़माए गए हैं (प्रॉक्सी_पास डॉक्स से मेल खाते हुए) लेकिन कोई बदलाव नहीं:
जेक एडवर्ड्स

मैंने प्रॉक्सी_सेट_हाइडर के बारे में जानकारी जोड़ी है, जो किसी अन्य जानकारी में थी। होस्ट लाइन को हटाने से चीजें बदल जाती हैं - रीडायरेक्ट 127.0.0.1:9000/users/sign_in
जेक एडवर्ड्स

ठीक है तो मुद्दा व्यवहार के schemeसाथ (https) proxy_redirect defaultहै जो http की अपेक्षा करता है। होस्ट हेडर को कमेंट करने और proxy_redirectकंटेंट को बदलने से पहले कॉन्फ़िगरेशन को वैसा ही रहने दें $scheme://$host:$server_port/ /gitlab/;। सुनिश्चित करें कि परीक्षण करते समय आप ब्राउज़र कैश्ड हेडर (उपयोग cli टूल्स या निजी नेविगेशन) को नहीं मार रहे हैं।
जेवियर लुकास

ठीक है, अच्छा है, इसलिए यह अब सही URL पर जाता है (कम से कम GitLab करता है, OpenWRT अभी भी / cgi-bin / luci - एक समय में एक पर जाता है)। किसी भी संपत्ति / छवियों की जरूरत नहीं है / आदि तथापि -: 8080 / आस्तियों / बजाय आवेदन-5ec1aeb4604cbfbeff836f956308b0ed.js: 8080 / gitlab / आस्तियों / आवेदन-5ec1aeb4604cbfbeff836f956308b0ed.js
जेक एडवर्ड्स

1
@ShadowXVII एसेट लिंक आपके एप्लिकेशन द्वारा जेनरेट किए जाते हैं, आपको इसे वहां बदलना होगा। Nginx केवल आपके ऐप द्वारा जारी किए गए पुनर्निर्देशन को फिर से लिखेगा, पृष्ठ सामग्री नहीं।
जेवियर लुकास

0

@XavierLucas का कहना है कि सही है लिंक को हैंडल करना चाहिए। Gitlab डॉक्यूमेंट में हेडिंग Install GitLab के तहत एक रिश्तेदार URL के तहत एक गाइड है । मैंने हाल ही में इस समस्या में भाग लिया, जबकि gitlab और nginx के साथ एक आर्क लिनक्स सर्वर स्थापित करते हुए और इसने सभी समस्या को सही रिश्तेदार पथ के लिए पुन: स्थापित करके मेरी समस्या का समाधान किया।

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