এনগিনেক্স - মূল ও উপন্যাসের সাথে স্থির ফাইলের বিভ্রান্তি


473

আমার অ্যাপ্লিকেশন সার্ভারের মাধ্যমে আমার অ্যাপ্লিকেশনটি 8080এবং অ্যাপ্লিকেশন সার্ভারটি স্পর্শ না করে ডিরেক্টরি থেকে আমার স্ট্যাটিক ফাইলগুলি পরিবেশন করতে হবে । আমার কাছে থাকা এনজিনেক্স কনফিগারেশনটি এরকম কিছু ...

    # app server on port 8080
    # nginx listens on port 8123
    server {
            listen          8123;
            access_log      off;

            location /static/ {
                    # root /var/www/app/static/;
                    alias /var/www/app/static/;
                    autoindex off;
            }


            location / {
                    proxy_pass              http://127.0.0.1:8080;
                    proxy_set_header        Host             $host;
                    proxy_set_header        X-Real-IP        $remote_addr;
                    proxy_set_header        X-Forwarded-For  $proxy_add_x_forwarded_for;
            }
    }

এখন, এই কনফিগারেশনের সাহায্যে সবকিছু ঠিকঠাক চলছে। লক্ষ্য করুন যে rootনির্দেশটি মন্তব্য করা হয়েছে।

যদি আমি সক্রিয় rootও নিষ্ক্রিয় করি alias- এটি কাজ করা বন্ধ করে দেয়। যাইহোক, আমি যখন এর /static/থেকে পিছনটি সরিয়ে ফেলি তখন rootএটি আবার কাজ শুরু করে।

কি ঘটছে তা কেউ ব্যাখ্যা করতে পারেন। এছাড়াও স্পষ্ট এবং verbosely দয়া করে ব্যাখ্যা করুন কি মধ্যে পার্থক্য আছে rootএবং alias, এবং তাদের উদ্দেশ্য।

উত্তর:


1074

আমি আমার বিভ্রান্তির উত্তর পেয়েছি।

তার মাঝে একটি খুবই গুরুত্বপূর্ণ পার্থক্য নেই rootএবং aliasনির্দেশনা। এই পার্থক্যটি যেভাবে নির্দিষ্ট করা পথে rootবা aliasপ্রক্রিয়াজাত হয় তাতে বিদ্যমান।

rootনির্দেশের ক্ষেত্রে , পুরো পাথটি অবস্থানের অংশ সহ মূলের সাথে সংযুক্ত করা হয় , তবে aliasনির্দেশের ক্ষেত্রে, অবস্থানের অংশটি না সহ কেবলমাত্র পথের অংশটিই ওরফে সংযুক্ত থাকে

বর্ণনা করা:

ধরা যাক আমাদের কনফিগার আছে

location /static/ {
    root /var/www/app/static/;
    autoindex off;
}

এক্ষেত্রে এনগিনেক্সের চূড়ান্ত পথটি হবে

/var/www/app/static/static

এর মধ্যে 404কোনও কিছু নেই বলে এটি ফিরতে চলেছেstatic/static/

এটি কারণ অংশটির অংশটি নির্দিষ্ট করা পথে সংযুক্ত করা হয়েছে root। সুতরাং, সঙ্গে root, সঠিক উপায় হয়

location /static/ {
    root /var/www/app/;
    autoindex off;
}

অন্যদিকে, এর সাথে alias, অবস্থানের অংশটি বাদ পড়ে । কনফিগার জন্য

location /static/ {
    alias /var/www/app/static/;
    autoindex off;           ↑
}                            |
                             pay attention to this trailing slash

চূড়ান্ত পাথ সঠিকভাবে হিসাবে গঠিত হবে

/var/www/app/static

aliasনির্দেশের জন্য পিছনে স্ল্যাশের ক্ষেত্রে

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

আরও কয়েকটি স্থানে এটি নিয়ে আলোচনা হয়েছে, যদিও এটি চূড়ান্তভাবে নয়।

/server/376162/how-can-i-create-a-location-in-nginx-that-works-with-and-without-a-trailing-slas

/server/375602/why-is-my-nginx-alias-not-working


97
ওরফে পথের পিছনে স্ল্যাশ প্রয়োজনীয়!
মাফ্রোসিস

2
এটি সবই দুর্দান্ত (এটি আমার কনফিগার সমস্যাগুলি সমাধান করতে সহায়তা করেছিল), তবে আমি ভাবছি যে লোকেরা এই ধরণের সমস্যাগুলি সনাক্ত করতে কোন লগিং সেটিংস ব্যবহার করতে পারে? পছন্দ করুন, যে কোনও কিছু যা লগগুলিতে মুদ্রণ করতে পারে যেমন "অবস্থানের জন্য অনুরোধ [...]," অবস্থান [...] "কনফিগার ব্লক, অনুসন্ধান ডিরেক্টরি [...]" এর সাথে
মিলেছে

2
@Pistos: করা log_format scripts '$document_root | $uri | > $request';মধ্যে httpবিভাগে এবং access_log /var/log/nginx/scripts.log scripts;মধ্যে serverএর nginx কনফিগ .. অধ্যায়
helvete

ধন্যবাদ! প্রকৃতপক্ষে পেছনের স্ল্যাশটি ওরফে প্রয়োজনীয়, অন্যথায় আমি পেয়েছি nginx: [emerg] invalid number of arguments in "alias" directive, এবং সার্ভারটি পুনরায় চালু হওয়ার সময় নেমে গেছে।
ফোটিস্ক

@ মাফ্রোসিস কেন এটি প্রয়োজনীয়?
ব্রুস সান

104

হিসাবে @treecoder হিসাবে বলতে

rootনির্দেশের ক্ষেত্রে , পুরো পাথটি অবস্থানের অংশ সহ মূলের সাথে সংযুক্ত করা হয়, তবে aliasনির্দেশের ক্ষেত্রে, অবস্থানের অংশটি না সহ কেবলমাত্র পথের অংশটিই ওরফে সংযুক্ত থাকে।

একটি ছবি হাজার শব্দের সমান

জন্য root:

এখানে চিত্র বর্ণনা লিখুন

জন্য alias:

এখানে চিত্র বর্ণনা লিখুন


11
দ্বিতীয় চিত্রের প্রথম তীরটি কি "+" হওয়া উচিত?
আইয়ুব

35

আপনার ক্ষেত্রে, আপনি ব্যবহার করতে পারেন root, নির্দেশক কারণ $uriঅংশ locationনির্দেশ গত সঙ্গে একই rootনির্দেশ অংশ।

এনগিনেক্স ডকুমেন্টেশন এটির পাশাপাশি পরামর্শ দেয়:
অবস্থানটি যখন নির্দেশকের মানটির শেষ অংশটির সাথে মেলে:

location /images/ {
    alias /data/w3/images/;
}

পরিবর্তে মূল নির্দেশিকা ব্যবহার করা ভাল:

location /images/ {
    root /data/w3;
}

এবং rootনির্দেশিকাটি পথটিতে সংযোজন করবে $uri


2
কেন এটা ভাল? ডক্সও বলে না say
হোস্টেডমেট্রিক্স ডটকম


21

@ গুড_ কম্পিউটারের খুব সহায়ক উত্তরের মাত্র একটি দ্রুত সংযোজন, আমি একটি ফোল্ডার দিয়ে ইউআরএলটির মূলটি প্রতিস্থাপন করতে চেয়েছিলাম তবে কেবল এটি স্ট্যাটিক ফাইলযুক্ত সাবফোল্ডারের সাথে মেলে তবে (যা আমি পথের অংশ হিসাবে ধরে রাখতে চাই)।

উদাহরণস্বরূপ যদি অনুরোধ করা ফাইলটি হয় /app/jsবা থাকে তবে /app/cssসন্ধান করুন /app/location/public/[that folder]

আমি একটি রেজেক্স ব্যবহার করে এই কাজ পেয়েছি।

 location ~ ^/app/((images/|stylesheets/|javascripts/).*)$ {
     alias /home/user/sites/app/public/$1;
     access_log off;
     expires max;
 }

2
এই উত্তরের জন্য ধন্যবাদ। আমি জানি এটি 3 বছর পরে, তবে কেউ যদি উরফ বনাম রুট ব্যবহারের মধ্যে কোনও পারফরম্যান্স এবং / অথবা সুরক্ষা ট্রেডঅফ থাকে তবে ব্যাখ্যা করতে পারবেন?
মিনা

1
@ মিনা আপনি যদি পারেন তবে root ব্যবহার করা ভাল। ( Wiki.nginx.org/HttpCoreModule#alias ডক্সে একটি মন্তব্য আছে )
ম্যাথু উইলকক্সসন

ঠিক এখানেই আমি এখানে এসেছি f
এলিয়েনফ্রোমটারস স্পেস

6

aliasঅনুরোধের পথে লোকেশন পার্ট পাথ (এলপিপি) প্রতিস্থাপন করতে ব্যবহৃত হয়, অন্যদিকে অনুরোধের পথে চাপ দেওয়ার rootজন্য ব্যবহৃত হয়।

চূড়ান্ত ফাইল পাথের অনুরোধের পথটি ম্যাপ করার জন্য এগুলি দুটি উপায়।

aliasকেবল অবস্থান ব্লকে ব্যবহার করা যেতে পারে এবং এটি বাইরে থেকে ওভাররাইড করবে root

aliasএবং rootলোকেশন ব্লকে একসাথে ব্যবহার করা যাবে না।


3
server {
    server_name xyz.com;
    root /home/ubuntu/project_folder/;

    client_max_body_size 10M;
    access_log  /var/log/nginx/project.access.log;
    error_log  /var/log/nginx/project.error.log;

    location /static {
        index index.html;
    }

    location /media {
        alias /home/ubuntu/project/media/;
    }
}

Nginx এ স্থিতিশীল পৃষ্ঠাটি বেঁচে রাখতে সার্ভার ব্লক করে।


2

এই সংক্ষিপ্ত রাখার বিষয়ে অন্য কথায়: ক্ষেত্রে root, অবস্থান যুক্তি নিদিষ্ট অংশ ফাইলসিস্টেম এর পাথ এবং কোনো URI । অন্যদিকে - aliasঅবস্থান বিবরণের দিকনির্দেশক যুক্তির জন্য কেবল ইউআরআই-র অংশ

সুতরাং, aliasএকটি পৃথক নাম যা ফাইল সিস্টেমে নির্দিষ্ট ইউআরআইকে মানচিত্র করে, যেখানে নির্দেশের rootপক্ষে যুক্তি হিসাবে দেওয়া মূল পাথের সাথে অবস্থান যুক্তি যুক্ত করে root

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