মোড-প্রক্সি এবং এসএসএল সহ অ্যাপাচি ভার্চুয়ালহোস্ট


28

আমি একাধিক ওয়েব অ্যাপ্লিকেশন সহ একটি সার্ভার সেট আপ করার চেষ্টা করছি যা সবগুলি অ্যাপাচি ভার্চুয়ালহোস্ট (একই সার্ভারে চলমান অ্যাপাচি) এর মাধ্যমে পরিবেশন করা হবে। আমার মূল সীমাবদ্ধতা হ'ল প্রতিটি ওয়েব অ্যাপ্লিকেশনকে অবশ্যই এসএসএল এনক্রিপশন ব্যবহার করতে হবে। কিছুক্ষণ গুগল করার পরে এবং স্ট্যাকওভারফ্লো সম্পর্কিত অন্যান্য প্রশ্নগুলি দেখার পরে আমি ভার্চুয়ালহোস্টের জন্য নিম্নলিখিত কনফিগারেশনটি লিখেছিলাম:

<VirtualHost 1.2.3.4:443>
    ServerName host.example.org

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

    SSLProxyEngine On
    ProxyRequests Off
    ProxyPreserveHost On
    ProxyPass / https://localhost:8443/
    ProxyPassReverse / https://localhost:8443/
</VirtualHost>

যদিও https://host.example.org:8443 অ্যাক্সেসযোগ্য, https://host.example.org নয়, যা আমার ভার্চুয়াল হোস্ট কনফিগারেশনের উদ্দেশ্যকে পরাস্ত করে। ফায়ারফক্স অভিযোগ করেছে যে এটি সফলভাবে সার্ভারের সাথে সংযুক্ত থাকলেও সংযোগটি বাধাগ্রস্থ হয়েছিল। আমি অ্যাপাচে এর ত্রুটিতে নিম্নলিখিত সতর্কতাটিও পেয়েছি logলগ:

proxy: no HTTP 0.9 request (with no host line) on incoming request and preserve host set forcing hostname to be host.example.org for uri 

ওয়েব অ্যাপ্লিকেশনটিতে (একটি টমক্যাট সার্ভার) অ্যাক্সেস লগ একটি অদ্ভুত অ্যাক্সেস অনুরোধ দেখায়:

"?O^A^C / HTTP/1.1" 302

আমি যখন https://host.example.org:8443 এ সরাসরি সংযোগ করি তখন নীচের সঠিক অ্যাক্সেসের পুনঃস্থাপনটি পাওয়া যায় :

"GET / HTTP/1.1" 302

অবশেষে আমার আরও উল্লেখ করা উচিত যে আমি যখন এসএসএল ব্যবহার না করি তখন ভার্চুয়াল হোস্টটি পুরোপুরি সূক্ষ্মভাবে কাজ করে।

আমি এই কাজটি কীভাবে করব?

উত্তর:


34

শেষ পর্যন্ত আমি এটির কাজ করার একটি উপায় খুঁজে পেয়েছি। প্রথমে আমি ডেভ চেনি পরামর্শটি চেষ্টা করেছিলাম, সুতরাং আমি অ্যাপাচি সার্ভারের জন্য টমক্যাট নন এসএসএল পোর্টে পুনঃনির্দেশিত অন্য একটি শংসাপত্র ইনস্টল করেছি (সুতরাং প্রক্সিটি http: // লোকালহোস্ট: 8080 / ) এ পুনঃনির্দেশ করছিল । দুর্ভাগ্যক্রমে এটি সম্পূর্ণরূপে ওয়েব ব্রাউজারের মতো কাজ করেনি কারণ সংযোগের সাথে সাথেই https টি এইচটিপিতে রূপান্তরিত হয়েছিল। সুতরাং আমি https: // লোকালহোস্ট: ৮৪৪৩ / ব্যবহার করে ফিরে এসেছি এবং এটির কাজ করার জন্য চূড়ান্ত স্পর্শটি ছিল আবার SSLProxyEngine যুক্ত করা।

এখানে ফলাফল ভার্চুয়ালহস্ট কনফিগারেশন:

<VirtualHost 1.2.3.4:443>
    ServerName host.domain.org

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

    SSLEngine on
    SSLProxyEngine On
    SSLCertificateFile /etc/apache2/ssl/certificate.crt
    SSLCertificateKeyFile /etc/apache2/ssl/certificate.key

    ProxyRequests Off
    ProxyPreserveHost On
    ProxyPass / https://localhost:8443/
    ProxyPassReverse / https://localhost:8443/
</VirtualHost>

1
এড়িয়ে চলুন ProxyPreserveHost Onএটি প্রায় সর্বদা ভুল, অকেজো এবং প্রায় সর্বদা বিরতিতে থাকে ProxyPassReverse। পার্শ্ব নোট হিসাবে ProxyRequests offডিফল্ট, এইভাবে অপ্রয়োজনীয়।
kubanczyk

আমরা যখন বাহ্যিক আইপি ব্যবহার করি তখন localhostএটি কাজ করে না।
চামিন্দা বান্দারা

4

এই কনফিগার চেষ্টা করুন

<VirtualHost 1.2.3.4:443>
    ServerName host.domain.org

    SSLEngine On
    # include other ssl options, like cert and key here

    ProxyRequests Off
    ProxyPreserveHost On

    <Location />
        ProxyPass http://localhost:8443/
    </Location>
</VirtualHost>

যদি আপনার অ্যাপ্লিকেশনটির প্রক্সড সংযোগ থেকে এসএসএল তথ্য অ্যাক্সেসের প্রয়োজন হয় তবে আপনার মোড_প্রক্সি_জপি, এবং টমক্যাট অ্যাজপি 1.3 সংযোগকারীটি ব্যবহার করা উচিত।


আমি সেই সার্ভারে এনক্রিপ্ট করে শংসাপত্রটি তৈরি করব যেখানে হোস্ট.ডোমেন.আর.অর্গ.এর জন্য অ্যাপ্লিকেশন চলছে। তাহলে প্রক্সি সার্ভারে আমাকে একই শংসাপত্রটি পুনরায় ব্যবহার করতে হবে?
জিওক্স

2

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

ProxyRequests Off

<Proxy balancer://someapplication>
    BalancerMember http://127.0.0.1:18443 keepalive=on max=2 retry=30
    BalancerMember http://127.0.0.1:18444 keepalive=on max=2 retry=30
    BalancerMember http://127.0.0.1:18445 keepalive=on max=2 retry=30
</Proxy>


<VirtualHost 1.2.3.4:443>
    SSLEngine on
    SSLCipherSuite SSLv2:-LOW:-EXPORT:RC4+RSA
    SSLCertificateFile /path/to/cert.pem
    SSLCertificateKeyFile //path/to/key.pem
    SSLVerifyClient optional

    RequestHeader set X-Client-DN %{SSL_CLIENT_S_DN}e
    RequestHeader set X-Client-Verify %{SSL_CLIENT_VERIFY}e

<Location />
    SetHandler balancer-manager
    Order allow,deny
    Allow from all
</Location>

ProxyPass / balancer://someapplication:443/
ProxyPassReverse / balancer://someapplication:443/
ProxyPreserveHost on

বর্তমানে আমার ভারসাম্য ভারসাম্য ব্যবহার করার দরকার নেই, তবে ভবিষ্যতে এটি ভারী হতে পারে। অন্তর্দৃষ্টি জন্য ধন্যবাদ।
জেএমডি

1

ভাল, আমি এখানে যা বুঝতে পারি না তা হ'ল আপনার আপাচি থেকে আপনার অ্যাপ্লিকেশনটিতে একটি এসএসএল সংযোগ থাকা প্রয়োজন যা একই মেশিনে রয়েছে বলে মনে হয় ( http: // লোকালহোস্ট: 8443 / )।

আমি অনুমান করি যে এই জাতীয় জিনিসগুলি সেট আপ করার স্বাভাবিক উপায়টি হ'ল অ্যাপাচি "গ্রাহক" -র পাশাপাশি, যেমন ইন্টারনেটকে এসএসএল এনক্রিপশন সরবরাহ করে এবং অ্যাপ্লিকেশনটির সাথে একটি এনক্রিপ্ট করা সংযোগ থাকে। এটি আপনাকে আপনার অ্যাপ্লিকেশন প্রতিক্রিয়াগুলি ডিবাগ করার জন্য আরও বেশি স্বাধীনতা দেয়।

ডেভ চেনি যে অন্য জিনিসটির উল্লেখ করেছেন তা হ'ল লোড ব্যালেন্সিং এবং অন্যান্য বৈশিষ্ট্যগুলির জন্য স্থানীয় টমক্যাট সংযোগকারীটি ব্যবহার করা।


আচ্ছা এরকম একটি সেটআপ বেছে নেওয়ার জন্য আমার কাছে দুটি কারণ রয়েছে। প্রথমটি হ'ল টমক্যাট সার্ভারটি ইতিমধ্যে এসএসএল-এ চলছে এবং আমি ভেবেছিলাম এটির সাথে অ্যাপাচি ভার্চুয়ালহস্ট ব্যবহার করা সহজ হবে। দ্বিতীয়টি হ'ল অ্যাপ্লিকেশন সরবরাহকারী ( জেআইআরএ ) অ্যাপাচি ইন্টিগ্রেশনের জন্য কিছু নির্দেশিকা সরবরাহ করে ( atlassian.com/software/jira/docs/v3.13/apacheintegration.html ) এবং আমি ভার্চুয়ালহস্ট সমর্থন যুক্ত করে এটিতে আমার কনফিগারেশনটি ভিত্তিক করেছি। অনুমান যে এটি আমার চেয়ে বেশি জটিল ছিল, এটি কাজ করার পাশাপাশি আমি সমস্যাটি কী তাও বোঝাতে চাই।
জেএমডি

0

আপনার কি সত্যিই কোনও এইচটিটিপিএস পরিষেবাতে প্রক্সি করা দরকার? আপনি লোকালহোস্টে নন-এসএসএল পরিষেবাতে প্রক্সি করতে চাইতে পারেন, যেমন

ProxyPass / http://localhost:8080/
ProxyPassReverse / http://localhost:8080/

সত্যই এসএসএল ব্যবহার আমার জন্য বাধ্যতামূলক। আমি এসএসএল ব্যবহার না করেও প্রক্সি পরীক্ষা করেছিলাম যাচাই করার জন্য এবং এটি দুর্দান্ত কাজ করে। এসএসএল সমর্থনই আসল সমস্যা issue
জেএমডি

0

প্রথমে আমি যদি আপনি লোকালহোস্ট থেকে লোকালহোস্টের জন্য একটি অনুরোধ করতে পারেন তবে আমি এটি দেখতে চাই: ৮৪৩৪ এবং তা সফল হয় কিনা তা দেখুন (আইইটি জিইটি বা উইজেট করুন HTTP: // লোকালহোস্ট: ৮৪৪৪ )

443 বন্দরটিতে আপনার হ্যাভেন গা ভার্চুয়াল হোস্ট কেন অন্য এসএসএল হোস্টে প্রক্সিং করছে তা আমি নিশ্চিত নই

কেন অ্যাপ্লিকেশন কেবল 443 স্থানীয়ভাবে ব্যবহার করতে পারে না? যদি আপনি এটি পরিবর্তন করতে না পারেন তবে আপনি পোর্টকে পুনর্নির্দেশ করতে কেবল iptables ব্যবহার করতে পারেন


কারণটি হ'ল আমার একই সার্ভারে আরও বেশি ওয়েব অ্যাপ্লিকেশন ইনস্টল করা দরকার, সবগুলি এসএসএল ব্যবহার করে এবং তারা সকলেই 443 পোর্টে শুনতে পাচ্ছেন না So সুতরাং আমি প্রতিটি ওয়েব অ্যাপ্লিকেশনটিকে নিজের সার্ভারে হোস্ট করা হয়েছে এমন দেখানোর জন্য আইপি ভিত্তিক ভার্চুয়ালহোস্টগুলি ব্যবহার করছি। আমি নিম্নলিখিত উইজেট কমান্ডটি পরীক্ষা করেছি এবং এটি দুর্দান্ত কাজ করে: উইজেট লোকালহোস্ট: 8443 - চেক-শংসাপত্র
জেএমডি

2
দ্রষ্টব্য - আপনার সার্ভারে অতিরিক্ত আইপি ঠিকানা যুক্ত করা সহজ বিষয়, এবং এভাবে 443 পোর্টে বেশ কয়েকটি অ্যাপ্লিকেশন শুনতে পাওয়া যায় - সবগুলি পৃথক আইপি ঠিকানায়।
ব্রেন্ট

0

আপনার এসএসএল ত্রুটি লগটি পরীক্ষা করুন এবং নিশ্চিত করুন যে সিএ শংসাপত্র শৃঙ্খলা যাচাই করতে অক্ষম হওয়া সম্পর্কে আপনার কোনও ত্রুটি নেই।


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