Как да настроите Nginx с поддръжка на HTTP / 2

NGINX е бърз и надежден уеб сървър с отворен код. Той спечели популярността си поради ниския си отпечатък на паметта, високата мащабируемост, лекотата на конфигуриране и поддръжката на огромното мнозинство от различни протоколи.

Един от поддържаните протоколи е сравнително новият HTTP / 2, който беше публикуван през май 2015 г. Основното предимство на HTTP / 2 е неговата висока скорост на трансфер за богати на съдържание уебсайтове.

Предварителни

Преди да започнем, ще се нуждаем от няколко неща:

  • Ubuntu 16.04 (или 14.04…)
  • SSL сертификат. Генерирайте самоподписан сертификат, получете безплатен от Let’s Encrypt или го купете от друг доставчик.
  • Това е всичко. Ако имате всичко изброено по-горе, вие сте готови да тръгнете.

Стъпка 1 - Инсталиране на последната версия на Nginx

Поддръжката на HTTP / 2 протокола беше въведена в Nginx 1.9.5. За щастие, по подразбиране хранилище в Ubuntu 16.04 съдържа версия по-висока от тази, така че не е необходимо да добавяме хранилище на трети страни.

Първо, актуализирайте списъка с наличните пакети в системата за подходящи опаковки:

sudo apt-get update

След това инсталирайте Nginx:

sudo apt-get install nginx

След приключване на процеса на инсталиране, можете да проверите версията на Nginx, като напишете:

sudo nginx -v

Изходът трябва да бъде подобен на следното:

версия на nginx: nginx / 1.10.0 (Ubuntu)

Стъпка 2 - Промяна на порта за слушане и активиране на HTTP / 2

Първата промяна, която ще направим, ще бъде да сменим порта за слушане от 80 на 443.

Нека да отворим конфигурационния файл:

sudo nano / etc / nginx / sites-available / default

По подразбиране Nginx е настроен да слуша порт 80, който е стандартният HTTP порт:

слушайте 80 default_server; слушай [::]: 80 default_server;

Както можете да видите, имаме две различни променливи на слушане. Първият е за всички IPv4 връзки. Вторият е за IPv6 връзки. Ще активираме криптиране и за двете.

Променете порта за слушане на 443, който се използва от HTTPS протокола:

слушайте 443 ssl http2 default_server; слушай [::]: 443 ssl http2 default_server;

Забележете, че в допълнение към ssl, ние добавихме и http2 към реда. Тази променлива казва на Nginx да използва HTTP / 2 с поддържани браузъри.

Стъпка 3 - Промяна на името на сървъра

Използваме записа на име на сървър, за да определим кой домейн трябва да бъде свързан с конфигурационния файл. Намерете записа на име на сървър в конфигурационния файл.

По подразбиране името на сървъра е зададено на _ (подчертаване), което означава, че конфигурационният файл е отговорен за всички входящи заявки. Променете _ към вашия действителен домейн, като този:

server_name example.com;

Запазете конфигурационния файл и редактирайте текстовия редактор.

Всеки път, когато правите промени в конфигурационните файлове на Nginx, трябва да проверявате конфигурацията за синтактични грешки, като тази:

sudo nginx -t

Ако синтаксисът е без грешки, ще видите следния изход:

nginx: конфигурационният файл /etc/nginx/nginx.conf синтаксисът е наред nginx: конфигурационният файл /etc/nginx/nginx.conf тестът е успешен

Стъпка 4 - Добавяне на SSL сертификати

След това трябва да конфигурирате Nginx, за да използвате вашия SSL сертификат. Ако не знаете какво е SSL сертификат или в момента няма такъв, моля, следвайте този урок.

Създайте директория, която да съхранява вашите SSL сертификати в конфигурационната директория на Nginx:

sudo mkdir / etc / nginx / ssl

Копирайте вашия сертификат и личния ключ на това място. Също така ще преименуваме файловете, за да покажем към кой домейн са свързани. Това ще ви бъде полезно в бъдеще, когато имате повече от един домейн, свързан с този сървър. Заменете example.com с действителното си име на хост:

sudo cp /path/to/your/certificate.crt /etc/nginx/ssl/example.com.crt sudo cp /path/to/your/private.key /etc/nginx/ssl/example.com.key

Сега, нека отворим отново нашия конфигурационен файл и да конфигурираме SSL.

sudo nano / etc / nginx / sites-available / default

На нови редове вътре в сървърния блок определете местоположението на вашите сертификати:

ssl_certificate /etc/nginx/ssl/example.com.crt;
ssl_certificate_key /etc/nginx/ssl/example.com.key;

Запазете файла и излезте от текстовия редактор.

Стъпка 5 - Избягване на старите шифърски апартаменти

HTTP / 2 има огромен черен списък на стари и несигурни шифри, така че трябва да ги избягваме. Шифровите пакети са куп криптографски алгоритми, които описват как прехвърляните данни трябва да бъдат криптирани.

Ще използваме наистина популярен шифров комплект, чиято сигурност беше одобрена от интернет гиганти като CloudFlare. Тя не позволява използването на криптиране на MD5 (което беше известно като несигурно от 1996 г., но въпреки този факт, неговото използване е широко разпространено и до днес).

Отворете следния конфигурационен файл:

sudo nano /etc/nginx/nginx.conf

Добавете този ред след ssl_prefer_server_ciphers на ;.

ssl_ciphers EECDH + CHACHA20: EECDH + AES128: RSA + AES128: EECDH + AES256: RSA + AES256: EECDH + 3DES: RSA + 3DES:! MD5;

Запазете файла и излезте от текстовия редактор.

Още веднъж проверете конфигурацията за синтактични грешки:

sudo nginx -t

Стъпка 6 - Пренасочване на цялата заявка за HTTP към HTTPS

Тъй като ние сме заинтересовани да обслужваме съдържанието само чрез HTTPS, трябва да кажем на Nginx какво трябва да направи, ако сървърът получи HTTP заявка.

В долната част на нашия файл ще създадем нов сървърен блок за пренасочване на всички HTTP заявки към HTTPS (не забравяйте да замените името на сървъра с действителното ви име на домейн):

сървър {
       слушайте 80;
       слушайте [::]: 80;
       server_name example.com;
       върнете 301 https: // $ server_name $ request_uri;
}

Запазете файла и излезте от конфигурационния файл.

Проверете конфигурацията за синтактични грешки:

sudo nginx -t

Стъпка 7 - Презареждане на Nginx

Това е всичко за всички промени в конфигурацията на Nginx. Тъй като проверявахме за синтактични грешки при всяка промяна, трябва да сте готови да рестартирате Nginx и да тествате промените си.

За да обобщим, игнорирайки коментираните редове, вашият конфигурационен файл трябва да изглежда подобно на този:

сървър {
        слушайте 443 ssl http2 default_server;
        слушай [::]: 443 ssl http2 default_server;
root / var / www / html;
index index.html index.htm index.nginx-debian.html;
server_name example.com;
местоположение / {
                try_files $ uri $ uri / = 404;
        }
ssl_certificate /etc/nginx/ssl/example.com.crt;
        ssl_certificate_key /etc/nginx/ssl/example.com.key;
        ssl_dhparam /etc/nginx/ssl/dhparam.pem;
}
сървър {
       слушайте 80;
       слушайте [::]: 80;
       server_name example.com;
       върнете 301 https: // $ server_name $ request_uri;
}

За да приложите промените, рестартирайте Nginx сървъра.

sudo systemctl рестартира nginx

заключение

Вашият Nginx сървър вече обслужва HTTP / 2 страници. Ако искате да тествате силата на вашата SSL връзка, моля, посетете Qualys SSL Lab и направете тест срещу вашия сървър. Ако всичко е конфигурирано правилно, трябва да получите знак A + за сигурност.

Първоначално публикуван на blog.yvn.io на 22 януари 2017 г.

Искате ли да се научите?

Следвайте ме в Twitter, където публикувам всичко за най-новите и най-добрите AI, DevOps, VR / AR, технологии и наука! Свържете се с мен и в LinkedIn!