এনগিনেক্স - একক ফাইল পরিবেশন করার জন্য রুট বনাম ওরফে?


66

বহু ঘন্টা পরে nginxএকক ফাইলগুলি পরিবেশন করার পরে robots.txt(ইঙ্গিত: প্রতিবার আপনার ব্রাউজারের ক্যাশেটি সাফ করুন ), আমি দুটি ভিন্ন উপায়ে ঘায়েল করেছি, একটি ওরফে ডাইরেক্টিভ ব্যবহার করে , এবং একটিতে মূল নির্দেশিকা ব্যবহার করছি :

location /robots.txt { alias /home/www/static/robots.txt; }
location /robots.txt { root /home/www/static/;  }

দুজনের মধ্যে কি কোনও কার্যকরী পার্থক্য রয়েছে? নাকি সুরক্ষার সমস্যা? অন্যান্য নির্দেশের সাথে কোনও দ্বন্দ্ব? (অন্য / স্থির অবস্থানের সাথে উভয়ই ঠিকঠাক বলে মনে হয়েছিল)। বা অন্য কোন এক বাছাই করার কোনও কারণ?

দ্রষ্টব্য - আমি একই সাথে উভয় ব্যবহার করিনি :) বরং আমি প্রতিটি একবার চেষ্টা করেছিলাম এবং দুজনেই কাজ করেছি। আমি উভয়ই কীভাবে একই ফাইলে একসাথে যোগাযোগ করি তা জিজ্ঞাসা করছি না, তবে কোনটি ব্যবহার করা ভাল।

উত্তর:


71

ঠিক আছে, এই দুটি নির্দেশনা সামান্য কার্যকরী কারণ আপনি পরবর্তী ক্ষেত্রে সঠিক মিলটি ব্যবহার করেন না। সুতরাং, /robots.txt1111আপনার দ্বিতীয় অবস্থানটিও মিলবে।
location =/robots.txt { root /home/www/static/; }আপনার প্রথম নির্দেশের একটি সঠিক কার্যকরী সমতুল্য।


ভালো কথা, ধন্যবাদ তবে আপনি =উভয় ক্ষেত্রে একটি ব্যবহার করতে পারেন , সঠিক? বা এটি কেবল প্রযোজ্য root? এছাড়াও, আমার সম্পাদনা দেখুন - আমি উভয় একবারে ব্যবহার করতে চাইছিলাম না। :)
সাইক্লোপস

@ সাইক্লোপস হ্যাঁ, আপনি =উভয় ক্ষেত্রেই ব্যবহার করতে পারেন ।
আলেকজান্ডার আজারভ

সুতরাং তারা একই হবে - অন্যটির চেয়ে একটি নির্দেশ বাছাই করার কোনও কারণ আছে কি? আমার মূল প্রশ্ন।
সাইক্লপস

@ সাইক্লোপস মূলত, এর কোনও কারণ নেই।
অ্যালেক্স

41

হ্যাঁ, একটি পার্থক্য রয়েছে: "ওরফে" দিয়ে আপনি পারবেন .. অন্য কোনও ফাইলের নামের মতো, ভালো

location /robots.txt { alias /home/www/static/any-filename.txt; }

যেহেতু

location /robots.txt { root /home/www/static/; }

আপনাকে সার্ভারে আপনার ফাইলটির নামও রোবটস.টি.এস.টি. আমি আমার সার্ভারে আমার রোবট ফাইলগুলির নাম tld.domain.subdomain-robots.txt হিসাবে রাখতে পছন্দ করার পরে আমি প্রথম বিকল্পটি ব্যবহার করি; যেমন

location /robots.txt { alias /home/www/static/ch.notex.static-robots.txt; }

1

আমি মনে করি যে এনজিনেক্স প্রিফিক্সগুলিতে কাজ করছে এবং প্রতি সেফের জন্য ফাইলগুলি নয় exp প্রথম ক্ষেত্রে,

location /robots.txt { alias /home/www/static/robots.txt; }

এনগিনেক্স ইউআরএল পাথের স্ট্রিং উপসর্গটি প্রতিস্থাপন করে এবং তারপরে ফলাফলটি ফাইল-সিস্টেমের পথ হিসাবে ব্যবহার করে। সিউডোকোড হিসাবে উপস্থাপন করা, এটি এমন কিছু হবে:/robots.txt/home/www/static/robots.txt

if urlPath.startsWith("/robots.txt") {
    fsPath := "/home/www/static/robots.txt" + urlPath.stripPrefix("/robots.txt")
    serveFile(fsPath)
}

তাই /robots.txtথেকে পরিবেশিত হয় /home/www/static/robots.txtকারণ /robots.txtছিনতাই /robots.txtউপসর্গ খালি স্ট্রিং, এবং খালি স্ট্রিং সংযোজন /home/www/static/robots.txtআপাতত অপরিবর্তিত ছেড়ে। তবে, /robots.txt1থেকে পরিবেশন করা হবে /home/www/static/robots.txt1এবং /robots.txt/foobarপরিবেশন করা হবে /home/www/static/robots.txt/foobar। এই ফাইলগুলি অস্তিত্বহীন হতে পারে, যার ফলে এনজিনেক্স একটি 404 প্রতিক্রিয়া প্রেরণ করবে এবং এটি সম্ভবত robots.txtকোনও ডিরেক্টরি নয় তবে এনজিনেক্স আগে থেকেই জানেন না এবং এটি সমস্ত স্ট্রিং উপসর্গের উপর ভিত্তি করে এবং কোনও ফাইল হিসাবে উপস্থিত বলে মনে হয় না বা অনুপস্থিতি বা একটি পিছনে স্ল্যাশের উপস্থিতি দ্বারা ডিরেক্টরি।

অন্যদিকে,

location /robots.txt { root /home/www/static/; }

এনগিনেক্স /home/www/static/ইউআরএল পাথের শুরুতে স্ট্রিংটি সন্নিবেশ করে এবং তারপরে ফলাফলটি ফাইল সিস্টেমের পথ হিসাবে ব্যবহার করে। সিউডোকোডে, এটি এমন কিছু হবে:

if urlPath.startsWith("/robots.txt") {
    fsPath := "/home/www/static/" + urlPath
    serveFile(fsPath)
}

এটি প্রথম কেসের মতো একই ফলাফল, তবে ভিন্ন কারণে। কোনও উপসর্গ ফেলা হয় না, তবে যেহেতু প্রতিটি ইউআরআই /robots.txtপাথগুলিতে উপসর্গ থাকতে হয় , তারপরে ফাইল সিস্টেমের পথগুলি সর্বদা শুরু হবে /home/www/static//robots.txtযার সমতুল্য /home/www/static/robots.txt

অবশ্যই, সিউডোকোড পুরো গল্পটি পুরোপুরি বলে না, যেমন এনজিনেক্স অন্ধভাবে কাঁচা ইউআরএল পাথ ব্যবহার করবে না /../../../etc/passwd, try_filesনির্দেশিকাটি root/ এর আচরণকে পরিবর্তন করে aliasএবং যেখানে aliasব্যবহার করা যেতে পারে তার ক্ষেত্রেও বাধা রয়েছে ।


0

একটি পার্থক্য আছে, যখন উপনামটি একটি সম্পূর্ণ ডিরেক্টরিতে থাকে।

    location ^~ /data/ { alias /home/www/static/data/; }

কাজ করবে, যখন

    location ^~ /data/ { root /home/www/static/data/; }

করবে না এই হতে হবে

    location ^~ /data/ { root /home/www/static/; }

(বিভ্রান্ত করা সহজ)

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