چگونه Nginx را با پشتیبانی از HTTP/2 در Ubuntu 20.04 راه‌اندازی کنیم؟

Nginx یک وب‌سرور متن‌باز سریع و قابل‌اعتماد است. این نرم‌افزار به‌دلیل مصرف کم حافظه، قابلیت مقیاس‌پذیری بالا، سهولت تنظیم و پشتیبانی از پروتکل‌های متنوع، محبوبیت زیادی پیدا کرده است.

HTTP/2 نسخه جدید پروتکل انتقال ابرمتن (HTTP) است که در وب برای انتقال صفحات از سرور به مرورگر استفاده می‌شود. این نسخه اولین به‌روزرسانی مهم پروتکل HTTP طی تقریباً دو دهه است؛ HTTP1.1 در سال 1999 معرفی شد، زمانی که صفحات وب بسیار کوچک‌تر بودند. اینترنت از آن زمان به‌طور چشمگیری تغییر کرده و محدودیت‌های HTTP1.1 برای سرعت انتقال وب‌سایت‌های مدرن مشکل‌ساز شده است، چرا که این پروتکل بخش‌های صفحه را به‌صورت صف انتظار دانلود می‌کند — بخش بعدی فقط پس از کامل شدن بخش قبلی شروع به دانلود می‌کند — و در صفحات امروزی ده‌ها فایل CSS، جاوااسکریپت و تصاویر وجود دارد.

HTTP/2 این مشکل را با چند تغییر اساسی حل می‌کند:

اگرچه HTTP/2 نیازی به رمزنگاری ندارد، توسعه‌دهندگان دو مرورگر محبوب گوگل کروم و موزیلا فایرفاکس اعلام کرده‌اند که به دلایل امنیتی فقط از HTTP/2 روی ارتباطات HTTPS پشتیبانی می‌کنند. بنابراین اگر قصد راه‌اندازی سرور با پشتیبانی HTTP/2 را دارید، باید آن را با HTTPS ایمن کنید.

این آموزش به شما کمک می‌کند تا یک سرور Nginx سریع و امن با پشتیبانی HTTP/2 را راه‌اندازی کنید.

قبل از شروع، به موارد زیر نیاز دارید:

اگر در قدم تنظیم بلاک سرور در آموزش نصب Nginx از ParminCloud پیروی کرده باشید، باید بلاک سرور دامنه خود را در مسیر /etc/nginx/sites-available/your_domain داشته و متغیر server_name به درستی تنظیم شده باشد. اولین تغییر این است که بلاک سرور دامنه خود را برای استفاده از HTTP/2 تغییر دهید.

فایل پیکربندی دامنه خود را با nano یا ویرایشگر مورد علاقه‌تان باز کنید:

در فایل، بخش‌های مربوط به متغیرهای listen روی پورت 443 را پیدا کنید:

اولی برای اتصالات IPv6 است و دومی برای همه اتصالات IPv4. ما HTTP/2 را برای هر دو فعال می‌کنیم.

هر دستور listen را به صورت زیر تغییر دهید تا http2 اضافه شود:

listen 443 ssl http2;
listen [::]:443 ssl http2;

این به Nginx می‌گوید تا با مرورگرهای پشتیبانی‌کننده، HTTP/2 را فعال کند.

فایل پیکربندی را ذخیره و ویرایشگر را ببندید. در nano کلیدهای Ctrl+X، سپس Y و Enter را بزنید.

هر بار که تنظیمات Nginx را تغییر می‌دهید، باید آنها را با گزینه -t برای بررسی صحت سینتکس تست کنید:

sudo nginx -t

اگر خطایی نباشد، خروجی مشابه زیر دریافت خواهید کرد:

سپس باید سرور Nginx را برای استفاده از مجموعه رمزنگاری (ciphers) محدودتر برای افزایش امنیت تنظیم کنید.

HTTP/2 یک فهرست سیاه از ciphers قدیمی و ناامن دارد که باید اجتناب شوند. مجموعه‌های رمزنگاری الگوریتم‌هایی هستند که مشخص می‌کنند داده‌های منتقل شده چگونه رمزنگاری شوند.

روش تعریف ciphers به نحوه تنظیم گواهی TLS/SSL بستگی دارد.

اگر برای دریافت گواهی از Certbot استفاده کرده‌اید، این ابزار فایل /etc/letsencrypt/options-ssl-nginx.conf را نیز ساخته که مجموعه ciphers نسبتاً ناکافی برای HTTP/2 را تعریف می‌کند. اما بهتر است این فایل را تغییر ندهید چون مانع به‌روزرسانی‌های آینده Certbot می‌شود. بنابراین Nginx را طوری تنظیم می‌کنیم که این فایل را استفاده نکند و به جای آن فهرست ciphers خودمان را مشخص کنیم.

دوباره فایل پیکربندی بلاک سرور دامنه را باز کنید:

خطی که شامل فایل options-ssl-nginx.conf است را با اضافه کردن # در ابتدای آن کامنت کنید:

# include /etc/letsencrypt/options-ssl-nginx.conf;

در زیر این خط، خط زیر را اضافه کنید تا ciphers مجاز را مشخص کنید:

ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384';

فایل را ذخیره و ببندید.

اگر از گواهی خودامضا شده یا گواهی ثالث استفاده کرده‌اید که مطابق پیش‌نیازها تنظیم شده، فایل /etc/nginx/snippets/ssl-params.conf را باز کنید:

خط مربوط به ciphers را پیدا و به‌صورت زیر تغییر دهید:

ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384';

فایل را ذخیره و ببندید.

دوباره با دستور nginx -t صحت پیکربندی را تست کنید:

sudo nginx -t

در صورت وجود خطا، آنها را رفع و دوباره تست کنید.

پس از تایید درست بودن پیکربندی، سرور Nginx را بازنشانی کنید:

sudo systemctl restart nginx

حال مطمئن شویم سرور با HTTP/2 کار می‌کند.

با دستور زیر در ترمینال درخواست به سایت خود بفرستید و هدرها را مشاهده کنید:

curl -I https://your_domain

خروجی مشابه زیر خواهید دید که نشان‌دهنده فعال بودن HTTP/2 است.

همچنین می‌توانید در مرورگر گوگل کروم https://your_domain را باز کنید، سپس با کلیدهای میانبر (View -> Developer -> Developer Tools) ابزار توسعه‌دهنده را باز کنید و صفحه را رفرش نمایید (View -> Reload This Page). در تب Network، روی ستون‌های جدول که با Name شروع می‌شود راست‌کلیک کنید و گزینه Protocol را فعال نمایید.

ستون جدید Protocol نمایش داده می‌شود که اگر h2 باشد یعنی HTTP/2 فعال است.

حال آماده سرویس‌دهی محتوا از طریق پروتکل HTTP/2 هستید. بیایید امنیت و عملکرد را با فعال کردن HSTS بهبود دهیم.

اگرچه درخواست‌های HTTP به HTTPS ریدایرکت می‌شوند، با فعالسازی HTTP Strict Transport Security (HSTS) نیازی به این ریدایرکت‌ها نیست. مرورگر در صورت وجود هدر HSTS، برای مدت زمان مشخص فقط از اتصال HTTPS استفاده می‌کند و از حملات downgrade جلوگیری می‌کند.

دوباره فایل پیکربندی بلاک سرور دامنه را باز کنید:

در همان جایی که ciphers SSL را تعیین کرده‌اید، خط زیر را اضافه کنید تا HSTS فعال شود:

add_header Strict-Transport-Security "max-age=15768000" always;

مقدار max-age بر حسب ثانیه است و معادل ۶ ماه می‌باشد.

اگر دامنه شما زیردامنه دارد و می‌خواهید HSTS روی همه‌ آنها اعمال شود، باید includeSubDomains را نیز اضافه کنید:

add_header Strict-Transport-Security "max-age=15768000; includeSubDomains" always;

فایل را ذخیره و ببندید.

دوباره صحت پیکربندی را با nginx -t بررسی کنید:

سپس سرویس Nginx را ریستارت کنید.

سرور Nginx شما اکنون صفحات را با HTTP/2 سرویس‌دهی می‌کند. برای آزمایش استحکام اتصال SSL می‌توانید از سایت Qualys SSL Lab استفاده کرده و سرور خود را تست کنید. اگر همه‌چیز درست پیکربندی شده باشد، باید امتیاز A+ در امنیت دریافت کنید.

از اینکه با پارمین کلود همراهید، متشکریم.

Click to rate this post!
[Total: 0 Average: 0]

نظرات کاربران

دیدگاهی بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *