ট্র্যাফিক ২.০ এবং ডকার কমপোজ লেবেলগুলির সাথে কীভাবে HTTP কে https এ পুনর্নির্দেশ করবেন?


14

দয়া করে মনে রাখবেন এটি একটি ট্র্যাফিক ভি 2 প্রশ্ন। আমার ভিএ 1 তে একটি সমাধান ছিল তবে ভি 2 মোট পুনর্নির্মাণ।

এই উপরের HTTP গুলি : // whoami.mysite.com এ http://whoami.mysite.com পুনর্নির্দেশ করার কথা ।

  • HTTP গুলি চমত্কারভাবে কাজ করে যাচ্ছে।
  • HTTP https এ পুনঃনির্দেশ না করে 404 ত্রুটি বাড়ায়।

অন্য কোনও ফাইল নেই। এই মুহুর্তের জন্য সমস্তই এই ডকার-রচনা.আইএমএলে রয়েছে কারণ এটি আরও মোতায়েনের প্রস্তুতির জন্য একটি পরীক্ষা is

version: "3.3"

services:

  traefik:
    image: "traefik:v2.0"
    container_name: "traefik"
    command:
      - "--log.level=DEBUG"
      - "--api.insecure=true"
      - "--providers.docker=true"
      - "--providers.docker.exposedbydefault=false"
      - "--entrypoints.web.address=:80"
      - "--entrypoints.web-secure.address=:443"
      - "--certificatesresolvers.myhttpchallenge.acme.httpchallenge=true"
      - "--certificatesresolvers.myhttpchallenge.acme.httpchallenge.entrypoint=web-secure"
      #- "--certificatesresolvers.myhttpchallenge.acme.caserver=https://acme-staging-v02.api.letsencrypt.org/directory"
      - "--certificatesresolvers.myhttpchallenge.acme.email=me@mail.com"
      - "--certificatesresolvers.myhttpchallenge.acme.storage=/letsencrypt/acme.json"
    labels:
      - "traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https"
    ports:
      - "80:80"
      - "443:443"
      - "8080:8080"
    volumes:
      - "./letsencrypt:/letsencrypt"
      - "/var/run/docker.sock:/var/run/docker.sock:ro"

  whoami:
    image: "containous/whoami"
    container_name: "whoami"
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.whoami.rule=Host(`whoami.mysite.com`)"
      - "traefik.http.routers.whoami.entrypoints=web"
      - "traefik.http.routers.whoami.middlewares=redirect-to-https@docker"
      - "traefik.http.routers.whoami-secured.rule=Host(`whoami.mysite.com`)"
      - "traefik.http.routers.whoami-secured.entrypoints=web-secure"
      - "traefik.http.routers.whoami-secured.tls=true"
      - "traefik.http.routers.whoami-secured.tls.certresolver=myhttpchallenge"

উত্তর:


10

জারাল্ড ক্রস এর টিউটোরিয়ালে এখন একটি কার্যনির্বাহী সমাধান রয়েছে:

https://blog.containo.us/traefik-2-0-docker-101-fc2893944b9d

services:  
  traefik:  
    image: "traefik:v2.0.0"  
    # ...  
    labels:  
      # ...        
      # middleware redirect  
      - "traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https"  
      # global redirect to https  
      - "traefik.http.routers.redirs.rule=hostregexp(`{host:.+}`)"  
      - "traefik.http.routers.redirs.entrypoints=web"  
      - "traefik.http.routers.redirs.middlewares=redirect-to-https"  

1
এখানে নিবন্ধ থেকে Docker-compose.yml হয় github.com/containous/blog-posts/blob/master/...
TheOneRing

1
মনে রাখবেন যে বিদ্যমান অ্যাকমে.জসন থাকলে মিডওয়্যারটিকে এইচটিটিপিএসে পুনঃনির্দেশ করা থেকে আটকাতে পারে। এটি ট্রাফিকের শুরুতে ইতিমধ্যে উপস্থিত থাকলে এটি সরান।
আইয়ামদেব

7

আপনার নিজের ট্রফিফিক পরিষেবাটি নিজেই কনফিগার করতে হবে না। ট্র্যাফিক-এ আপনার কেবলমাত্র এন্ট্রিপয়েন্টগুলি থাকতে হবে: 443 (ওয়েব-সুরক্ষিত) এবং: 80 (ওয়েব)

যেহেতু ট্রাফিক কেবল এন্ট্রিপয়েন্ট হিসাবে কাজ করে এবং পুনর্নির্দেশটি করবে না, লক্ষ্য পরিষেবাতে মিডলওয়্যার এটি করবে।

এখন আপনার টার্গেট পরিষেবাটি নিম্নলিখিত হিসাবে কনফিগার করুন:

version: '2'
services:
  mywebserver:
    image: 'httpd:alpine'
    container_name: mywebserver
    labels:
      - traefik.enable=true
      - traefik.http.middlewares.mywebserver-redirect-web-secure.redirectscheme.scheme=https
      - traefik.http.routers.mywebserver-web.middlewares=mywebserver-redirect-web-secure
      - traefik.http.routers.mywebserver-web.rule=Host(`sub.domain.com`)
      - traefik.http.routers.mywebserver-web.entrypoints=web
      - traefik.http.routers.mywebserver-web-secure.rule=Host(`sub.domain.com`)
      - traefik.http.routers.mywebserver-web-secure.tls.certresolver=mytlschallenge
      - traefik.http.routers.mywebserver-web-secure.tls=true
      - traefik.http.routers.mywebserver-web-secure.entrypoints=web-secure
      # if you have multiple ports exposed on the service, specify port in the web-secure service
      - traefik.http.services.mywebserver-web-secure.loadbalancer.server.port=9000

সুতরাং মূলত প্রবাহ এভাবে চলে:

অনুরোধ: http://sub.domain.com:80 -> ট্রাফিক (পরিষেবা) -> মাইওয়েবার্সার-ওয়েব (রাউটার, HTTP নিয়ম) -> মাইওবার্সার-রিডাইরেক্ট-ওয়েব-সিকিউর (মিডওয়্যার, https এ পুনঃনির্দেশ) - -> মাইওয়েবার্সার-ওয়েব-সুরক্ষিত (রাউটার, https নিয়ম) -> মাইওয়েবার্সার (পরিষেবা)


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

এইটা কাজ করে. এটি ডকুমেন্টেশনে থাকা উচিত। আপনাকে কেবল http সংস্করণটির জন্য একটি রাউটার তৈরি করতে হবে এবং এটিতে পুনর্নির্দেশ মিডলওয়্যারটি রাখতে হবে।
মিলোসা

2

ঠিক আছে, পাওয়া গেছে ... আমি ধরে নিয়েছি যে ট্র্যাডফিক স্তরে মিডলওয়্যারগুলি ঘোষণা করা যেতে পারে তবে সেগুলি পরিষেবা পর্যায়ে ঘোষণা করতে হবে।

এই লাইন:

- "traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https"

হোসামি পরিষেবার লেবেলে থাকতে হবে।

আরেকটি বিষয়, যা বর্ণিত সমস্যার সাথে সম্পর্কিত নয়, তা হ'ল এইচটিপি চ্যালেঞ্জটি 80 পোর্টে করতে হবে।

- "--certificatesresolvers.myhttpchallenge.acme.httpchallenge.entrypoint=web-secure"

"ওয়েব-সুরক্ষিত" "সুরক্ষিত" সরান।


এটা অদ্ভুত. আমার ট্র্যাফিক সার্ভিসে পুনঃনির্দেশ মিডলওয়্যার ঘোষণা হয়েছে এবং অ্যাপ্লিকেশন পরিষেবা থেকে উল্লেখ করা হয়েছে এবং এটি কাজ করে।
Izydorr

পূর্ববর্তী কোডটি দিয়ে এটি কাজ করে বলে মনে হচ্ছে তবে HTTP আসলে https এ পুনঃনির্দেশ দেয় না।
থিব

আপনি অ্যাপ্লিকেশন থেকে মিডলওয়্যারটিকে কীভাবে উল্লেখ করবেন?
থিব

Traefik সেবা আমি একটি লেবেল মিডলওয়্যার সংজ্ঞা আছে: traefik.http.middlewares.https-only.redirectscheme.scheme=https এবং অ্যাপ্লিকেশান পরিষেবাতে আমি লেবেল আছে: traefik.http.routers.myapp.rule=Host($ {APP_HOST} ), traefik.http.routers.myapp.entrypoints=web,traefik.http.routers.myapp.middlewares=https-only
Izydorr

1
লেবেলে আমার সব কিছু আছে। যেহেতু আমি এটি বুঝতে পারি, মিডলওয়্যার ব্যবহারের জন্য দুটি লেবেল দরকার: একটি ঘোষণা / কনফিগারেশনের জন্য (traefik.http.middlewares.htps- only.redirectscheme.scheme = https) এবং তারপরে এটি পরিষেবাতে প্রয়োগ করা হবে (traefik.http.routers.myapp.middlewares = HTTPS শুধুমাত্র)। ঘোষণাটি অ্যাপ্লিকেশন পরিষেবাতে বা ট্রাফিক পরিষেবাতে অবস্থিত হতে পারে - যেমন আমি এটি করি। লক্ষ্য করুন যে আপনি অ্যাপ্লিকেশন পরিষেবাতে মিডলওয়ে ঘোষণা করলেও, আপনি অন্যান্য স্থানে ঘোষিত অন্যান্য মিডলওয়্যারের সাথে ড্যাশবোর্ডে এটি দেখতে পান। হতে পারে আমি ভুল তবে আমি মনে করি আপনি যে কোনও পরিষেবাতে এগুলি ব্যবহার করতে পারেন।
আইজিডোর

1

আমি এই উত্তরটির সন্ধান করছিলাম যখন আমি কীভাবে ট্র্যাফিক ভ 2 2.2 এর মাধ্যমে এইচটিটিপিএস-এ পুনঃনির্দেশ করব এবং আমার জন্য সেরা বিকল্পটি এই এনএভি ভেরিয়েবলগুলি ট্রাফিককে যুক্ত করছিল এবং এটি স্বয়ংক্রিয়ভাবে সমস্ত ট্র্যাফিক এইচটিটিপিএসে পুনঃনির্দেশ করে।

TRAEFIK_ENTRYPOINTS_WEB_ADDRESS=:80
TRAEFIK_ENTRYPOINTS_WEBSECURE_ADDRESS=:443
TRAEFIK_ENTRYPOINTS_WEB_HTTP_REDIRECTIONS_ENTRYPOINT_TO=websecure

এটির সাথে মিডলওয়্যারের সাথে আমার কিছু যুক্ত করার দরকার নেই।

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