ফ্লাইতে nginx দ্বারা প্রক্সি করা ডেটা সংশোধন করুন


9

আমার একটি এনগিনেক্স সেটআপ রয়েছে যা বাহ্যিক হোস্টগুলির কাছ থেকে অনুরোধ গ্রহণ করে এবং তাদের অভ্যন্তরীণ সার্ভারে প্রক্স করে।

কনফিগারেশনটি দেখতে এরকম কিছু দেখাচ্ছে:

server {

        listen 10.0.0.66:443;

        server_name my.example.com;

        root /websites/my.example.com

        ssl on;
        ssl_certificate /websites/ssl/my.example.com.crt;
        ssl_certificate /websites/ssl/my.example.com.key;

        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header Host $http_host;

        location / {
                proxy_pass https://10.0.0.100:3000/;
        }
}

পরীক্ষামূলক / পরীক্ষার উদ্দেশ্যে, আমি অভ্যন্তরীণ হোস্টটি একটি স্বেচ্ছাসেবী বাইনারি দ্বারা যা উত্তর দিয়েছিল তা চালাতে এবং বাইনারি কী প্রতিক্রিয়া জানায় তাতে প্রতিক্রিয়া জানাতে সক্ষম হতে চাই।

জন্য উদাহরণস্বরূপ , আমি যদি প্রক্সি তে অল্প করা এইচটিএমএল চেয়েছিলেন আমি htmlcompressor মাধ্যমে সার্ভারের প্রতিক্রিয়া চালানো এবং তারপর ক্লায়েন্টের সাথে প্রক্সি প্রতিক্রিয়া হিসাবে আউটপুট পাঠাতে হবে। শেষ ফলাফলটি শেষ ক্লায়েন্টকে এইচটিএমএল ফিরিয়ে দেওয়া হবে।

আমি জানি স্থানীয়ভাবে পরিবেশন করা ডেটার জন্য এনজিঙ্ক্সের জন্য এটি সম্পাদন করার জন্য সমস্ত ধরণের অ্যাডোনস এবং উদাহরণ রয়েছে তবে কীভাবে এটি প্রক্সি জন্য সেট আপ করবেন?


শুধু নির্মল. আপনি এনগিনেক্সকে অনুরোধটি প্রক্সি সার্ভারে ফরোয়ার্ড করতে চান, একটি প্রতিক্রিয়া ফিরে পেয়েছেন, সংকোচনের পরে ব্যবহারকারীর কাছে ফরোয়ার্ড করতে চান? আপনি nginx এটি সার্ভার এবং ব্যবহারকারীর মাঝখানে প্রক্রিয়া করতে চান?
sjdaws

@ sjdaws, অগত্যা এটি সংকুচিত করবেন না, তবে যেকোন স্বেচ্ছাসেবী প্রোগ্রামের মাধ্যমে এটি চালান এবং ক্লায়েন্টকে কী পাঠানো হবে সে হিসাবে আউটপুটটি ব্যবহার করুন। সুতরাং সংক্ষেপে হ্যাঁ, আমি ক্লায়েন্ট থেকে সার্ভার থেকে আউটপুট পরিবর্তন করতে চাই।
0x6A75616E

উত্তর:


10

সুতরাং, আপনি nginxক্লায়েন্টের কাছ থেকে ব্যাকএন্ড সার্ভারে একটি অনুরোধ প্রক্সি করতে চান এবং তারপরে, ক্লায়েন্টকে ব্যাকএন্ডের জবাব ফেরানোর আগে, অন্য বাহ্যিক প্রসেসরের মাধ্যমে এই জাতীয় উত্তরটি পাইপ করবেন?

আমি মনে করি না আপনি nginxবর্তমানে ইগর সিসোয়েভ এবং এনগিনেক্স, ইনক দ্বারা সরবরাহিত কোনও অফিসিয়াল মডিউল দিয়ে উপরেরটি করতে পারেন । সর্বনিকটবর্তী বস্তু যে প্রতিক্রিয়া শরীরের পরিবর্তনের জন্য উপলব্ধ কয়েকটি ফিল্টার মডিউল যা nginx সঙ্গে একসঙ্গে আসা, কিন্তু ডিফল্ট ভাবে বন্ধ আছে সহ add_before_body, add_after_bodyএবং sub_filterনির্দেশনা:

http://nginx.org/en/docs/http/ngx_http_addition_module.html
http://nginx.org/en/docs/http/ngx_http_sub_module.html

এছাড়াও, সম্ভবত gzip on;আপনি কি পরিবর্তে আসলে চান?

http://nginx.org/en/docs/http/ngx_http_gzip_module.html

অথবা, সম্ভাব্য, আপনি যদি জানেন perlএবং একটি সম্পূর্ণরূপে পরীক্ষামূলক মডিউল চালানোর জন্য ইচ্ছুক, এম্বেডিং কটাক্ষপাত করা perlমধ্যে nginxএকটি সরকারী nginx মডিউল যে ডিফল্টরূপে বন্ধ পরিণত এবং (কিছুটা স্পষ্টত) সম্পূর্ণভাবে পরীক্ষামূলক সঙ্গে:

http://nginx.org/en/docs/http/ngx_http_perl_module.html

অন্য বিকল্পটি হ'ল একধরনের ফাস্ট-সিজিআই সেটআপ ব্যবহার করা যাতে আপনি অনুরোধগুলি পুনর্নির্দেশ করবেন, যেখানে আপনার ফাস্ট-সিজিআই স্ক্রিপ্টটি ব্যাকএন্ডে অনুরোধ করবে এবং তারপরে ফিরে আসার আগে চূড়ান্ত প্রক্রিয়াজাতকরণ হবে final উত্তরগুলি ক্যাশে Nginx এ ফিরে এবং ব্যবহারকারীর কাছে ফিরে আসে।

রয়েছে proxy_set_body(কিন্তু কোন fastcgi_set_bodyএখনো), অনুরোধের শরীর পরিবর্তন করতে (যেমন থেকে আমরা কী ক্লায়েন্ট সরবরাহকৃত করেছে), কিন্তু সাড়া শরীর পেতে কোনো সমতুল্য নির্দেশ বা পরিবর্তনশীল হবে বলে মনে হচ্ছে না, আদেশ প্রদান করিতে করার জন্য একরকম কোনও পোস্ট-প্রসেসরের কাছে পরবর্তী অনুরোধে। যাই হোক না কেন, ফিল্টার মডিউলটি সম্ভবত আপনি একটি পোস্ট-প্রসেসরের জন্য চান।

(এছাড়াও, আপনি কি বুঝতে পেরেছেন যে forkনিয়মিত নির্বাহীর মাধ্যমে আইএনপি এবং পাইপ জবাব দেওয়ার একটি নির্লজ্জ পদ্ধতির অতিরিক্ত অতিরিক্ত ধীর হতে চলেছে, তাই না?)

সংক্ষেপে বলতে গেলে , আমার মনে gzip on;হয় ঠিক আপনি যা খুঁজছেন তা হ'ল; অন্যথায়, আপনি যদি মূল ওয়েবপ্যাপটি সংশোধন করতে পারেন তবে আমার মনে হয় আপনার সবচেয়ে ভাল বেট হতে পারে ওয়েব অ্যাপের মধ্যেই কোনও প্রকার পোস্ট প্রসেসর ইনস্টল করা, যা সামগ্রিকভাবে পরবর্তী সহজ সমাধানের মতো মনে হবে। সম্ভাব্যভাবে আপনি ফিল্টার মডিউলগুলি কীভাবে প্রয়োগ করা হয় তা খতিয়ে দেখতে পারেন , যেমন উল্লিখিত এনজিএক্স_এইচটিটিপি_ড্যাশন_ফিল্টার_মডিউল.সি, আরও কিছু স্পষ্টত-প্রাসঙ্গিক ফিল্টার যেমন এনজিএক্স_http_gzip_filter_module.c, এবং আপনার নিজের এমবেডেড ফিল্টার মডিউলটি প্রয়োগ করে। বা আপনার জন্য এটি লিখতে Nginx, Inc. ভাড়া করুন! তবে, গুরুত্ব সহকারে, gzip on;ঠিক কাজ করে এবং সম্ভবত কোনও ঝামেলা, কর্মক্ষমতা বা স্থিতিশীলতার সমস্যা ছাড়াই আপনাকে আরও ভাল ফলাফল দেওয়ার সম্ভাবনা রয়েছে এবং এটি ইতিমধ্যে ডিফল্টরূপে সংকলিত হয়েছে, আপনাকে কেবল এটি সক্ষম করতে হবেnginx.conf


আপনার উত্তর দেওয়ার জন্য ধন্যবাদ! আমি জিজিপ অন সচেতন এবং আমি যা সম্পাদন করতে চাইছি তা আউটপুটকে ডিফল্ট করার চেয়ে উচ্চতর স্তর। আমার কাছে একটি প্রক্সি রয়েছে যা নির্দিষ্ট কিছু অভ্যন্তরীণ ওয়েব পরিষেবাতে অ্যাক্সেসকে নিয়ন্ত্রণ করে এবং আমি গুগল অ্যানালিটিক্সের মতো জিনিসগুলিকে আউটপুটে সংযোজন করতে সক্ষম হতে চেয়েছিলাম, যেমন এটি ক্লাউডফ্লেয়ার কীভাবে করে। আপনি যেমন বলছেন, মনে হচ্ছে ফাস্টসিগি একটি বিকল্প, তাই আমি এটিতে সন্ধান করব। আবার ধন্যবাদ!
0x6A75616E

আপনি শুধু তারপর কাপড় যোগ বা Analytics হল Google যোগ করতে চান add_after_bodyবা sub_filterআপনি ঠিক কী প্রয়োজন। Nginx.org/en/docs/http/ngx_http_sub_module.html এর উদাহরণটি ঠিক সেই দৃশ্যের চিত্রটি দেখায়: "</ head>" "" কে "</head> <স্ক্রিপ্ট…" দিয়ে প্রতিস্থাপন করছে। এই মডিউলগুলি সক্ষম করার জন্য আপনাকে এনজিনেক্স পুনরায় কম্পাইল করতে হতে পারে ( nginx -Vআপনার এনজিনেক্স কীভাবে সংকলিত হয়েছিল তা পরীক্ষা করুন ), তবে তারা ইতিমধ্যে স্ট্যান্ডার্ড মডিউলগুলি অন্যথায়।
সিএনএসটি


1

আমি মনে করি আপনি যদি এনগিনেক্স আউটপুটকে মফাই করতে স্বতঃস্ফূর্ত কোড চালাতে চান, ... আপনি লুয়া স্ক্রিপ্ট লিখতে পারেন।

"এনজিনেক্স লুয়া" সন্ধান করুন।

(উদাহরণ: http://www.londonlua.org/scriptting_nginx_with_lua/slides.html?full#hello-lua )

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