nginx সার্ভার_নামে ওয়াইল্ডকার্ড বা ক্যাপ-অল


119

আমার কাছে এনগিনেক্স চলার উদাহরণ রয়েছে যা বেশ কয়েকটি ওয়েবসাইট পরিবেশন করে। প্রথমটি হ'ল সার্ভারের আইপি ঠিকানায় স্থিতি বার্তা। দ্বিতীয়টি অ্যাডমিন কনসোল অন admin.domain.com। এই কাজ দুর্দান্ত। এখন আমি অন্য সমস্ত ডোমেন অনুরোধগুলিতে একটিতে যেতে index.phpচাই - আমার প্রচুর ডোমেন এবং সাবডোমেন রয়েছে এবং সেগুলি একটি এনজিনেক্স কনফিগারেশনে তালিকাভুক্ত করা অযৌক্তিক।

এখনও অবধি আমি সেট server_nameকরার চেষ্টা করেছি *কিন্তু এটি একটি অবৈধ ওয়াইল্ডকার্ড হিসাবে ব্যর্থ হয়েছে। *.*আমি অন্য সার্ভার ব্লকগুলি যোগ না করা পর্যন্ত কাজ করে, তবে আমি অনুমান করি যে এটি তাদের সাথে বিরোধপূর্ণ ts

অন্যান্য সাইটগুলি সংজ্ঞায়িত করার পরে কি এনগিনেক্সে ক্যাচ-অল সার্ভার ব্লক চালানোর কোনও উপায় আছে?

এনবি আমি কোনও স্প্যামার নই, এগুলি দরকারী সামগ্রী সহ খাঁটি সাইট, এগুলি কেবল একটি ডাটাবেস থেকে একই সিএমএস দ্বারা চালিত!


1
শ্রেষ্ঠ প্রাথমিক উৎস হিসাবে ব্যবহার করতে nginx.org/en/docs/http/server_names.html
স্টিফেন

উত্তর:


147

আপনার ক্যাচ-সমস্ত সার্ভার ব্লকে এটি শোনার বিকল্পটি পরিবর্তন করুন। (যোগ করুন default_server) এটি আপনার সমস্ত অ-সংজ্ঞায়িত সংযোগ গ্রহণ করবে (নির্দিষ্ট বন্দরে)।

listen       80  default_server;

যদি আপনি ফাইল বা ফোল্ডারটির অস্তিত্ব না থাকে তবে আপনি সবকিছুকে সূচক.এফপি-তে ঠেলাতে চান;

try_files                       $uri /$uri /index.php;

নিখুঁতভাবে কাজ - অনেক ধন্যবাদ। আমি server_name _;আইপি ঠিকানায় স্থিতি পৃষ্ঠার জন্য ব্যবহার করতে পারি না , আমাকে উল্লেখ করতে হয়েছিল server_name x.x.x.xতবে তা ঠিক আছে!
তাক

1
যোগ default_serverকরা nginx 1.4.6 এ কাজ করছে বলে মনে হচ্ছে না যা বর্তমানে উবুন্টু 14.04 এর সর্বশেষতম সংস্করণ ... আমি যখন এটি যুক্ত করব তখন configtestকমান্ডটি একটি ত্রুটি ফিরিয়ে দেয় এবং সার্ভার পুনরায় চালু করাও কাজ করে না। আমি ডেবিয়ান জেসির সাথে আমার সার্ভারে ঠিক একই কনফিগারেশনটি চেষ্টা করেছি, যার এনগিনেক্স ১.6.২ রয়েছে এবং এটি পুরোপুরি কার্যকরভাবে কাজ করে। আপনি যদি 1.4.6 এ থাকেন তবে অন্য সংস্করণটি চেষ্টা করে দেখুন ...
নিকোমাক

1
এইচটিটিপিএসের জন্য সাইড নোট: default_serverনির্দেশটি সেই সার্ভারটিও সেট করে যা সেই বন্দরে অনুরোধের জন্য এসএসএল হ্যান্ডশেক পরিচালনা করবে। সুতরাং, আপনি যদি সার্ভার ব্লক এটিকে এসএসএল পরিচালনা করতে চান তবে সার্ভার বি এইচটিটিপিএসের ক্যাচল হিসাবে কাজ করতে চায় তবে সমাধানটি server_name ~^(.+)$সার্ভার বি
লূক

66

একটি সাধারণ আন্ডারস্কোর পাশাপাশি কাজ করে:

server_name  _;

সূত্র: http://nginx.org/en/docs/http/server_names.html


2
যদিও এই লিঙ্কটি প্রশ্নের উত্তর দিতে পারে, উত্তরের প্রয়োজনীয় অংশগুলি এখানে অন্তর্ভুক্ত করা এবং রেফারেন্সের জন্য লিঙ্কটি সরবরাহ করা ভাল। লিঙ্কযুক্ত পৃষ্ঠাগুলি পরিবর্তিত হলে লিঙ্ক-শুধুমাত্র উত্তরগুলি অবৈধ হতে পারে।
Kmeixner

10
লিঙ্কটি কেবল একটি রেফারেন্স হিসাবে সরবরাহ করা হয়েছে। উপরের দুটি লাইনই উত্তরটি হ'ল: সার্ভার_নামের মান হিসাবে কেবল একটি আন্ডারস্কোর রাখলে পছন্দসই "সমস্ত ধরুন" আচরণ তৈরি হবে।
jp.gouigoux

55
এই উত্তরটি সত্য নয়। রেফারেন্সটি এটি পরিষ্কার করে দেয় যে listen 80 default_serverআপনার কনফিগারে না থাকলে এটি কাজ করবে না ।
বিটল

5
আরো দেখুন এই নিবন্ধটি
বিটল

2
হতে পারে আমি ডক্সকে ভুল বুঝেছি, তবে "এই নামটি সম্পর্কে বিশেষ কিছু নেই, এটি কেবলমাত্র অবৈধ ডোমেন নামগুলির মধ্যে একটি যা কোনও আসল নামের সাথে ছেদ করে না“ "-" এবং "! @ #" এর মতো অন্য অবৈধ নামগুলিও হতে পারে সমানভাবে ব্যবহার করা। তাহলে _কি শুধু একটি অবৈধ নাম?
ফ্লোরিয়ান ক্লেইন

26

এটি কাজ করবে:

server_name ~^(.+)$

13
server_name ~.আরও দক্ষ বলে মনে হচ্ছে
youfu

2
এটি আমার পক্ষে কাজ করেছে। যে কোনও কারণে আমি ডিফল্ট_সভারটি কাজ করতে পেলাম না, এটি আমার অন্যান্য সমস্ত হোস্টকে ওভাররাইড করে।
নিউরোএক্সসি

11

আমার জন্য কোনওরকম সংজ্ঞা দিন ডিফল্ট_সভার কাজ করছে না। আমি এটি দ্বারা সমাধান

server_name ~^.*$

সবার নিয়মিত অভিব্যক্তি ব্যবহার করে।


সমস্ত উচ্চতর ভোট দেওয়া বিকল্পের চেষ্টা করে এবং এটিই কেবলমাত্র কাজ করে। দ্রষ্টব্য: আমি এটির আইপি ঠিকানা বনাম ইউআরএল দিয়ে কোনও সার্ভারে যাওয়ার চেষ্টা করছি।
ম্যাম্পারসেট

9

কেবল 1 টি serverনির্দেশনা

এনগিনেক্স ডক্স থেকেlisten

ডিফল্ট_সার্ভার পরামিতি যদি উপস্থিত থাকে তবে নির্দিষ্ট ঠিকানাটির জন্য সার্ভারটি ডিফল্ট সার্ভারে পরিণত করবে: পোর্ট জোড়। যদি নির্দেশের কোনওটিরই ডিফল্ট_সেভার প্যারামিটার না থাকে তবে ঠিকানা সহ প্রথম সার্ভার: পোর্ট জুড়ি এই জুটির জন্য ডিফল্ট সার্ভার হবে।

আপনার কাছে যদি কেবলমাত্র 1 টি serverনির্দেশ থাকে তবে এটি সমস্ত অনুরোধ পরিচালনা করবে, আপনার কোনও কিছু সেট করার দরকার নেই।


একাধিক serverনির্দেশনা

আপনি যদি নির্দিষ্ট serverনির্দেশাবলীর সাথে সমস্ত অনুরোধের সাথে মিল রাখতে চান তবে কেবলমাত্র এতে default_serverপ্যারামিটার যুক্ত করুন listen, এনগিনেক্স এই serverনির্দেশকে ডিফল্ট হিসাবে ব্যবহার করবে ।

server {
    listen 80 default_server;
}

সম্পর্কিত server_name _;

এনগিনেক্স ডক্স থেকে

সমস্ত সার্ভারের উদাহরণগুলিতে অদ্ভুত নাম "_" দেখা যায়:

server {
    listen       80  default_server;
    server_name  _;
    return       444;
}

এই নামটি সম্পর্কে বিশেষ কিছু নেই, এটি কেবলমাত্র একটি অবৈধ ডোমেন নামগুলির মধ্যে একটি যা কোনও আসল নামের সাথে ছেদ করে না। "-" এবং "! @ #" এর মতো অন্য অবৈধ নামগুলিও সমানভাবে ব্যবহৃত হতে পারে।

server_nameআপনি যা সেট করেছেন তা বিবেচ্য নয় , এটি কেবলমাত্র একটি অবৈধ ডোমেন নাম



2

আপনি যদি খালি Hostশিরোনাম (যা HTTP / 1.0 এ মঞ্জুরিপ্রাপ্ত ) দিয়ে অনুরোধগুলিও পেতে চান তবে আপনি রেজেক্স এবং খালি দুটি ব্যবহার করতে পারেন server_name:

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