ইউআরএলগুলির জন্য মোড_উইরাইট কীভাবে ব্যবহৃত হয় তার অনুরূপ একটি প্রক্সি দিয়ে যাওয়া প্রতিটি পৃষ্ঠার সামগ্রীর প্রতিস্থাপন করা কি সম্ভব?


11

ইউআরএলগুলির জন্য মোড_উইরাইট কীভাবে ব্যবহৃত হয় তার অনুরূপ একটি প্রক্সি দিয়ে যাওয়া প্রতিটি পৃষ্ঠার সামগ্রীর প্রতিস্থাপন করা কি সম্ভব? বিকল্প সংক্রান্ত ডকুমেন্টেশন পরিষ্কার নয়।

আমার কয়েকটি পৃষ্ঠাগুলি আমি বিপরীত প্রক্সি করছি যার নিখুঁত পথ রয়েছে। এটি সাইট ভঙ্গ করে। তাদের প্রতিস্থাপন করা দরকার এবং মোড_উইরাইটের মতো সরঞ্জামগুলি তারা ইউআরএল অনুরোধ না হওয়ায় এগুলি তুলছে না।

<VirtualHost *:80>
    ServerName  servername1
    ServerAlias servername2

    ErrorLog "/var/log/proxy/jpuat_prox_error_log"
    CustomLog "/var/log/proxy/jpuat_prox_access_log" common

    RewriteEngine on
    LogLevel alert rewrite:trace2
    RewriteCond %{HTTP_HOST} /uat.site.co.jp$ [NC]
    RewriteRule ^(.*)$ http://jp.uat.site2uk.co.uk/$1 [P]

    AddOutputFilterByType SUBSTITUTE text/html
    Substitute "s|uat.site.co.jp|jp.uat.site2uk.co.uk|i"


    ProxyRequests Off

    <Proxy *>
            Order deny,allow
            Allow from all
    </Proxy>

    ProxyPass / http://uat.site.co.jp/
    ProxyPassReverse / http://uat.site.co.jp/
</VirtualHost>

উপরের কোনওটিই HTML স্ট্রিং প্রতিস্থাপনে কাজ করে না

<link href="/server///uat.site.co.jp/css/css.css

সঙ্গে

<link href="/server///uat.site2uk.co.uk/css/css.css

পরিবর্তনের পরে কনফিড:

<VirtualHost *:80>
    ServerName  jp.uat.site2uk.co.uk
    ServerAlias uat.site.co.jp
    ErrorLog "/var/log/proxy/jpuat_prox_error_log"
    CustomLog "/var/log/proxy/jpuat_prox_access_log" common
    ProxyRequests Off
    <Proxy *>
        Order deny,allow
        Allow from all
    </Proxy>
    ProxyPass / http://uat.site.co.jp/
    ProxyPassReverse / http://uat.site.co.jp/
    AddOutputFilterByType SUBSTITUTE text/html
    Substitute "s|uat.site.co.jp|jp.uat.site2uk.co.uk|ni"
</VirtualHost>

আমি বিভ্রান্ত দেখে মনে হচ্ছে এটি কোনও এইচটিএমএল aট্যাগ থেকে এসেছে । এই লিঙ্কটিতে ক্লিক করার ফলে লিঙ্কটি অনুসরণ করার পরে ওয়েব ব্রাউজারের ফলাফল আসবে না, বরং একটি ফাইল ব্রাউজার (উইন্ডোজ এক্সপ্লোরার) ইউএনসি খোলার চেষ্টা করছে। আপনি কি এইচটিএমএল পাঠ্যে সেই স্ট্রিংটি প্রতিস্থাপনের চেষ্টা করছেন?
গ্রেগল

তারা সাইট সঠিকভাবে কাজ করে। তবে একবার এটি ফায়ারওয়ালের পিছনে রাখলে আমরা অবশ্যই একগুচ্ছ CSS এবং চিত্রগুলিতে 404s পাই। সাধারণত সবকিছু 200
ZZ9

এগুলি আইআইএস সার্ভারের লিঙ্ক ট্যাগ থেকে রয়েছে <লিঙ্ক href = "// fqdn / সম্পদ"
জেডজেড 9

আমি মনে করি না আপনি linkট্যাগগুলিতে ইউএনসি পাথ সরবরাহ করতে পারেন । আপনি যদি পারেন তবে আমি বলতে পারি না এটি একটি ভাল ধারণা হবে .. যে কোনও ইভেন্টে এটি আপনার প্রশ্ন নয়। অ্যাপাচি ডক্স অনুসারে , substituteনির্দেশটি কেবলমাত্র Directoryব্লক বা .htaccessফাইলগুলির মধ্যে বৈধ । একটি <location>ব্লক তৈরি করার চেষ্টা করুন (এমনকি এটি / এর জন্য হলেও) এবং সেখানে নির্দেশিকাটি রেখে দিন।
গ্রেগএল

2
@ গ্রেগএল, এই ইউআরএলের এই ফর্ম্যাটটি একটি "প্রোটোকল-আপেক্ষিক" ইউআরএল, এটি পৃষ্ঠাগুলির সাথে লিঙ্ক করার পুরোপুরি বৈধ উপায়, যদিও এটি সাধারণভাবে জানা যায় না। "//domain.com/path" ব্রাউজারটি লিঙ্কযুক্ত পৃষ্ঠাটির অনুরোধ করতে একই প্রোটোকলযুক্ত নথির অনুরোধ করে makes
টেরো কিলকেনেন

উত্তর:


11

Mod_subst متبادل নামে একটি অ্যাপাচি মডিউল রয়েছে যা এটি করতে পারে। একটি সংক্ষিপ্ত উদাহরণ এখানে:

<Location "/">
    AddOutputFilterByType SUBSTITUTE text/html
    Substitute "s/uat.site.co.jp/jp.uat.site2uk.co.uk/ni"
</Location>

অথবা, মোড_প্রক্সির সাথে একত্রিত হলে:

ProxyPass / http://uat.site.co.jp/
ProxyPassReverse / http://uat.site.co.jp/

Substitute "s|http://uat.site.co.jp/|http://jp.uat.site2uk.co.uk/|i"

Mod_subst متبادل এর জন্য অ্যাপাচি ডকুমেন্টেশনে আরও তথ্য রয়েছে ।


হাই, পরামর্শের জন্য ধন্যবাদ, দুর্ভাগ্যক্রমে এই পথে আমার খুব ভাগ্য হয়নি। যদিও আমি প্রক্সিটির বাইরে এটি সফলভাবে পরীক্ষা করেছি। এটি mod_proxy এটিকে উপেক্ষা করে উপস্থিত হয়।
জেডজেড 9

আমি আরও কিছু তথ্য যুক্ত করেছি যা সহায়ক হতে পারে।
জেনি ডি

1
অনেক ধন্যবাদ, এটি কাজ করে। আপাচে /etc/httpd/conf.d/ এ আমার ফাইলগুলির ব্যাকআপ নেওয়া বাছাইয়ের সাথে এক সমস্যা হতে পারে যা .conf (vhost.bak) এ শেষ হয় নি।
জেডজেড 9

7

যদি আপনি অ্যাপাচি পুনরায় চালু না করে থাকেন তবে তা নিশ্চিত হয়ে নিন তবে আপনি যদি ইতিমধ্যে এটি করেন তবে আপনি একটি বিশ্বব্যাপী আউটপুট ফিল্টার চেষ্টা করতে পারেন যা কোনও কাস্টম পিএইচপি স্ক্রিপ্টটি চালিয়ে আপনার প্রতিস্থাপনটি করে যা কেবল কোনও কারণে এটির সমাধান করে কিনা তা দেখার জন্য could ।

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

RequestHeader unset Accept-Encoding
RequestHeader set Accept-Encoding identity

যদি এটি কাজ না করে তবে নিম্নলিখিত চেষ্টা করুন:

অবশ্যই আপনার পাথগুলিতে আপডেট করুন:

#add this outside of any VirtualHost tags
ExtFilterDefine proxiedcontentfilter mode=output cmd="/usr/bin/php /var/www/proxyfilter.php"

#add these in your VirtualHost tag
RequestHeader unset Accept-Encoding 
RequestHeader set Accept-Encoding identity
SetOutputFilter proxiedcontentfilter

প্রক্সিফিল্টার.এফপি-তে নিম্নলিখিতগুলির মতো কিছু কোড রয়েছে:

#!/usr/bin/php
<?php
$html = file_get_contents('php://stdin');
$html = str_ireplace('uat.site.co.jp', 'jp.uat.site2uk.co.uk', $html);
file_put_contents('php://stdout', $html);

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


আমি পৃষ্ঠায় একটি এইচটিএমএল 200 পেয়েছি তবে ব্রাউজারটি দেখায়: সামগ্রী এনকোডিং ত্রুটি আপনি যে পৃষ্ঠাটি দেখার চেষ্টা করছেন সেটি দেখা যাচ্ছে না কারণ এটি একটি সংকোচনের একটি অবৈধ বা অসমর্থিত ফর্ম ব্যবহার করে।
জেডজেড 9

আহ, এগুলি আপনার ভার্চুয়াল হোস্টে যুক্ত করুন। অনুরোধহাইডার সেট করুন স্বীকৃতি-এনকোডিং এবং অনুরোধহিডার স্বীকৃতি-এনকোডিং পরিচয় সেট করে
g491

আপনার মূল বিকল্প লাইনটি কাজ করার চেষ্টা করার জন্য আমি আমার উত্তরটি আপডেট করেছি। আমি চেষ্টা করার সহজ হিসাবে এটি প্রথম চেষ্টা করার পরামর্শ দিচ্ছি এবং যা চলছে তা হতে পারে।
g491

একটি দুর্দান্ত উত্তরের জন্য আপডেট করুন তবে আমি অন্য উত্তরটি প্রথমে কাজ করে পেয়েছি
ZZ9

1
আমার ক্ষেত্রে, এটি সংকোচনের ছিল, পেরেক দিয়েছিল। এটি আমাকে পাগল করে দিচ্ছিল ... আপনাকে অনেক ধন্যবাদ!
ব্রাজিলিয়ান গাই

0

Https://httpd.apache.org/docs/2.4/mod/mod_proxy.html#proxypassrevers অনুসারে যা শিরোনামগুলি পুনরায় লিখে দেয়, আপনি ব্যবহার করুন "

প্রক্সিটির সাথে মিলে এইচটিএমএল সামগ্রীটি পুনর্লিখন করতে আপনাকে মোড_প্রক্সি_এইচটিএমএল লোড এবং সক্ষম করতে হবে।

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