Nginx ভেরিয়েবল $ হোস্ট, $ http_host এবং $ সার্ভার_নামের মধ্যে পার্থক্য কী?


42

তিন nginx ভেরিয়েবল মধ্যে পার্থক্য কি $host, $http_hostএবং $server_name?

আমার একটি পুনর্লিখনের নিয়ম রয়েছে যেখানে আমার কোনটি ব্যবহার করা উচিত তা আমি নিশ্চিত নই:

location = /vb/showthread.php {
    # /vb/showthread.php?50271-What-s-happening&p=846039
    if ($arg_p) {
        return 301 $scheme://$host/forum/index.php?posts/$arg_p/;
        }

আমি এমন একটি উত্তর খুঁজছি যা কেবল আপনার পুনর্লিখনের নিয়মে '___ ভেরিয়েবল ব্যবহার করে' বলে না তবে তাদের মধ্যে তাত্ত্বিক পার্থক্যও ব্যাখ্যা করে।


আমি পরে বুঝতে পেরেছি আমি এমনকি নির্দিষ্ট করতে হবে না $schemeএবং $host... return 301 /forum/index.php?posts/$arg_p/;কাজ করে জরিমানা।
জেফ উইডম্যান

পুনর্নির্দেশে বেশিরভাগ ব্রাউজার আপেক্ষিক ইউআরএল নিয়ে কাজ করবে তবে মানকটির ( w3.org/Protocols/rfc2616/rfc2616-sec14.html ) Locationশিরোনামে পরম ইউআরএল প্রয়োজন requires
চিতুলহু

উত্তর:


54

আপনার প্রায় সবসময় ব্যবহার করা উচিত $host, কারণ ব্যবহারকারী-এজেন্ট যেভাবে আচরণ করে তা বিবেচনা না করেই বোধগম্য কিছু হওয়ার গ্যারান্টিযুক্ত কেবলমাত্র যদি আপনার অন্য কোনও ভেরিয়েবলের শব্দার্থবিজ্ঞানের প্রয়োজন না হয়।

পার্থক্যটি এনজিনেক্স ডকুমেন্টেশনে ব্যাখ্যা করা হয়েছে :

  • $host "অগ্রাধিকারের এই ক্রমের মধ্যে রয়েছে: অনুরোধ লাইন থেকে হোস্টের নাম, বা 'হোস্ট' অনুরোধ শিরোনাম ক্ষেত্র থেকে হোস্টের নাম, বা কোনও অনুরোধের সাথে মিলে যাওয়া সার্ভার নাম"
  • $http_host অনুরোধটিতে উপস্থিত থাকলে HTTP "হোস্ট" শিরোনাম ক্ষেত্রের সামগ্রী রয়েছে
  • $server_nameরয়েছে server_nameভার্চুয়াল হোস্ট যা অনুরোধ প্রক্রিয়া যেমন nginx কনফিগারেশনে সংজ্ঞায়িত হয়েছিল। যদি একটিতে serverএকাধিক server_nameগুলি থাকে তবে কেবলমাত্র প্রথমটি এই পরিবর্তনশীলটিতে উপস্থিত থাকবে।

যেহেতু ব্যবহারকারী-এজেন্টদের জন্য হোস্ট: শিরোনামের পরিবর্তে অনুরোধ লাইনে হোস্টনামটি প্রেরণ করা আইনী, যদিও এটি প্রক্সিগুলির সাথে সংযোগের সময় ব্যতীত খুব কমই করা হয়, আপনাকে এটির জন্য অ্যাকাউন্ট করতে হবে।

আপনাকে সেই ক্ষেত্রে অ্যাকাউন্ট করতে হবে যেখানে ব্যবহারকারী-এজেন্ট কোনও হোস্ট-নেম প্রেরণ করেন না, যেমন প্রাচীন HTTP / 1.0 অনুরোধ এবং আধুনিক খারাপভাবে লিখিত সফ্টওয়্যার। আপনি যদি একাধিক ওয়েব সাইট পরিবেশন করছেন, বা আপনার সার্ভারে যদি আপনার কেবলমাত্র একটি একক ওয়েব সাইট থাকে তবে আপনি কোনও একক ভার্চুয়াল হোস্টের মাধ্যমে সমস্ত কিছুতে প্রক্রিয়াজাত করতে পারেন, এমন কোনও ক্যাচ-অল ভার্চুয়াল হোস্টে যা কোনও কিছুই পরিবেশন করে না সেগুলিকে ডাইভার্ট করে আপনি এটি করতে পারেন you । পরবর্তী ক্ষেত্রে আপনাকেও এটির জন্য অ্যাকাউন্ট করতে হবে।

$hostএইচটিটিপি অনুরোধ গঠনের সময় ব্যবহারকারী-এজেন্ট যে সমস্ত সম্ভাব্য জিনিসগুলি করতে পারে কেবল তার জন্য কেবল পরিবর্তনশীল অ্যাকাউন্টগুলি accounts


2
অন্যদিকে, ইউএ থেকে ফিল্ডে স্বেচ্ছাসেবী সামগ্রী থাকতে পারে $server_nameতা নিরাপদ Host:
চিতুলহু

1
$ Http_host এর নাম $ হোস্টনেমে রাখা হয়েছে? আমি Nginx ডক এ জাতীয় পরিবর্তনশীল খুঁজে পাচ্ছি না। $ হোস্টনামটি আমার অনুমান অনুসারে সর্বাধিক অনুরূপ।
অন্ধকারবাবি 123

3
@ darkbaby123 না, এটি কোনও কিছুরই নাম পরিবর্তন করা হয়নি। ডকুমেন্টেশন দেখুন ।
মাইকেল হ্যাম্পটন

1
আহ এখন আমি বুঝতে পারছি http_ <name> ভেরিয়েবল এর অর্থ। ধন্যবাদ!
অন্ধকারবাবি 123

0

আমি গ্রহণযোগ্য উত্তরে উল্লিখিত না হওয়াতে আরও একটি গুরুত্বপূর্ণ বিষয় যুক্ত করতে চাই।

$hostনা না পোর্ট নম্বর আছে, যখন $http_hostআপনি কি পোর্ট নম্বর অন্তর্ভুক্ত।

সম্পাদনা : সর্বদা না।

আমি একটি শিরোনাম "অ্যাড_হেডার ওয়াই-ব্লগ-http_host" $ http_host "সর্বদা সেট আপ করেছি;"

তারপরে curl -I -L domain.com:80(বা 443) এবং শিরোনামটি কোনও পোর্ট নম্বর দেখায় না। Nginx- অতিরিক্ত 1.10.3 সহ যাচাই করা হয়েছে। কারণ এটি সাধারণ http (গুলি) বন্দর বা এনগিনেক্স কনফিগারেশন? জিনিসগুলি বলতে এই মন্তব্যটি সর্বদা আপনার মত আচরণ করে না ।


0

আমিও কিছুক্ষণ এই নিয়ে লড়াই করেছি। আমি যখন বুঝতে পেরেছিলাম তখন এটি স্পষ্ট হয়ে উঠল $ http_XXXXX সমস্ত ঘোষিত শিরোনাম ভেরিয়েবলগুলিকে উল্লেখ করে।

সুতরাং $ http_user_agent, $ http_referr হ'ল "ব্যবহারকারীর এজেন্ট", "রেফার" নিম্নের ক্ষেত্রে উল্লেখ করা হয় এবং আন্ডারল্যাশ হয়। এটি আমাকে ব্যাখ্যা করেছে যে অনেক এনজিআইএনএক্স কনফিগারেশন নমুনায় নরক $ http_upgregates কোথায় থেকে আসছিল।

এটি https://stackoverflow.com/questions/15414810/whats-the-differences-of-host-and-http-host-in-nginx থেকে পড়ুন

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