এইচপি প্রক্সি https (এসএসএল) এ পুনঃনির্দেশ HTTP


100

আমি লোড ব্যালেন্সিংয়ের জন্য HAProxy ব্যবহার করছি এবং কেবল আমার সাইটটি https সমর্থন করতে চাই। সুতরাং, আমি পোর্ট 80 এ সমস্ত অনুরোধগুলি পোর্ট 443 এ পুনর্নির্দেশ করতে চাই।

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

সম্পাদনা: আমরা কোয়েরি প্যারামগুলি সংরক্ষণ করে https এ একই url এ পুনঃনির্দেশ করতে চাই। সুতরাং, http://foo.com/bar https://foo.com/bar এ পুনঃনির্দেশ করবে

উত্তর:


143

আমি এটি সর্বাধিক সহায়তা বলে মনে করেছি :

HAProxy 1.5 বা আরও নতুন ব্যবহার করুন এবং সামনের কনফিগারেশনে কেবল নিম্নলিখিত লাইনটি যুক্ত করুন:

redirect scheme https code 301 if !{ ssl_fc }

20
এতে যোগ করতে, নীচের ব্যবহারকারীর জন্য User০১ যোগ করে, ২৯6666০০ এর উত্তর থেকে, কেবলমাত্র একটি নির্দিষ্ট ডোমেনের জন্য https এ পুনঃনির্দেশ করতে এটি ব্যবহার করুন:redirect scheme https code 301 if { hdr(Host) -i www.mydomain.com } !{ ssl_fc }
কোয়ান্টিন স্কাউসেন

4
কাজ করেছে। যদিও এটি 'কোড 301' ছাড়া কাজ করে না। আপডেট করার জন্য ধন্যবাদ।
দেজ

7
প্রদত্ত উত্তর করার জন্য একটি সমতুল্য সিনট্যাক্স এই মত হবে: http-request redirect scheme https code 301 if !{ ssl_fc }আলোহা হ্যাপ্রোক্সি .0.০ এ HTTP পুনর্নির্দেশের জন্য ডকুমেন্টেশন এমনকি " দু'টি নির্দেশাবলীর বাক্য গঠন একই বলে উল্লেখ করেছে যে , পুনর্নির্দেশকে এখন উত্তরাধিকার হিসাবে বিবেচনা করা হচ্ছে এবং কনফিগারেশনের ক্ষেত্রে http-অনুরোধ পুনর্নির্দেশ ফর্মটিতে যেতে হবে "। আমি পুরোপুরি নিশ্চিত না হয়েই অনুমান করি যে এই একই ব্যাখ্যাটি HAProxy এর ওপেন সোর্স সংস্করণের নতুন প্রকাশে প্রযোজ্য।
রডলফোজজ

আপনার উত্তর দেওয়ার জন্য ধন্যবাদ. আমরা এই লাইনটি কোথায় যুক্ত করতে হবে তা বোঝানোর জন্য আপনি কী প্রসারিত করতে পারেন? সীমা / ব্যাকএন্ড / ডিফল্ট / গ্লোবাল / .. এ?
রিয়েলটিবো

4
এটি অবশ্যই একটি পৃথক ফ্রন্টএন্ড ব্লকে থাকতে হবে তা লক্ষ করা গুরুত্বপূর্ণ। অনলাইনে অনেকগুলি কোড কোড একই ব্লকে উভয় দন্ডিত থাকে এবং ডুয়াল বাইন্ডেড ব্লকে পুনর্নির্দেশ করা হ্যাপ্রোক্সি শুরু হতে বাধা দেয়।
সামি ফুয়াদ

68

আগের উত্তরে মন্তব্য করার মতো যথেষ্ট খ্যাতি আমার নেই, তাই আমি জে টেলরের উত্তর পরিপূরক করতে একটি নতুন উত্তর পোস্ট করছি। মূলত তার উত্তর পুনঃনির্দেশ করবে, যদিও একটি অন্তর্নিহিত পুনঃনির্দেশ হবে, যার অর্থ এটি একটি 302 (অস্থায়ী পুনঃনির্দেশ) জারি করবে, তবে যেহেতু প্রশ্নটি অবহিত করে যে পুরো ওয়েবসাইটটি https হিসাবে পরিবেশন করা হবে, সুতরাং উপযুক্ত পুনঃনির্দেশ 3030 হওয়া উচিত (স্থায়ী পুনঃনির্দেশ) )।

redirect scheme https code 301 if !{ ssl_fc }

এটি একটি ছোট পরিবর্তন বলে মনে হচ্ছে, তবে প্রভাবটি ওয়েবসাইটের উপর নির্ভর করে একটি স্থায়ী পুনঃনির্দেশের সাহায্যে আমরা ব্রাউজারকে জানিয়ে দিচ্ছি যে এটি আর আরম্ভ থেকে HTTP সংস্করণটি অনুসন্ধান করা উচিত নয় (ভবিষ্যতের পুনঃনির্দেশগুলি এড়ানো) - https এর জন্য একটি সময় সেভার সাইট। এটি এসইওতে সহায়তা করে তবে আপনার লিঙ্কগুলির রসকে ভাগ করে না।


42

সমস্ত ট্র্যাফিক পুনর্নির্দেশ করতে:

redirect scheme https if !{ ssl_fc }

একটি একক url পুনর্নির্দেশ করতে (একাধিক সম্মুখভাগ / ব্যাকএন্ডের ক্ষেত্রে)

redirect scheme https if { hdr(Host) -i www.mydomain.com } !{ ssl_fc }


4
ধন্যবাদ, "কেবলমাত্র একটি নির্দিষ্ট হোস্টে" শর্তটি ঠিক আমি যা খুঁজছিলাম!
কোয়ান্টিন স্কোসেন

আপনি কি দয়া করে দ্বিতীয় বিকল্পের ব্যবহারিক উদাহরণ দেখাতে পারেন?
রিকারহিনাপি

16

Https- তে HTTP- র সবকিছু পুনর্নির্দেশের সর্বোত্তম গ্যারান্টিযুক্ত উপায় হ'ল:

frontend http-in
   bind *:80
   mode http
   redirect scheme https code 301

এটি 'কোড 301 using ব্যবহার করে কিছুটা ফ্যানসিয়ার, তবে এটি ক্লায়েন্টকে স্থায়ীভাবে জানাতে পারে। 'মোড HTTP' অংশটি ডিফল্ট কনফিগারেশনের সাথে প্রয়োজনীয় নয়, তবে আঘাত করতে পারে না। যদি আপনার mode tcpডিফল্ট বিভাগে থাকে (যেমন আমি করেছি) তবে এটি প্রয়োজনীয়।


15

Http://parsnips.net/haproxy-http-to-https-redirect/ এর মতে অনুসরণটি অনুসরণ করতে আপনার haproxy.cfg কনফিগার করার মতোই সহজ হওয়া উচিত।

#---------------------------------------------------------------------
# Redirect to secured
#---------------------------------------------------------------------
frontend unsecured *:80
    redirect location https://foo.bar.com

#---------------------------------------------------------------------
# frontend secured
#---------------------------------------------------------------------
frontend  secured *:443
   mode  tcp
   default_backend      app

#---------------------------------------------------------------------
# round robin balancing between the various backends
#---------------------------------------------------------------------
backend app
    mode  tcp
    balance roundrobin
    server  app1 127.0.0.1:5001 check
    server  app2 127.0.0.1:5002 check
    server  app3 127.0.0.1:5003 check
    server  app4 127.0.0.1:5004 check

7
যাতে foo.bar.com এ সবকিছু পুনর্নির্দেশ করা হবে । আদর্শভাবে যদিও, আমরা foo.bar.com বাবা / foo.bar.com বাজেটে পুনঃনির্দেশ করতে চাই । আমাদের কোয়েরি প্যারামও দরকার।
জন চু

@ জনচু একটি বৈধ ব্যবহারের ক্ষেত্রে উত্থাপন করে, এটি কেবল একটি আংশিক সমাধান।
জে টেলর

4
পুনর্নির্দেশের অবস্থানটি ব্যবহার না করে পরিবর্তে উপসর্গের https: //foo.bar.com পুনর্নির্দেশের চেষ্টা করুন। এটি ব্যবহারের ক্ষেত্রে জন চু উল্লেখ করেছেন যাতে এটি সাহায্য করা উচিত।
xangxiong

10

ব্যবহারকারী 2966600 এর সমাধানের কিছুটা ভিন্নতা ...

একক ইউআরএল ব্যতীত সকলকে পুনঃনির্দেশ করতে (একাধিক সম্মুখভাগ / ব্যাকএন্ডের ক্ষেত্রে):

redirect scheme https if !{ hdr(Host) -i www.mydomain.com } !{ ssl_fc }

4

জে টেলর যেমন বলেছিলেন, HAProxy 1.5-dev এর redirect schemeকনফিগারেশন নির্দেশ রয়েছে, যা আপনার প্রয়োজন ঠিক ঠিক পূরণ করে।

তবে, আপনি যদি 1.5 ব্যবহার করতে অক্ষম হন, এবং যদি আপনি উত্স থেকে HAProxy সংকলনের জন্য প্রস্তুত হন, আমি redirect schemeকার্যকারিতাটি ব্যাকপোর্ট করেছি তাই এটি 1.4 এ কাজ করে। আপনি প্যাচটি এখানে পেতে পারেন: http://marc.info/?l=haproxy&m=138456233430692&w=2



1

HAProxy এর নতুন সংস্করণে এটি ব্যবহার করার পরামর্শ দেওয়া হয়

http-request redirect scheme https if !{ ssl_fc }

HTTP ট্র্যাফিক https এ পুনর্নির্দেশ করতে।


1

পুনর্নির্দেশ বিবৃতি উত্তরাধিকার

ব্যবহার HTTP- র-পুনঃনির্দেশ অনুরোধ পরিবর্তে

acl http      ssl_fc,not
http-request redirect scheme https if http

0

আপনি যদি ইউআরএলটি আবার লিখতে চান তবে আপনাকে নিজের সাইট ভার্চুয়ালহোস্ট এই লাইনগুলি যুক্ত করে পরিবর্তন করতে হবে:

### Enabling mod_rewrite
Options FollowSymLinks
RewriteEngine on

### Rewrite http:// => https://
RewriteCond %{SERVER_PORT} 80$
RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [R=301,NC,L]

তবে, আপনি যদি 80 নম্বর বন্দরে আপনার সমস্ত অনুরোধগুলি প্রক্সিটির পিছনে থাকা ওয়েব সার্ভারের পোর্ট 443 এ পুনর্নির্দেশ করতে চান তবে আপনি এই উদাহরণটি আপনার haproxy.cfg এ চেষ্টা করতে পারেন :

##########
# Global #
##########
global
    maxconn 100
    spread-checks 50
    daemon
    nbproc 4

############
# Defaults #
############
defaults
    maxconn 100
    log global
    mode http
    option dontlognull
    retries 3
    contimeout 60000
    clitimeout 60000
    srvtimeout 60000

#####################
# Frontend: HTTP-IN #
#####################
frontend http-in
    bind *:80
    option logasap
    option httplog
    option httpclose
    log global
    default_backend sslwebserver

#########################
# Backend: SSLWEBSERVER #
#########################
backend sslwebserver
    option httplog
    option forwardfor
    option abortonclose
    log global
    balance roundrobin
    # Server List
    server sslws01 webserver01:443 check
    server sslws02 webserver02:443 check
    server sslws03 webserver03:443 check

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


0

আপনি ট্রাফিকের পার্থক্য করতে এসিএল ব্যবহার করবেন না কেন? আমার মাথার উপরে:

acl go_sslwebserver path bar
use_backend sslwebserver if go_sslwebserver

ম্যাথু ব্রাউন এর উত্তর দিয়েছিল এটি উপরে।

দেখুন হেক্টর ডক্স hdr_dom মতো জিনিসগুলির জন্য অনুসন্ধান ও নিচে আরো ACL এর বিকল্পগুলি খুঁজে পেতে। প্রচুর পছন্দ আছে।



0

এভাবে করা যায় -

  frontend http-in
   bind *:80
   mode http
   redirect scheme https code 301

যে কোনও ট্র্যাফিককে আঘাত করা HTTP https এ পুনর্নির্দেশ করবে


0

কেবল:

frontend incoming_requsts
        bind *:80
        bind *:443 ssl crt *path_to_cert*.**pem**
        **http-request redirect scheme https unless { ssl_fc }**
        default_backend k8s_nodes
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.