ওয়াইল্ডকার্ড সাবডোমেনগুলি https (nginx) এ পুনঃনির্দেশ করুন


20

আমি একটি ওয়াইল্ডকার্ড এসএসএল শংসাপত্র পেয়েছি এবং আমি সমস্ত নন-এসএসএল ট্র্যাফিককে এসএসএলে পুনর্নির্দেশের চেষ্টা করছি। বর্তমানে আমি নিম্ন-সাব-মাইন্ডেড ইউআরএলকে পুনঃনির্দেশের জন্য নিম্নলিখিতটি ব্যবহার করছি যা ভাল কাজ করছে।

server {
listen      80;
server_name mydomain.com;

#Rewrite all nonssl requests to ssl.
rewrite     ^ https://$server_name$request_uri? permanent;
}

যখন আমি * .mydomain.com এর জন্য একই জিনিস করি তখন এটি যুক্তিযুক্তভাবে পুনর্নির্দেশ করে

https://%2A.mydomain.com/

আপনি কীভাবে সমস্ত উপ-ডোমেনকে তাদের https সমতুল্যে পুনর্নির্দেশ করবেন?


2
$ সার্ভার_নামের পরিবর্তে $ হোস্ট কেন নয়?
সিজেসি

উত্তর:


47

এখানেই শেষ...

server {
    listen      80;
    server_name *.mydomain.com;

     #Rewrite all nonssl requests to ssl.
     return 301 https://$host$request_uri;
}

2
আরও কিছুটা ব্যাখ্যা এটি আরও ভাল উত্তর দিতে পারে।
ডেভ এম

3
@ ডেভ-এম, এখানে ব্যাখ্যা করার দরকার আছে? $hostপরিবর্তনশীল? $request_uri?
ক্যাডমি

এটি কাজ করে না, এখনও পেয়েছে https: //%2A.handy.travel/
দামন ইউয়ান

2

এনজিআইএনএক্স অফিসিয়াল ডকুমেন্টেশন পুনঃনির্দেশকে প্রভাবিত করার জন্য পুনর্লিখনের নির্দেশ ব্যবহার না করে রিটার্ন নির্দেশিকা ব্যবহার করতে উত্সাহিত করে। এটি তাই, অনুরোধটি পুনর্লিখন করা সেই সার্ভারের জন্য নয়, তবে এটি এখনও সেই সার্ভার ব্লকে প্রক্রিয়াজাত হয়। সুতরাং সমস্ত প্রক্রিয়াকরণ বন্ধ হয়ে যায় এবং তত্ক্ষণাত একটি প্রতিক্রিয়া প্রেরণ করা হওয়ায় পরিবর্তে পুনর্নির্দেশগুলি সঠিকভাবে পরিবর্তনের নির্দেশের সাথে সম্পন্ন করা হয়। Nginx নিরুৎসাহিত এখানে পুননির্দেশ না পাবার জন্য পুনর্লিখন: http://nginx.org/en/docs/http/converting_rewrite_rules.html

প্রত্যাবর্তনের দিকনির্দেশনার সিনট্যাক্সটি: রিটার্ন কোড URL; যেহেতু আপনি মূলত একটি স্থায়ী পুনর্লিখন করছেন, সুতরাং সেই অনুযায়ী আপনি কোডটিকে প্রতিক্রিয়া হিসাবে 301 ব্যবহার করতে পারেন, এটি স্থায়ী পুনঃনির্দেশ বলে ইঙ্গিত করে। আপনার https ঠিকানা url বিভাগে পাস করা হবে। তথ্যসূত্র: http://nginx.org/en/docs/http/ngx_http_rewrite_module.html#return

সুতরাং আপনার সঠিক কনফিগারেশন হবে

server {
listen      80;
server_name *.mydomain.com;

#Redirect all nonssl requests to ssl.
return 301 https://$server_name$request_uri;
}

এটি সম্ভবত আপনাকে একটি ওয়াইল্ডকার্ড সার্ভার ব্লক সহ আপনার এসএসএল ডোমেনে সঠিকভাবে পুনঃনির্দেশ করতে দেবে। উপরের মন্তব্যে প্রস্তাবিত হিসাবে আপনি আন্ডারস্কোর জেনেরিক সার্ভার নাম '_' বা $ হোস্টও চেষ্টা করতে পারেন। আমাদের জানতে দাও!


ব্যবহার করার সময় returnসাধারণত ভাল, প্রস্তাবিত কনফিগারেশন যেমন এখনো ফেরৎ জন্য $ SERVER_NAME, যা হতে হবে "* .mydomain.com" ব্যবহার সঠিক নয়। সঠিক ফিক্সটি উপরের মন্তব্যে @cjc দ্বারা ইতিমধ্যে রূপরেখা ছিল - এর $hostপরিবর্তে ব্যবহার করা উচিত $server_name
ম্যাক্সিম ডাউনিন

হ্যাঁ রাজি। আহ মনে হচ্ছে আমার মনোযোগ স্প্যান্স '!
অপূর্ব সুকান্ত

উপরের দিকনির্দেশের পরিবর্তে, আমাকে আপনার এসএসএল কনফিগারেশনের সাথে একটি টিপ প্রস্তাব দেওয়ার অনুমতি দিন যা কার্য সম্পাদনকে উল্লেখযোগ্যভাবে উন্নত করতে পারে। আপনি ওয়াইল্ডকার্ড শংসাপত্র ব্যবহার করে থাকেন তবে এসএসএল সেটআপ করার সবচেয়ে কার্যকরী উপায় হ'ল 'এসএসএল স্ট্যাপলিং' সেটআপ করা এটি আপনাকে সমস্ত সাব ডোমেনের জন্য ডিফল্ট সার্ভারে একবার এসএসএল সেটআপ করতে দেয় এবং প্রতিটি সাব ডোমেনের জন্য পৃথক এসএসএল প্রমাণীকরণ সংরক্ষণ করে। ssl_stapling on; সমাধানকারী 8.8.8.8; ssl_stapling_file /ssl_keys/example.com_staple; ssl_stapling_verify চালু; রেফারেন্স- calomel.org/nginx.html
অপূর্ব সুকান্ত

2
হওয়া উচিতreturn 301 https://$host$request_uri;
স্কার্ভার 2

return 301 https://$server_name$request_uri;443 বন্দরে https ব্যবহারের জন্য আমি 80, 8080 এবং 8181 বন্দরগুলির জন্য শুনছি The সমস্যাটি হ'ল পুনঃনির্দেশিত ইউআরএলটিতে এখনও মূল পোর্ট নম্বর রয়েছে। 80 সমস্যা নয়, তবে 8080 হিসাবে প্রকাশিত হয়https://example.com:8080
গ্রেড

-1

এরকম কিছু চেষ্টা করুন:

server {
  listen 80;
  server_name ~^(.*)\.mydomain\.com$;
  set $servername $1;
  rewrite ^(.*)$ https://$servername.mydomain.com/$1;
}

ক্যাচটি হ'ল ওয়াইল্ডকার্ড সার্ভারটি সংজ্ঞায়িত করতে হবে এবং এর নামের ভিত্তিতে পুনর্নির্দেশ করা হবে।


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