বিপরীত প্রক্সিতে অ্যাপাচি ইউআরএল পুনরায় লেখা


12

আমি একটি কারাফ-হোস্টেড অ্যাপ্লিকেশন (অ্যাপাচি এবং কারাফ পৃথক সার্ভারে রয়েছে) এর সামনে অ্যাপাচি মোতায়েন করছি। আমি আপাচি বিপরীত প্রক্সি হিসাবে কাজ করতে এবং URL এর কিছু অংশ আড়াল করতে চাই।

অ্যাপ্লিকেশনটির লগ-ইন পৃষ্ঠাটি পেতে অ্যাপ্লিকেশন সার্ভার থেকে সরাসরি ইউআরএল http://app-server:8181/jellyfish। পৃষ্ঠাগুলি জেটি উদাহরণ দ্বারা করাফের মধ্যে চলমান served অবশ্যই, এই আচরণটি ফায়ারওয়াল দ্বারা বিপরীত প্রক্সি সার্ভার বাদে সবকিছুর জন্যই অবরুদ্ধ হয়ে থাকে।

ফায়ারওয়াল বন্ধ হয়ে, আপনি যদি এই URL টি টিপান তবে জেটি লগ-ইন পৃষ্ঠাটি লোড করে। ব্রাউজারের ঠিকানা বারটি সঠিকভাবে পরিবর্তিত হয় http://app-server:8181/jellyfish/login?0এবং সবকিছু কাজ করে।

আমি যা চাই তা হল http://web-server(অর্থাত্ মূল থেকে) অ্যাপ্লিকেশন সার্ভারে জেটির কাছে ম্যাপ করা অ্যাপটির নাম সহ ( jellyfish) চাপা দেওয়া। উদাহরণস্বরূপ ব্রাউজারটি http://web-server/login?0ঠিকানা বারে দেখানোর জন্য পরিবর্তিত হবে এবং পরবর্তী সমস্ত ইউআরএল এবং সামগ্রী ওয়েব-সার্ভারের ডোমেনের সাথে এবং jellyfishবিশৃঙ্খলা ছাড়াই পরিবেশন করা হবে ।

নীচের কনফিগারেশন (স্নিপেট) ব্যবহার করে আমি অ্যাপাচিকে একটি সাধারণ বিপরীত প্রক্সি হিসাবে পরিচালনা করতে পারি: -

ProxyPass /jellyfish http://app-server:8181/jellyfish
ProxyPassReverse / http://app-server:8181/

... তবে এর জন্য ব্রাউজারের ইউআরএল থাকা jellyfishএবং মূল URL- এ যেতে http://web-serverএকটি 404 পাওয়া যায় নি।

এটিকে ঘিরে ধরার জন্য আমি mod_rewriteএর [P]পতাকাটি ব্যবহার করে এবং ছাড়াই অনেক সময় ব্যয় করেছি , কিন্তু সাফল্য ছাড়াই। আমি তখন সেই ProxyPassMatchনির্দেশটি চেষ্টা করেছিলাম , তবে আমিও এটি বেশ সঠিকভাবে পেতে পারি না।

/etc/apache2/sites-available/ওয়েব সার্ভারে লোড হওয়ার সাথে সাথে বর্তমান কনফিগারেশনটি এখানে । মনে রাখবেন যে স্থানীয়ভাবে-হোস্ট করা ইমেজ ডিরেক্টরি রয়েছে। আমি মোড_উইরাইট প্রক্সিটি সুরক্ষা শোষণ করে রেখেছি এবং বেশ কয়েকটি mod_securityনিয়মকে দমন করছি যা মিথ্যা ইতিবাচক দিক দিয়েছিল।

<VirtualHost *:80>
    ServerAdmin admin@drummer-server
    ServerName drummer-server

    ErrorLog ${APACHE_LOG_DIR}/error.log
    LogLevel warn

    CustomLog ${APACHE_LOG_DIR}/access.log combined

    Alias /images/ "/var/www/images/"

    RewriteEngine On
    RewriteCond  %{REQUEST_URI}  !^$
    RewriteCond  %{REQUEST_URI}  !^/
    RewriteRule  .*              -    [R=400,L]

    ProxyPass /images !

    ProxyPassMatch ^/(.*) http://granny-server:8181/jellyfish/$1
    ProxyPassReverse / http://granny-server:8181/jellyfish

    ProxyPreserveHost On

    SecRuleRemoveById 981059 981060

    <Directory "/var/www/images">
        Options Indexes MultiViews FollowSymLinks
        AllowOverride None
        Order allow,deny
        Allow from all
    </Directory>

</VirtualHost>

আমি যদি যাই তবে আমি এতে http://web-serverপুনঃনির্দেশিত হয়েছি http://web-server/jellyfish/homeকিন্তু এটি একটি 404 দেয়, অ্যাক্সেস করার চেষ্টা করার অভিযোগ সম্পর্কে /jellyfish/jellyfish/home- এনবি ব্রাউজারের ঠিকানা বারটিতে ডাবল থাকে না /jellyfish

HTTP ERROR 404

Problem accessing /jellyfish/jellyfish/home. Reason:

    Not Found

এবং, আমি যদি যাই তবে আমি এতে http://web-server/loginপুনঃনির্দেশিত হয়েছি http://web-server/jellyfish/login?0তবে এটি অ্যাক্সেস করার চেষ্টা করার অভিযোগের সাথে একটি 404 দেয় /jellyfish/jellyfish/login

HTTP ERROR 404

Problem accessing /jellyfish/jellyfish/login. Reason:

    Not Found

সুতরাং, আমি অনুমান করছি যে আমি কোনওভাবে দু'বার নিয়মগুলির মধ্য দিয়ে যাচ্ছি। homeইউআরএল এর বিট প্রথম উদাহরণ থেকে এসেছে কোথা থেকে আমি সামান্য বিস্মিত ।

দয়া করে কেউ আমাকে সঠিক দিকে নির্দেশ করতে পারে?

ধন্যবাদ, জে।


আমি এটি নিয়ে কিছুটা অগ্রগতি করেছি এবং এখন ProxyPassMatchব্যবহার করে এমন একটি সমতুল্য প্রতিস্থাপন করেছি mod_rewrite, যা jellyfishইউআরএল থেকে অপসারণের চ্যালেঞ্জকে সম্বোধন করে । আমি এখন 404 এর একটি সংখ্যার সন্ধান করছি যা কারাফের জন্য প্রয়োজনীয় উইকেট উপাদানগুলির মতো অন্তর্নিহিত উপাদানগুলির বিষয়ে পপ আপ। এখানে একটি কোড স্নিপেট রয়েছে:# proxy to the Jellyfish server (ignoring images) RewriteCond %{REQUEST_URI} !^/(images)(.*)$ RewriteRule ^(/.*)$ http://app-server:8181/jellyfish$1 [P] ProxyPassReverse / http://app-server:8181/jellyfish/
জেরেমি গুচ

উত্তর:


10

এইভাবে আমি এটি কাজ করতে পেলাম। আমার মূল প্রশ্নের আমার মন্তব্য অনুসারে পরিবর্তনের পাশাপাশি, আমাকে বাদ দিতে হবে .jsএবং .cssএকটি নিয়ম যা একটি ট্রেলিং স্ল্যাশ যুক্ত করেছিল তা থেকেও বাদ দিতে হবে ।

<VirtualHost *:80>
    ServerAdmin admin@localhost
    ServerName mydomain.com
    ServerAlias www.mydomain.com

    ErrorLog ${APACHE_LOG_DIR}/error.log
    LogLevel warn

    CustomLog ${APACHE_LOG_DIR}/access.log combined

    RewriteLog ${APACHE_LOG_DIR}/rewrite.log
    RewriteLogLevel 9

    Alias /images/ "/var/www/images/"

    RewriteEngine On

    # rewrite rule to prevent proxy exploit
    RewriteCond  %{REQUEST_URI}  !^$
    RewriteCond  %{REQUEST_URI}  !^/
    RewriteRule  .*              -    [R=400,L]

    # consolidate non-www requests onto the www subdomain
    RewriteCond  %{HTTP_HOST}    ^yourdomain\.com$
    RewriteRule  ^(.*)           http://www.yourdomain.com/$1  [R=301,L]

    # Add a trailing slash to the URL (ignoring images, CSS and JavaScript)
    RewriteCond  %{REQUEST_URI}  !^/(images)(.*)$
    RewriteCond  %{REQUEST_URI}  !^/(.*)(.js|.css)$
    RewriteCond  %{REQUEST_URI}  !(.*)/$
    RewriteRule  ^(.*)$          http://%{HTTP_HOST}$1/ [R=301,L]

    # proxy to the Jellyfish server (ignoring images)
    RewriteCond  %{REQUEST_URI}  !^/(images)(.*)$
    RewriteRule  ^(/.*)$         http://app-server:8181/jellyfish$1  [P]
    ProxyPassReverse  /          http://app-server:8181/jellyfish/

    # suppress mod_security rules that were giving false positives
    SecRuleRemoveById 981059 981060

    <Directory "/var/www/images">
            Options Indexes MultiViews FollowSymLinks
            AllowOverride None
            Order allow,deny
            Allow from all
    </Directory>

</VirtualHost>

1

আপনি চেষ্টা করেছেন:

ProxyPassMatch ^/(.*) http://granny-server:8181/$1
ProxyPassReverse / http://granny-server:8181

বা আরও সহজভাবে:

ProxyPass / http://granny-server:8181/
ProxyPassReverse / http://granny-server:8181/

আমি লিখেছেন কীভাবে আমি এ্যাপাচি বিপরীত প্রক্সী করার এবং হুল বিড়াল সাথে মোকাবিলা এখানে উপর আপনি তুলনা করতে / বৈসাদৃশ্য কি আপনি সেটআপ আমি যা ব্যবহার সঙ্গে চাই।

আপনি ইউআরএলটিতে একটি ট্রেলিং স্ল্যাশ যুক্ত করতে এটি যুক্ত করতে চাইতে পারেন:

# Settings for adding a trailing slash to the URL
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/$
RewriteRule ^(.*)$ http://%{HTTP_HOST}$1/ [R=301,L]

উত্তরের জন্য অনেক ধন্যবাদ। দুর্ভাগ্যক্রমে, এটি কেবল সমস্যার সোজা প্রক্সিং অংশটি সমাধান করে। আমি যেটা মিস করছি তা হ'ল ক্লায়েন্টের ব্রাউজারের অ্যাড্রেস বারে দৃশ্যমানতা থেকে "জেলিফিশ" শব্দটি কীভাবে সরিয়ে ফেলা যায়, যেমন http://web-serverনীরবে http://app-server:8181/jellyfishআবার প্রক্সিতে ফিরে আসে।
জেরেমি গুচ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.