نحوه راه اندازی Nginx با پشتیبانی HTTP / 2 در اوبونتو 18.04

Nginx یک سرور مجازی وب منبع باز سریع و قابل اعتماد است. شهرت آن به دلیل اشغال کم حافظه ، مقیاس پذیری بالا ، سهولت پیکربندی و پشتیبانی از طیف گسترده ای از پروتکل ها میباشد.HTTP / 2 نسخه جدیدی از پروتکل نقل و انتقال Hypertext است که در وب برای ارائه صفحات از سرور مجازی به مرورگر استفاده می شود. HTTP / 2 اولین به روزرسانی عمده HTTP در تقریباً دو دهه اخیر است : HTTP1.1 در سال 1999 به عموم مردم معرفی شد در حالی که صفحه های وب معمولاً فقط یک فایل HTML با شیوه نامه CSS درون خطی بودند. اینترنت از آن زمان به طرز چشمگیری تغییر کرده است، و اکنون ما با محدودیت های HTTP 1.1 روبرو هستیم – پروتکل سرعت انتقال بالقوه را برای اکثر وب سایت های مدرن محدود می کند زیرا قسمت هایی از یک صفحه را در یک صف دانلود می کند (دانلود قسمت قبلی باید قبل از قسمت بعدی کامل شود) ، و به طور متوسط ​​یک صفحه وب مدرن به دانلود حدود 100 درخواست نیاز دارد (هر درخواست یک عکس ، فایل js ، فایل CSS و غیره است).HTTP / 2 این مشکل را حل می کند زیرا باعث ایجاد چند تغییر اساسی می شود:• همه درخواست ها به صورت موازی دانلود می شوند ، نه در صف• هدرهای HTTP فشرده می شوند• صفحات به عنوان یک باینری ، نه به عنوان یک فایل متنی انتقال پیدا میکنند، که کارآمدتر است• سرور مجازی ها می توانند داده ها را “push” کنندحتی بدون درخواست کاربر ، که سرعت را برای کاربران با تأخیر بالا بهبود می بخشداگرچه HTTP / 2 به رمزگذاری نیاز ندارد ، اما توسعه دهندگان دو مرورگر محبوب ، گوگل کروم و موزیلا فایرفاکس ، اظهار داشتند که به دلایل امنیتی از HTTP / 2 فقط برای اتصالات HTTPS پشتیبانی می کنند. از این رو ، اگر تصمیم دارید سرور مجازی هایی را با پشتیبانی HTTP / 2 تنظیم کنید ، باید آنها را با HTTPS نیز ایمن کنید.این آموزش به شما کمک می کند تا یک سرور مجازی سریع و مطمئن Nginx با پشتیبانی HTTP / 2 تنظیم کنید.پیش نیازهاقبل از شروع کار ، به چند مورد نیاز خواهیم داشت:⦁ یک سرور مجازی Ubuntu 18.04 با پیروی از راهنمای تنظیم اولیه سرور مجازی Ubuntu 18.04 ، شامل یک کاربر sudo غیر ریشه و فایروال.⦁ Nginx که بر روی سرور مجازی شما نصب شده باشد ، و می توانید با دنبال کردن نحوه نصب Nginx در اوبونتو 18.04 ، این کار را انجام دهید.⦁ نام دامنه پیکربندی شده برای اشاره به سرور مجازی شما. می توانید در Namecheap خریداری کنید یا یکی از آنها را به صورت رایگان در Freenom دریافت کنید.⦁ گواهی TLS / SSL که برای سرور مجازی شما تنظیم شده است. سه گزینه دارید:o با دنبال کردن چگونگی ایمن سازی Nginx با Let’s Encrypt در Ubuntu 18.04 می توانید گواهی رایگان از Let’s Encrypt دریافت کنید.o همچنین می توانید با دنبال کردن نحوه ایجاد یک گواهی SSL خود امضا شده برای Nginx در اوبونتو 18.04 ، یک گواهی خود امضا شده ایجاد و تنظیم کنید.o می توانید گواهی را از ارائه دهندگان دیگر خریداری کرده و Nginx را پیکربندی کنید تا با پیروی از مراحل 2 تا 6 نحوه ایجاد یک گواهی SSL خود امضا شده برای Nginx در اوبونتو 18.04 از آن استفاده کنید.⦁ Nginx به گونه ای پیکربندی شود تا ترافیک را از پورت 80 به پورت 443 هدایت کند ، که باید با پیش نیازهای قبلی پوشش داده شود.⦁ Nginx به گونه ای پیکربندی شود تا از یک کلید 2040 بیتی یا بالاتر Ephemeral Diffie-Hellman (DHE) استفاده کند ، که باید با پیش نیازهای قبلی نیز پوشش داده شود.مرحله 1 – فعال کردن پشتیبانی HTTP / 2اگر مرحله نصب بلوک سرور مجازی را در آموزش نصب Nginx دنبال کردید ، باید یک سرور مجازی برای دامنه خود در / etc / nginx / sites-available / your_domain خود با server_namedirective که قبلاً به طور مناسب تنظیم شده است ، داشته باشید. اولین تغییری که ما ایجاد خواهیم کرد اصلاح بلوک سرور مجازی دامنه شما برای استفاده از HTTP / 2 خواهد بود.فایل پیکربندی را برای دامنه خود باز کنید:$ sudo nano /etc/nginx/sites-available/your_domainدر این فایل ، متغیرهای listen مربوط به پورت 443 را بیابید:your_domain’>/etc/nginx/sites-available/your_domain…listen [::]:443 ssl ipv6only=on;listen 443 ssl;…مورد اول مربوط به اتصالات IPv6 است. مورد دوم برای کلیه اتصالات IPv4 است. ما HTTP / 2 را برای هر دو فعال خواهیم کرد.هر یک از دستورالعمل های listen را تغییر دهید تا http2 را شامل شود:your_domain’>/etc/nginx/sites-available/your_domain…listen [::]:443 ssl http2 ipv6only=on;listen 443 ssl http2;…این به Nginx می گوید که از HTTP / 2 با مرورگرهای پشتیبانی شده استفاده کند.فایل پیکربندی را ذخیره کرده و ویرایشگر متن را ویرایش کنید.هر زمان که در فایل های پیکربندی Nginx تغییراتی ایجاد کنید ، باید پیکربندی خطاهای نحوی را مانند این موارد بررسی کنید:$ sudo nginx –tاگر نحو بدون خطا باشد ، خروجی زیر را مشاهده خواهید کرد:Output of sudo nginx -tnginx: the configuration file /etc/nginx/nginx.conf syntax is oknginx: configuration file /etc/nginx/nginx.conf test is successfulدر مرحله بعد ، ما سرور مجازی خود را پیکربندی خواهیم کرد تا از لیست محدودتر رمزها استفاده شود.مرحله 2 – حذف سوئیت های رمزگذاری شده قدیمی و ناایمنHTTP / 2 دارای لیست سیاه رمزهای قدیمی و ناامن است ، بنابراین باید از آنها اجتناب کنیم. مجموعه های cipher مجموعه های رمزنگاری هستند که نحوه رمزگذاری داده های انتقال یافته را توصیف می کنند.روشی که برای تعریف cipher استفاده خواهید کرد بستگی به نحوه پیکربندی گواهینامه های TLS / SSL شما برای Nginx دارد.اگر برای به دست آوردن گواهینامه های خود از Certbot استفاده کرده اید ، فایل /etc/letsencrypt/options-ssl-nginx.conf را نیز ایجاد کرده است که حاوی cipher هایی است که برای HTTP / 2 به اندازه کافی قوی نیستند. اصلاح این فایل متأسفانه مانع از اعمال به روزرسانی Certbot در آینده خواهد شد ، بنابراین ما فقط به Nginx میگوییم که از این فایل استفاده نکند و ما لیست رمزهای خود را مشخص خواهیم کرد.فایل پیکربندی بلوک سرور مجازی را برای دامنه خود باز کنید:$ sudo nano /etc/nginx/sites-available/your_domainخطی را که شامل فایل های گزینه options-ssl-nginx.conf است پیدا کنید و آن را حذف کنید:your_domain’>/etc/nginx/sites-available/your_domain# include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot<^>در زیر آن خط ، این خط را برای تعریف رمز مجاز اضافه کنید:your_domain’>/etc/nginx/sites-available/your_domainssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;فایل را ذخیره کرده و از ویرایشگر خارج شوید.اگر از گواهینامه های خود امضا شده یا از یک گواهی از سوی شخص ثالث استفاده کرده اید و مطابق پیش نیازها آن را پیکربندی کرده اید ، فایل /etc/nginx/snippets/ssl-params.conf را در ویرایشگر متن خود باز کنید:$ sudo nano /etc/nginx/snippets/ssl-params.confخط زیر را پیدا کنید:/etc/nginx/snippets/ssl-params.conf…ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384;…آن را به این صورت اصلاح کنید:/etc/nginx/snippets/ssl-params.conf…ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3فایل را ذخیره کنید و از ویرایشگر خود خارج شوید.یک بار دیگر ، پیکربندی خطاهای نحوی را بررسی کنید:$ sudo nginx -tاگر خطایی دیدید ، آن ها را هدف قرار داده و دوباره تست کنید.هنگامی که خطایی ندیدید ، Nginx را ریستارت کنید:$ sudo systemctl reload nginxبا راه اندازی مجدد سرور مجازی ، تأیید کنید که به خوبی کار می کند.مرحله 3 – تأیید فعال بودن HTTP / 2بیایید اطمینان حاصل کنیم که سرور مجازی با HTTP / 2 کار می کند.از دستور curl برای ایجاد درخواست به سایت خود و مشاهده هدر ها استفاده کنید:$ curl -I -L https://your_domainخروجی زیر را مشاهده خواهید کرد:OutputHTTP/1.1 301 Moved PermanentlyServer: nginx/1.14.0 (Ubuntu)Date: Fri, 06 Jul 2018 19:07:12 GMTContent-Type: text/htmlContent-Length: 194Connection: keep-aliveLocation: https://your_domain/HTTP/2 200server: nginx/1.14.0 (Ubuntu)date: Fri, 06 Jul 2018 19:07:12 GMTcontent-type: text/htmlcontent-length: 16last-modified: Fri, 06 Jul 2018 16:55:37 GMTetag: “5b3f9f09-10”accept-ranges: bytesهمچنین می توانید تأیید کنید که HTTP / 2 در گوگل کروم در حال استفاده است. کروم را باز کرده و به http: // your_domain بروید. ابزارهای برنامه نویسی کروم را باز کنید (View -> Developer -> Developer Tools) و مجدد صفحه را لود کنید (View -> Reload This Page). به سربرگ Network بروید ، بر روی ردیف header جدول که با Name شروع می شود ، کلیک راست کنید و از منوی بازشده گزینه پروتکل را انتخاب کنید.h2 (مخفف HTTP / 2) را در یک ستون پروتکل جدید مشاهده خواهید کرد که نشان می دهد HTTP / 2 در حال کار است.در این مرحله ، شما آماده ارائه مطالب از طریق پروتکل HTTP / 2 هستید. بیایید با فعال کردن HSTS ، امنیت و عملکرد را بهبود ببخشیم.مرحله 4 – فعال کردن امنیت سختگیرانه انتقال HTTP (HSTS)حتی اگر درخواستهای HTTP شما به HTTPS تغییر مسیر دهند ، می توانید HTTP Strict Transport Security (HSTS) را فعال کنید تا از انجام این تغییر مسیرها جلوگیری شود. اگر مرورگر یک هدرHSTS پیدا کند ، دیگر سعی نخواهد کرد تا برای یک بازه زمانی معین ، دوباره از طریق HTTP معمولی به سرور مجازی متصل شود. صرفنظر از نوع داده ، آن را فقط با اتصال HTTPS رمزگذاری شده داده تبادل می کند. این هدر همچنین از ما در برابر حملات تخریب پروتکل محافظت می کند.فایل پیکربندی Nginx را در ویرایشگر خود باز کنید:$ sudo nano /etc/nginx/nginx.confبرای فعال کردن HSTS ، این خط را به فایل اضافه کنید:/etc/nginx/nginx.confhttp {…### Virtual Host Configs##include /etc/nginx/conf.d/*.conf;include /etc/nginx/sites-enabled/*;add_header Strict-Transport-Security “max-age=15768000” always;}…max-age در ثانیه تنظیم می شود. مقدار 15768000 معادل 6 ماه است.به طور پیش فرض ، این هدر به زیردامنه ها اضافه نمی شود. اگر زیر دامنه دارید و می خواهید HSTS روی همه آنها اعمال شود ، باید متغیر includeSubDomains را در انتهای خط اضافه کنید ، مانند این:/etc/nginx/nginx.confadd_header Strict-Transport-Security “max-age=15768000; includeSubDomains” always;فایل را ذخیره کنید و از ویرایشگر خارج شوید.یک بار دیگر ، پیکربندی خطاهای نحوی را بررسی کنید:$ sudo nginx -tسرانجام ، سرور مجازی Nginx را دوباره راه اندازی کنید تا تغییرات اعمال شود.$ sudo systemctl reload nginxنتیجهسرور مجازی Nginx شما اکنون در خدمت صفحات HTTP / 2 است. اگر می خواهید استحکام اتصال SSL خود را آزمایش کنید ، لطفا به SSL Qualys LAB مراجعه کرده و تست را برای سرور مجازی خود اجرا کنید. اگر همه چیز به درستی تنظیم شده است ، باید یک علامت A + برای امنیت دریافت کنید.برچسب‌ها:CSS, HTTP / 2, HTTPS, Hypertext, js, Nginx