NGINX HEAD को GET अनुरोधों में परिवर्तित करता है


10

कुछ भयानक डिजाइन निर्णयों के कारण, हमारे पास HTTP HEAD अनुरोधों का जवाब देने में असमर्थ आवेदन है (रिटर्न की विधि अनुमति नहीं है)। HEAD अनुरोधों को सही ढंग से वापस करने के लिए सॉफ्टवेयर को संशोधित करना मुश्किल नहीं बल्कि अतिरिक्त काम होगा। आवेदन एक NGINX प्रॉक्सी के पीछे बैठता है, मैं सोच रहा था कि क्या NGINX को पाने का एक तरीका HEAD अनुरोधों को क्लाइंट से GET अनुरोधों में बैक-एंड में बदलने के लिए है, तो हेडर को छोड़कर प्रतिक्रिया को छोड़ दें और इसे वापस भेजें क्लाइंट हालांकि हमारे एप्लिकेशन सर्वर HEAD अनुरोधों का जवाब देने में सक्षम थे।

वर्तमान विन्यास (काफी मानक)

upstream ourupstream{
    server unix:/var/apps/sockets/ourapp.socket.thread1
    server unix:/var/apps/sockets/ourapp.socket.thread2
    server unix:/var/apps/sockets/ourapp.socket.thread3
    [like 20 of these]
}

server {
    listen       1.2.3.4:80;
    server_name  ourapp;

    access_log  /var/apps/logs/ourapp.nginx.plog    proxy;
    error_log   /var/apps/logs/ourapp.nginx.elog    info;

    gzip on;

    gzip_types  text/plain text/html;

    proxy_intercept_errors on;
    proxy_connect_timeout 10;
    proxy_send_timeout 10;
    proxy_read_timeout 10;
    proxy_next_upstream error timeout;
    client_max_body_size 2m;

    error_page 404 /static/404.html;
    error_page 500 501 502 503 504 =500 /static/500.html;

    location / {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://ourupstream/;
    }

    location /static/ {
        root /var/apps/global/;
    }
}

आप बैकएंड पर कैसे अनुरोध कर रहे हैं? proxy_pass? fastcgi_pass? क्या आप अपना वर्तमान विन्यास पेस्ट कर सकते हैं? नगीनेक्स का कौन सा संस्करण आप चला रहे हैं?
कोलबिजैक

@kolbyjack प्रॉक्सी_पास यूनिक्स सॉकेट्स, NGINX 1.1.12 और 1.0.11 इन देव का उपयोग करके, उत्पादन में 1.0.11 (हम उत्पादन को जल्द ही 1.1.12 तक ले जा रहे हैं)
Smudge

जवाबों:


5

चूंकि आप प्रॉक्सी_पास का उपयोग कर रहे हैं, मुझे लगता है कि आपको कुछ एरर_पेज दुरुपयोग का उपयोग करना होगा (और चूंकि आप पहले से ही एरर_पेज का उपयोग कर रहे हैं, तो आपको पुनरावर्ती त्रुटि पेजों को भी सक्षम करना होगा)। मुझे लगता है कि यह आपके लिए काम करेगा:

upstream ourupstream{
    server unix:/var/apps/sockets/ourapp.socket.thread1
    server unix:/var/apps/sockets/ourapp.socket.thread2
    server unix:/var/apps/sockets/ourapp.socket.thread3
    [like 20 of these]
}

server {
    listen       1.2.3.4:80;
    server_name  ourapp;

    access_log  /var/apps/logs/ourapp.nginx.plog    proxy;
    error_log   /var/apps/logs/ourapp.nginx.elog    info;

    gzip on;

    gzip_types  text/plain text/html;

    proxy_intercept_errors on;
    proxy_connect_timeout 10;
    proxy_send_timeout 10;
    proxy_read_timeout 10;
    proxy_next_upstream error timeout;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    client_max_body_size 2m;

    error_page 404 /static/404.html;
    error_page 500 501 502 503 504 =500 /static/500.html;

    location @force_get {
        recursive_error_pages on;
        proxy_method GET;
        proxy_pass http://ourupstream;
    }

    location / {
        error_page 550 = @force_get;
        if ($request_method = HEAD) { return 550; }
        proxy_pass http://ourupstream;
    }

    location /static/ {
        root /var/apps/global/;
    }
}

यह अभी भी ग्राहक को ग्राहक को वापस करने के लिए लगता है, यहां तक ​​कि जब सिर के साथ अनुरोध किया जाता है। क्या शरीर की सामग्री को छीनने / अनदेखा करने का कोई तरीका है?
स्मज करें

मैं उम्मीद कर रहा था कि यह याद होगा कि मूल अनुरोध HEAD था और शरीर को गिरा दिया। मैं ऐसा करने के लिए एक और तरीका नहीं सोच सकता, माफ करना।
13

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