HTTP / 2 adalah versi baru protokol HTTP / 1.1 yang sudah usang dan telah diseragamkan pada tahun 1999. Banyak yang telah berubah di web sejak itu. Aplikasi kami lebih kompleks daripada sebelumnya, jadi untuk mengatasinya, perlu dilakukan perubahan dalam protokol pengangkutan yang mendasari. Perkara yang paling penting mengenai HTTP / 2 adalah menjadikan laman web anda lebih pantas untuk pengguna akhir.
Secara ringkas HTTP / 2 menambah 5 ciri utama:
- Sambungan tunggal, berterusan
- Pelbagai mod
- Pemampatan tajuk
- Keutamaan sumber
- Lapisan pengangkutan selamat (hanya sah untuk penyemak imbas)
Menjelaskan semua ciri ini di luar ruang lingkup tutorial ini tetapi jika anda ingin menggali topik ini dengan lebih mendalam, saya boleh mengesyorkan petikan dari buku Rangkaian Penyemak Imbas Berprestasi Tinggi - petikan HTTP / 2 .
Dalam panduan ini kita akan memasang Nginx versi stabil terbaru di Ubuntu 16.04 (Xenial), menghasilkan Sijil SSL yang ditandatangani sendiri, mengaktifkan protokol HTTP / 2 di Nginx dan memasang penyemak imbas berasaskan teks elinks
untuk bertindak sebagai klien HTTP.
Pasang Nginx
Untuk memasang Nginx versi stabil terbaru, kita perlu mengeluarkan beberapa arahan:
-
Kita perlu memuat turun kunci PGP awam Nginx yang digunakan untuk menandatangani pakej dan repositori dan menambahkannya ke dalam keyring yang digunakan oleh pengurus pakej untuk mengesahkan kesahihan pakej yang dimuat turun dari repositori.
wget https://nginx.org/keys/nginx_signing.key && apt-key add nginx_signing.key
-
Padamkan kunci PGP dari sistem fail:
rm nginx_signing.key
-
Tambahkan repositori baru
printf "deb http://nginx.org/packages/ubuntu/ xenial nginx \ndeb-src http://nginx.org/packages/ubuntu/ xenial nginx \n" >> /etc/apt/sources.list.d/nginx.list
-
Kemas kini senarai pakej anda dan pasang Nginx:
apt update && apt install nginx -y
-
Untuk mengesahkan versi Nginx kita boleh menggunakan yang berikut:
nginx -v
# nginx version: nginx/1.10.1
Sekiranya semuanya berjalan lancar, anda akan melihat corak seperti 1.10.x
pada output semasa menjalankan nginx -v
perintah.
Sijil yang ditandatangani sendiri dan HTTP / 2
Walaupun spesifikasi HTTP / 2 tidak memaksa penyemak imbas untuk melaksanakan HTTP / 2 melalui TLS, semua penyemak imbas utama memutuskan untuk hanya menerapkan HTTP / 2 melalui TLS, tetapi tidak versi TLS apa pun, hanya TLS 1.2 atau lebih tinggi.
Kami akan membuat sijil yang ditandatangani sendiri untuk example.com
domain fiksyen , untuk pengeluaran anda memerlukan domain yang sah dan menggunakan CA yang dipercayai.
-
Jana kunci peribadi:
openssl genrsa -aes128 -out example.com.key 2048
Setelah menjalankan perintah ini, anda perlu memasukkan frasa laluan 2 kali. Kerana frasa laluan mengganggu kita akan menghapusnya.
-
Keluarkan frasa laluan dari kunci peribadi:
openssl rsa -in example.com.key -out example.com.key
-
Buat Permintaan Penandatanganan Sijil (CSR):
openssl req -new -sha256 -key example.com.key -out cert-request.csr
Kami membuat sijil domain tunggal, jadi kami perlu menetapkan bidang nama bersamaan dengan example.com
domain
-
Buat sijil:
openssl x509 -req -days 365 -in cert-request.csr -signkey example.com.key -out example.com.crt
-
Isi sijil dan kunci peribadi:
mkdir -p /etc/ssl/testing/private && mkdir /etc/ssl/testing/certs
mv example.com.key /etc/ssl/testing/private && mv example.com.crt /etc/ssl/testing/certs
-
Buat direktori hos maya nginx
mkdir /etc/nginx/sites-available && mkdir /etc/nginx/sites-enabled
-
Kemudian jalankan nano /etc/nginx/nginx.conf
dan cari arahan include /etc/nginx/conf.d/*.conf;
. Di bawah arahan ini tambahkan include /etc/nginx/sites-enabled/*;
Save ( CTRL + O ) dan kemudian berhenti ( CTRL + X ).
##
# Virtual Hosts
##
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
-
Buat fail yang disebut example.com.conf
dalam /etc/nginx/sites-available
direktori dengan perintah ini nano /etc/nginx/sites-available/example.com.conf
dan salin / tampal kod berikut:
server {
listen 80;
listen [::]:80;
server_name example.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name example.com;
root /var/www/html;
index index.nginx-debian.html;
ssl_certificate /etc/ssl/testing/certs/example.com.crt;
ssl_certificate_key /etc/ssl/testing/private/example.com.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256';
ssl_prefer_server_ciphers on;
}
Tahniah, anda kini mempunyai pelayan web yang didayakan HTTP / 2 . Menambah http2
parameter ke listen
arahan di dalam hos maya HTTPS akan memberi anda sokongan HTTP / 2 .
-
Buat pautan simbolik untuk /etc/nginx/sites-available/example.com.conf
dengan arahan ini:
ln -s /etc/nginx/sites-available/example.com.conf /etc/nginx/sites-enabled
-
Sintaks konfigurasi ujian
nginx -t
-
Mulakan semula Nginx untuk menerapkan perubahan anda:
systemctl restart nginx
-
Tambahkan example.com
domain ke /etc/hosts
fail
echo '127.0.0.1 example.com' >> /etc/hosts
Pasang elinks
Untuk menguji hos maya anda, kami memerlukan penyemak imbas berasaskan teks - elinks.
-
Untuk memasang elinks gunakan arahan berikut:
apt install elinks
-
Untuk menguji example.com
jalannya hos maya anda :
elinks https://example.com
-
Untuk keluar dari penyemak imbas elinks tekan q pada papan kekunci anda dan kemudian Enter .
Uji HTTP / 2
Untuk melihat protokol apa yang diiklankan oleh pelayan, kaedah termudah adalah menggunakan openssl
toolkit.
openssl s_client -connect example.com:443 -nextprotoneg ''
Dalam output arahan ini, anda akan melihat sesuatu seperti ini:
CONNECTED(00000003)
Protocols advertised by server: h2, http/1.1
Untuk melihat HTTP / 2 beraksi, anda boleh menggunakan alat pembangun penyemak imbas. Protokol HTTP / 2 ditunjukkan sama ada dengan h2
atau HTTP/2.0
pengecam. Buka panel rangkaian dalam alat dev dan muat semula halaman anda.
Kesimpulannya
Sekarang anda harus menyedari betapa "mudahnya" untuk mengaktifkan HTTP / 2 dalam konfigurasi Nginx, tetapi itu bukan keseluruhan gambaran keseluruhan. Mula-mula anda harus memikirkan untuk mengaktifkan TLS / SSL di pelayan anda dengan suite cipher yang kuat dan pastikan anda tidak menggunakan cipher senarai hitam . Hanya setelah mengaktifkan TLS / SSL yang kuat di pelayan anda, anda boleh mula memikirkan untuk mengaktifkan HTTP / 2 .