এনগিনেক্স: অবস্থানের নির্দেশিকায় সার্ভারের হোস্টের নাম মিলছে


18

আমার একক সার্ভারের নির্দেশনার অধীনে এনজিঙ্ক্স একাধিক ডোমেন চালাচ্ছে

server {
        listen       80;
        server_name  www.domain.com;
        server_name  x.domain.com;
        server_name  y.domain.com;

----
----
----
}

এখন, একটি সাবডোমেনের সাথে মেলে এবং এতে বুনিয়াদি লেখক প্রয়োগ করতে আমার অবস্থান নির্দেশিকা ব্যবহার করতে হবে। এর সমতুল্য

location x.domain.com {
        auth_basic "Admin Login";
        auth_basic_user_file /etc/nginx/.htpasswd;
}

আমি এটা কিভাবে করবো?

উত্তর:


16

সাবডোমেন ক্যাপচার করতে আপনি একটি নিয়মিত অভিব্যক্তি ব্যবহার করতে পারেন এবং তারপরে এটি আপনার অবস্থানের পরে ব্যবহার করতে পারেন।

server {
    server_name   ~^(?<sub>\.)?(?<domain>.+)$;

    location / {
        root   /sites/$sub;
    }
}

বিকল্পভাবে, সমস্ত সাধারণ কনফিগারেশনগুলিকে অন্য কোনও ফাইলে সরিয়ে নেওয়া ভাল, এবং তারপরে প্রতি-সাবডোমেন সার্ভার ব্লক তৈরি করে বাহ্যিক ফাইল অন্তর্ভুক্ত করা ভাল।

server {
        server_name  www.domain.com;
        include /etc/nginx/sites-enabled/default.inc;

    location / {
        ... 
    } 
}

(অন্যান্য সার্ভারের জন্য পুনরাবৃত্তি)


আমি কি কিছু মিস করছি বা সার্ভার নেম লাইনটি একটি ?এবং নেই <>? আমি বিশ্বাস করি এটি হওয়া উচিতserver_name ~^(?<sub>\.)?(?<domain>.+)$;
মোহাম্মদ আবুশাদি

আপনি সম্ভবত বেশ সঠিক - এই মুহূর্তে এটি যেভাবে ছিল তার কোনও কারণ আমি ভাবতে পারি না, তাই আমি এটি আপনার পরামর্শে পরিবর্তন করেছি।
cyberx86

6

একটি বিকল্প হ'ল ত্রুটি ফিরিয়ে দেওয়া এবং সেই ত্রুটিটি এমন কোনও স্থানে প্রেরণ করা যা এইচটিটিপি প্রমাণীকরণ পরিচালনা করে:

if ($host = x.domain.com) {
    return 550;
}

error_page 550 = @xauth;

location @xauth {
    auth_basic "Admin Login";
    auth_basic_user_file /etc/nginx/.htpasswd;
}

5

আপনি যদি মানচিত্র ব্যবহার করেন তবে আপনাকে অবস্থান নির্দেশিকা ব্যবহার করার দরকার নেই। এটি সবচেয়ে সহজ সমাধান এবং সমতুল্য আমি ভাবতে পারি। আপনি htpasswd ফাইলগুলির নাম আপনার $ http_host উদাহরণ অনুসারে রাখতে পারেন x.domain.com.htpasswd

map $http_host $auth_type {
    default "off";               #This will turn off auth-basic
    x.domain.com "Restricted";   #This or any other string will turn it back on
}

server {
    auth_basic $auth_type;
    auth_basic_user_file /etc/nginx/conf.d/$http_host.htpasswd;
}

1
একটি যাদুমন্ত্র মত কাজ করে.
conradkleinespel

@ টম সিউইক যাইহোক আমি একইভাবে allow/ denyএকইভাবে আইপি নিষেধাজ্ঞাগুলি প্রয়োগ করতে এটিকে সামঞ্জস্য করতে পারি ?
টোস্ট

সম্ভব হওয়া উচিত, আপনি প্রচুর ভেরিয়েবলের উপর ম্যাপ করতে পারেন। ভেরিয়েবলের তালিকার জন্য : nginx.org/en/docs/varindex.html দেখুন । এর $remote_addrপরিবর্তে আপনার সম্ভবত প্রয়োজন হবে $http_host। যদিও রেঞ্জ সম্পর্কে নিশ্চিত না।
টম সিউইক

4

আপনার যদি একাধিক (সাব) ডোমেন থাকে এবং সেগুলি ঠিক একই রকম আচরণ না করে তবে আপনি একাধিক সার্ভার ব্লককক্স ব্যবহার করেন। দুঃখিত তবে এটি গুরুতরভাবে সর্বোত্তম উপায়, যদিও আপনার আরও বড় কনফিগারেশন থাকবে have

($ Http_host ~ foo) এর মতো কিছু ব্যবহার করে আপনি ঘেটো হ্যাক করতে পারেন তবে তারপরে আপনি এখানে সম্ভবত নথিবদ্ধ থাকলে অপ্রত্যাশিত এবং অদ্ভুত আচরণটি চালিয়ে যাবেন: http://wiki.nginx.org/IfIsEvil

এনগিনেক্সকে আউটস্মার্ট করার চেষ্টা করবেন না, কেবলমাত্র এটি আপনাকে দেয় এমন বিকল্পগুলি ব্যবহার করুন এবং আপনার মাথা ব্যথা কম হবে।

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