Ubuntu 16.04 安裝配置支持http2的nginx


第一步 安裝最新版本的nginx

對於ubuntu16.04而言 直接裝就是最新的
```
sudo apt-get update
sudo apt-get install nginx


查看Nginx版本

sudo nginx -v

16.04默認應該是

nginx version: nginx/1.10.0 (Ubuntu)
```

第二部 修改服務器配置

配置文件/etc/nginx/sites-available/default

server_name example.com;

保存修改后的文件
使用命令nginx -t檢查配置文件語法是否正確

如果正確 會輸出

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

不正確的話根據提示 找原因

4添加ssl證書

創建ssl證書存放的目錄

sudo mkdir /etc/nginx/ssl

拷貝站點的證書到指定目錄

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 vim /etc/nginx/sites-available/default

server節點中新起一行 配置證書路徑

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

5 配置安全選項

HTTP / 2有一個巨大的黑名單的舊的和不安全的密碼,所以我們要避開他們。密碼套件是一堆的加密算法,它描述了如何傳輸數據應該被加密。
我們將使用一個非常受歡迎的密碼設置,其安全性是由互聯網巨頭像CloudFlare的批准。不允許使用MD5加密的(這被稱為不安全的1996起,但盡管如此,它的使用非常廣泛,甚至到今天)

打開配置文件

sudo vim /etc/nginx/nginx.conf

添加下面配置到ssl_prefer_server_ciphers on;后面

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

檢查nginx語法

sudo nginx -t

6增加密鑰交換的安全性

建立一個安全連接的第一步是服務器和客戶端之間的私有密鑰的交換。問題是,到這一點上,他們之間的連接是不加密的,這意味着數據傳輸是可見的任何第三方。這就是為什么我們需要性–Hellman–Merkle算法。關於它是如何工作的技術細節是不能一言以蔽之解釋一個復雜的問題,但如果你真的有興趣的細節,你可以看這個視頻。

默認情況下,nginx使用一個1028位的他(Ephemeral Diffie Hellman)的關鍵,這是比較容易解密。提供最大的安全性,我們要建立我們自己的、更安全的DHE的關鍵。
要做到這一問題,發出以下命令:

sudo openssl dhparam -out /etc/nginx/ssl/dhparam.pem 2048

記住,我們要生成DH參數在同一文件夾中我們的SSL證書。在本教程中,證書在/ etc / Nginx / SSL /。這是因為nginx看起來總是為用戶提供密鑰證書的文件夾和遠程使用它如果存在。

文件路徑后的變量(在我們的情況下,它是2048)指定的鍵的長度。以一個2048位的長度是足夠安全和Mozilla基金會的推薦,但如果你正在尋找更加密,你可以改變它4096。
生成過程將需要約5分鍾

一旦完成,再次打開默認的nginx配置文件:

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

添加新的配置在 server塊中

ssl_dhparam /etc/nginx/ssl/dhparam.pem;

7重定向httpp請求到https

在配置文件/etc/nginx/sites-available/default中加入新server節點

server {
       listen         80;
       listen    [::]:80;
       server_name    example.com;
       return         301 https://$server_name$request_uri;
}

保存后檢查語法是否正確

sudo nginx -t

8重啟nginx

要想使之前的配置全部生效 需要重啟nginx
首先站點配置文件看起來像是這樣

server {
        listen 443 ssl http2 default_server;
        listen [::]:443 ssl http2 default_server;

        root /var/www/html;

        index index.html index.htm index.nginx-debian.html;

        server_name example.com;

        location / {
                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;
}


server {
       listen         80;
       listen    [::]:80;
       server_name    example.com;
       return         301 https://$server_name$request_uri;
}

重啟Nginx

sudo systemctl restart nginx
或者
sudo service nginx restart

9驗證配置

讓我們檢查我們的服務器是否正在運行。打開Web瀏覽器並導航到您的域(與你的實際域名example.com替換):

example.com

打開chrome設置

(View -> Developer -> Developer Tools)
刷新當前頁面

切換到Networktab 點擊表格頭 啟用Protocol選項

現在你應該可以看到h2which stands for HTTP/2)

10配置nginx性能

在這一步,我們將調整為最佳性能和安全性的主要nginx配置文件

打開配置文件nginx.conf

sudo vim /etc/nginx/nginx.conf

啟用連接憑據緩存

相比於HTTP,HTTPS需要相對長的時間來建立服務器和用戶之間的初始連接。為了盡量減少頁面加載速度中的這種差異,我們將啟用連接憑據的緩存。這意味着,而不是創建一個新的會話在每一個頁面上的請求,服務器將使用緩存版本的憑據,而不是。

啟用會話緩存 ,添加如下的行到配置文件的http塊中

 ssl_session_cache shared:SSL:5m;
 ssl_session_t
 
 imeout 1h;

ssl_session_cache指定緩存將包含會話信息的大小。1字節的它可以存儲約4000個會話的信息。對於大多數用戶來說,5個宏的默認值將是足夠的,但如果你期望的流量真的很重,你可以相應地增加這個值。
ssl_session_timeout限制特定會話緩存中存儲的時間。這個值不應該太大(超過一個小時),但設置值太低是沒有意義的。

## 啟用HTTP嚴格傳輸安全(HSTS)

盡管我們已經做了所有常規的HTTP請求重定向到HTTPS在nginx的配置文件中,我們還應該啟用HTTP嚴格傳輸安全避免首先要做那些重定向
如果瀏覽器找到HSTS報頭,它不會試圖通過普通的HTTP再次為給定的時間內連接到服務器。不管是什么,它將只使用加密的HTTPS連接交換數據。這個標題也應該保護我們的協議降級攻擊。

將下面的配置添加到nginx.conf的http節點中

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

max-age單位使秒。15768000秒相當於6個月。

默認情況下,此頭不添加到域的請求。如果你想申請的子域,HSTS的所有的人,你應該在行尾添加includeSubDomains變量,像這樣:

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

保存 檢查配置

nginx -t

重啟
servier nginx restart


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM