বহির্মুখী প্রতিক্রিয়ার ভিতরে url পুনরায় লেখতে nginx ব্যবহার করা


8

অ্যাপাচে চলমান একটি সাইট সহ আমাদের গ্রাহক রয়েছে। সাম্প্রতিক SITE বর্ধিত লোড এইজন্য করা হয়েছে এবং একটি স্টপ ফাঁক হিসাবে আমরা সব, একটি cookieless ডোমেনে সাইটে স্ট্যাটিক কন্টেন্ট নামান যেমন চান http://static.thedomain.com

আবেদনটি ভালভাবে বোঝা যায় না is সুতরাং বিকাশকারীদের স্থিতিশীল কন্টেন্ট সার্ভারে তাদের লিঙ্কগুলি নির্দেশ করার জন্য কোডটি সংশোধন করার সময় দেওয়ার জন্য ( http://static.thedomain.com) আমি এনজিন্যাক্সের মাধ্যমে সাইটটি প্রক্সিং করা এবং বহির্গামী প্রতিক্রিয়াগুলিকে পুনরায় লেখার বিষয়ে ভেবেছিলাম যাতে লিঙ্কগুলি /images/...পুনরায় লিখিত হয় http://static.thedomain.com/images/...

সুতরাং উদাহরণস্বরূপ, অ্যাপাচি থেকে এনজিনেক্সের প্রতিক্রিয়ায় শিরোনাম + এইচটিএমএল একটি ব্লব রয়েছে। অ্যাপাচি থেকে ফিরে আসা এইচটিএমএলে আমাদের <img>ট্যাগগুলির মতো দেখতে রয়েছে:

<img src="/images/someimage.png" />

আমি এটিকে রূপান্তর করতে চাই:

<img src="http://static.thedomain.com/images/someimage.png" />

যাতে ব্রাউজারটি এইচটিএমএল পৃষ্ঠা পাওয়ার পরে স্থির সামগ্রীর সার্ভার থেকে সরাসরি চিত্রগুলির জন্য অনুরোধ করে।

Nginx (বা HAProxy) দিয়ে এটি কি সম্ভব?

দস্তাবেজগুলির মধ্যে আমার কাছে এক ঝলক দৃষ্টি রয়েছে তবে ইনবাউন্ড ইউআরএলগুলি পুনরায় লেখার ব্যতীত আমার দিকে কিছুই ছাপেনি।

উত্তর:


5

একটি http://wiki.nginx.org/HttpSubModule আছে - "এই মডিউলটি nginx প্রতিক্রিয়াতে পাঠ্যটি সন্ধান এবং প্রতিস্থাপন করতে পারে।"

দস্তাবেজগুলি থেকে অতীতটি অনুলিপি করুন:

বাক্য গঠন:

sub_filter string replacement

উদাহরণ:

location / {
  sub_filter      </head>
  '</head><script language="javascript" src="$script"></script>';
  sub_filter_once on;
}

হ্যাপ্রোক্সির জন্য এর মতো কিছু আছে কি?
ব্র্যাডভিডো

@ ব্রাডভিডো আমি হ্যাপ্রোক্সিতে এমন বৈশিষ্ট্যটি পাইনি।
ওলেগ নিউমাইভাকিন

3

প্রক্সি বৈশিষ্ট্যটি ব্যবহার করা এবং ইউআরএলগুলি পুনরায় লেখার এবং ব্রাউজারে পুনঃনির্দেশগুলি প্রেরণের বিপরীতে যথাযথ জায়গা থেকে সামগ্রীটি আনা ভাল।

প্রক্সিং কন্টেন্টের একটি ভাল উদাহরণ দেখতে যেমন:

#
#  This configuration file handles our main site - it attempts to
# serve content directly when it is static, and otherwise pass to
# an instance of Apache running upon 127.0.0.1:8080.
#
server {
    listen :80;

    server_name  www.debian-administration.org debian-administration.org;
        access_log  /var/log/nginx/d-a.proxied.log;

        #
        # Serve directly:  /images/ + /css/ + /js/
        #
    location ^~ /(images|css|js) {
        root   /home/www/www.debian-administration.org/htdocs/;
        access_log  /var/log/nginx/d-a.direct.log ;
    }

    #
    # Serve directly: *.js, *.css, *.rdf,, *.xml, *.ico, & etc
    #
    location ~* \.(js|css|rdf|xml|ico|txt|gif|jpg|png|jpeg)$ {
        root   /home/www/www.debian-administration.org/htdocs/;
        access_log  /var/log/nginx/d-a.direct.log ;
    }


        #
        # Proxy all remaining content to Apache
        #
        location / {

            proxy_pass         http://127.0.0.1:8080/;
            proxy_redirect     off;

            proxy_set_header   Host             $host;
            proxy_set_header   X-Real-IP        $remote_addr;
            proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;

            client_max_body_size       10m;
            client_body_buffer_size    128k;

            proxy_connect_timeout      90;
            proxy_send_timeout         90;
            proxy_read_timeout         90;

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

এই কনফিগারেশনে, static.domain.comব্রাউজারটিতে অনুরোধগুলি পুনর্নির্দেশ করার পরিবর্তে এবং ব্রাউজারকে অন্য একটি অনুরোধ করার প্রত্যাশার পরিবর্তে , এনজিনেক্স কেবল প্রাসঙ্গিক স্থানীয় পথ থেকে ফাইলটি পরিবেশন করে। যদি অনুরোধটি গতিশীল হয় তবে প্রক্সিটি শেষ ব্যবহারকারীকে না জেনে কোনও অ্যাপাচি সার্ভারের (স্থানীয় বা রিমোট) প্রতিক্রিয়া এনে দেয় এবং প্রতিক্রিয়া নিয়ে আসে।

আমি আশা করি এটি সাহায্য করবে


এই উত্তর দিতে সময় ব্যয় করার জন্য ধন্যবাদ। আমি একটি পরীক্ষা রগ সেট আপ করব এবং দেখুন এটি কীভাবে কাজ করে। এখানে গুরুত্বপূর্ণ বিষয়টি হ'ল অ্যাপাচি সার্ভারের সমস্ত স্থির সামগ্রী সরিয়ে নেওয়া। সুতরাং আমি অনুমান করি যে আমি সিডিএন সার্ভারে এনগিনেক্স চালাতে পারি এবং proxy_passঅ্যাপাচি সার্ভারে সেট করতে proxy_pass http://172.16.3.1:80পারি , যেমন ? অর্থাত্ আমরা সাইটের পাবলিক আইপি ঠিকানাটি এনজিএনএক্স / সিডিএন সার্ভারে স্থানান্তরিত করি।
কেভ

হ্যাঁ এটা সঠিক। এবং কোনও প্রোব নেই - আমি এখনই এনজিঙ্কসে গভীরভাবে হাঁটু গেছি এবং এটি ভালবাসি।
তাক

আপনার উত্তরটি ভুলে যায়নি :) এখনও এটি চেষ্টা করার সুযোগ পাননি।
কেভ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.