গতিশীল nginx ডোমেন রুট পাথ হোস্টনামের ভিত্তিতে?


11

আমি আমার বিকাশ nginx / পিএইচপি সার্ভারটি একটি বেসিক মাস্টার / ক্যাচ-অল ভোস্ট কনফিগারেশনের সাথে সেটআপ করার চেষ্টা করছি যাতে আমি প্রয়োজন মতো সীমাহীন ___.framework.locডোমেন তৈরি করতে পারি ।

server {
        listen 80;
        index index.html index.htm index.php;

        # Test 1
        server_name ~^(.+)\.frameworks\.loc$;
        set $file_path $1;
        root    /var/www/frameworks/$file_path/public;

        include /etc/nginx/php.conf;
}

যাইহোক, nginx এই সেটআপটির জন্য 404 ত্রুটির সাথে সাড়া দেয়। আমি জানি এনগিনেক্স এবং পিএইচপি কাজ করছে এবং অনুমতি আছে কারণ localhostআমি যে কনফিগারটি ব্যবহার করছি তা ঠিক কাজ করে।

server {
        listen 80 default;
        server_name localhost;
        root /var/www/localhost;
        index index.html index.htm index.php;

        include /etc/nginx/php.conf;
}

সমস্যাটি খুঁজতে আমার কী পরীক্ষা করা উচিত? এই php.conf এর একটি অনুলিপি তারা উভয়ই লোড হচ্ছে।

location / {
        try_files $uri $uri/ /index.php$is_args$args;
}

location ~ \.php$ {

        try_files $uri =404;

        include fastcgi_params;
        fastcgi_index index.php;

        # Keep these parameters for compatibility with old PHP scripts using them.
        fastcgi_param PATH_INFO $fastcgi_path_info;
        fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

        # Some default config
        fastcgi_connect_timeout        20;
        fastcgi_send_timeout          180;
        fastcgi_read_timeout          180;
        fastcgi_buffer_size          128k;
        fastcgi_buffers            4 256k;
        fastcgi_busy_buffers_size    256k;
        fastcgi_temp_file_write_size 256k;
        fastcgi_intercept_errors    on;
        fastcgi_ignore_client_abort off;
        fastcgi_pass 127.0.0.1:9000;

}

উত্তর:



13

এনগিনেক্স কনফিগারেশন কোনও প্রোগ্রাম নয়, এটি একটি ঘোষণা। আপনি যখন কনফিগারেশনটি ব্যবহার করেন:

server {
        server_name ~^(.+)\.frameworks\.loc$;
        ...
        set $file_path $1;
        root    /var/www/frameworks/$file_path/public;
}

আপনার setনির্দেশের আগে কার্যকর হবে তা নিশ্চিত করার কোনও উপায় নেই root

তবে mapআমি ব্যবহার করতে পছন্দ করি এমন নির্দেশের একটি কৌশল আছে । এটি সত্য যা mapপূর্বে মূল্যায়ন করা হয় তার উপর নির্ভর করেlocation

http {
  map $http_host $rootpath {
    ~^(.?<mypath>+)\.frameworks\.loc$  $mypath;
    default                            /      ;
  }
  ....
  root /var/www/frameworks/$rootpath
}

এটিকে মজাদার মতো মনে হচ্ছে, আমি এখনই মানচিত্রের সাথে আরও খেলার পরিকল্পনা করছি। কনফিগারেশন ফাইলগুলি লিনিয়ার ফ্যাশনে প্রক্রিয়াজাত করা হয়নি তা আমিও জানতাম না।
শিওনক্রস

এখানে কি কথা $mypath? এটি কোথাও ব্যবহৃত হয় না।
কোডেয়ার্ট

@ কোডেআর্ট $mypathহ'ল রেজেক্সের ফলাফল গ্রুপ ~^(.?<mypath>+)\.frameworks\.loc$এবং $rootpathপুরো মানচিত্রের ট্রিকের ফলাফল।
ফ্যাবিও মন্টেফুস্কোলো

4

দুর্দান্ত ডিউক্লিওনের উত্তর ছাড়াও , আমার লাইন পরিবর্তন করা দরকার

~^(.?<mypath>+)\.frameworks\.loc$ $mypath;

প্রতি

~^(?P<mypath>.+)\.frameworks\.loc$ $mypath;

আমার /etc/nginx/nginx.confফাইল হিসাবে এখানে প্রস্তাবিত ।

যোগ করার পদ্ধতি

root /var/www/frameworks/$rootpath

এর /etc/nginx/sites-available/defaultপরে ঠিক কাজ করে।


0

আপনি লাইটটিপিডিও দেখতে পারেন look আপনি এখানে যা জিজ্ঞাসা করছেন ঠিক এটির জন্য এটির সমর্থন রয়েছে। এটি কল mod_evhost

খোলার সক্ষম করুন Enable

আপনার লাইটটিপডি.কনফ-এ নিম্নলিখিত লাইনগুলি যুক্ত করুন। আপনি যদি ডেবিয়ান / উবুন্টু বেস বিতরণ ব্যবহার করে থাকেন তবে কেবল নরম লিঙ্ক বা এর থেকে অনুলিপি /etc/lighttpd/conf-available/10-evhost.confকরুন /etc/lighttpd/conf-enabled/

    # http://redmine.lighttpd.net/wiki/1/Docs:ModEVhost
    server.modules + = ("mod_evhost")
    evhost.path-format = "/ হোম / www /% _"

%_Evhost.path-patten এ (ওয়াইল্ডকার্ড) অর্থ সম্পূর্ণ ডোমেন নাম ব্যবহার করুন (যেমন www.example.com)। Www.example.com এর জন্য একটি অনুরোধ স্বয়ংক্রিয়ভাবে ডকুমেন্ট-রুটে সরাসরি চলে যাবে /home/www/www.example.com/

অতিরিক্ত সাইট যুক্ত করা /home/wwwসম্পূর্ণ ডোমেন নাম সহ অন্য ডিরেক্টরি তৈরি করার মতোই সহজ । লাইটটিপিডি কনফিগার ফাইলে কোনও পরিবর্তন নেই।

অন্যান্য ওয়াইল্ডকার্ড রয়েছে এবং ডিরেক্টরি কাঠামো তৈরি করতে ব্যবহার করা যেতে পারে। তারা অনুসরণ হিসাবে হয়

    %% =>% চিহ্ন
    % 0 => ডোমেন নাম + টিএলডি
    % 1 => টিএলডি
    Tld ছাড়া% 2 => ডোমেনের নাম
    % 3 => সাবডোমেন 1 নাম
    % 4 => সাবডোমেন 2 নাম
    % _ => সম্পূর্ণ ডোমেন নাম

বিস্তারিত তথ্য এখানে

পিএস: আপনি ডিবিয়ান / উবুন্টু প্ল্যাটফর্মে থাকলে পিএইচপি সক্ষম করাও সহজ। শুধু সক্ষম 10-fastcgi.confএবং 15-fastcgi-php.conf


0

এনজিআইএনএক্স পিসিআরই নিয়মিত প্রকাশের লাইব্রেরি ব্যবহার করে।
এনজিআইএনএক্স v0.8.25 এর server_nameনির্দেশ অনুসারে নামকরণ ক্যাপচারের অনুমতি দেয়

নিয়মিত এক্সপ্রেশনগুলিতে নামযুক্ত ক্যাপচারগুলি ভেরিয়েবল তৈরি করে ( 0.8.25 ) যা পরে অন্যান্য নির্দেশে ব্যবহার করা যেতে পারে নামকৃত বন্ধনী ব্যবহার করার সময়, এনজিআইএনএক্স স্বয়ংক্রিয়ভাবে সার্ভারের নামগুলির মূল্যায়নের সময় প্রতিটি নামক প্রথম বন্ধকের জন্য একটি পরিবর্তনশীল সেট করে (আমার ধারণা)।

আমি বিকাশকারী বিকাশকারীদের পরিবেশের জন্য নিম্নলিখিত স্নিপেটটি ব্যবহার করি। «ব্যবহারকারী their তাদের ব্যবহারকারীর নাম এবং on proj» প্রজেক্টটি বোঝায় যেগুলিতে তারা কাজ করে:

# ...
server_name ~^(?<user>[^.]+)\.(?<proj>[^.]+).dev.local-server.com;
root /home/$user/www/$proj;
# ...

মনে রাখবেন যে এনজিনেক্স কনফিগারেশনটি ঘোষণামূলক এবং যেমন স্থির ঘোষণাগুলি সর্বদা রান-টাইম গণনা করা মান এবং ভেরিয়েবলের তুলনায় দ্রুত হতে পারে। নিয়মিত এক্সপ্রেশন মূল্যায়ন তুলনামূলকভাবে ব্যয়বহুল, আমার ধারণা এটি ভারী বোঝা (উত্পাদন) পরিবেশে পার্সিমনিতে ব্যবহার করতে হবে।

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