انجیناکس؛ شب ۶: چند سایت و default_server
فهرست نوشته
نام ناشناس هم باید رفتار مشخصی داشته باشد. امشب سایت دوم و یک server پیشفرض محدود میسازیم تا ترتیب فایلها بهطور اتفاقی محتوای سایت اصلی را منتشر نکند.
این جلسه بخشی از دورهٔ انجیناکس در ۵۰ شب است. قرارداد آزمایشگاه، مسیرها و روال اعمال تغییر در راهنمای دوره آمده است.
محیط: www شب پنجم؛ سایت پیشفرض توزیع از پورت مربوط غیرفعال میشود، با backup.
نام در برابر listener#
پوشهٔ /var/www/nginx-lab/docs را مثل سایت اول با متن متفاوت بساز. یک server دیگر با listen 80، server_name docs.nginx.test و root جدید تعریف و فعال کن. نام DNS ایجاد نمیشود؛ کلاینت باید از hosts یا resolve استفاده کند.
در فایل 000-default.conf شاخهٔ خودت:
server {
listen 80 default_server;
server_name _;
return 404;
}
default_server ویژگی listener است؛ _ نام جادویی برای catch-all نیست. برای هر آدرس/پورت فقط یک پیشفرض تعریف کن. اگر IPv6 راهنما را فعال کردی، listener متناظر [::]:80 default_server و listenerهای سایتها را هم آگاهانه اضافه کن.
sudo nginx -t
sudo systemctl reload nginx
curl -i -H 'Host: unknown.nginx.test' http://192.168.57.10/
curl --resolve docs.nginx.test:80:192.168.57.10 http://docs.nginx.test/
باید نام ناشناس 404 و سایت دوم محتوای خودش را بدهد. nginx -T باید نشان دهد پیشفرض قدیمی دیگر رقابت نمیکند.
مرز این کنترل#
رد Host ناشناس، محدودیت IP یا احراز هویت نیست؛ هر کلاینت میتواند Host درست بفرستد. برای HTTPS انتخاب اولیهٔ گواهی با SNI پیش از پردازش HTTP انجام میشود؛ پیشفرض 443 را پس از آمادهسازی TLS خواهیم ساخت.
تمرین و بازگشت: default_server را از سایت اول و دوم جدا نگه دار و نامها را با تغییر ترتیب فایلها دوباره تست کن. برای برگشت، فایل catch-all و سایت دوم را غیرفعال و نسخهٔ سالم قبلی را reload کن؛ تغییر باید برای هر listener IPv4/IPv6 بررسی شود.
منبع: server_name و میزبان پیشفرض .