第一步 安装最新版本的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

Ubuntu 16.04 安装配置支持http2的nginx的更多相关文章

  1. 【转】Ubuntu 16.04安装配置TensorFlow GPU版本

    之前摸爬滚打总是各种坑,今天参考这篇文章终于解决了,甚是鸡冻\(≧▽≦)/,电脑不知道怎么的,安装不了16.04,就安装15.10再升级到16.04 requirements: Ubuntu 16.0 ...

  2. Ubuntu 16.04安装配置Samba服务

    Samba是开源软件,用来让Linux系统与Windows系统的SMB/CIFS网络协定做连结,实现Windows主机与Linux服务器之间的资源共享.Samba服务为两种不同的操作系统架起了一座桥梁 ...

  3. Ubuntu 16.04 安装和配置 Redis

    因为发现之前手动安装的 redis 与现有的教程不一样,所以总结统一一下安装的标准步骤. 安装依赖项 为了获取最新版本的 Redis,我们将从源代码进行编译和安装.下载源代码之前,需要先安装一些编译所 ...

  4. Ubuntu 16.04安装QQ国际版图文详细教程

            因工作需要,我安装了Ubuntu 16.04,但是工作上的很多事情需要QQ联系,然而在Ubuntu上的WebQQ很是不好用,于是在网上搜索了好多个Linux版本的QQ,然而不是功能不全 ...

  5. ROS_Kinetic_01 在ubuntu 16.04安装ROS Kinetic 2017.01更新

    ROS_Kinetic系列学习(一),在ubuntu 16.04安装ROS Kinetic. Celebrating 9 Years of ROS! ubuntu16.04已经发布半年多了,ROS的K ...

  6. Ubuntu 16.04安装sogou 拼音输入法

    一.更换为国内的软件源 安装搜狗输入法之前请先更换为国内的软件源,否则无法解决依赖问题.首先,用以下命令打开源列表: sudo gedit /etc/apt/sources.list #用文本编辑器打 ...

  7. [eShopOnContainers 学习系列] - 03 - 在远程 Ubuntu 16.04 上配置开发环境

    直接把 md 粘出来了,博客园的富文本编辑器换成 markdown,没啥效果呀 ,先凑合吧.实在不行换地方   # 在远程 Ubuntu 16.04 上配置开发环境 ## 零.因 为什么要用这么麻烦的 ...

  8. Ubuntu 16.04安装Memcached(单机)

    Ubuntu 16.04安装Memcached,不过不仅限与Ubuntu,可以用CentOS等去安装,只不过测试时使用的是Ubuntu机器.Windows下不建议使用,本机调试可以使用,线上环境除了W ...

  9. Ubuntu 16.04 安装Mysql 5.7 踩坑小记

    title:Ubuntu 16.04 安装Mysql 5.7 踩坑小记 date: 2018.02.03 安装mysql sudo apt-get install mysql-server mysql ...

随机推荐

  1. 初学hadoop的个人历程

       在学习hadoop之前,我就明确了要致力于大数据行业,成为优秀的大数据研发工程师的目标,有了大目标之后要分几步走,然后每一步不断细分,采用大事化小的方法去学习hadoop.下面开始叙述我是如何初 ...

  2. elastic job配置

    zookeeper注册中心配置 1 package com.zwh.pay.account.worker; import com.dangdang.ddframe.job.reg.zookeeper. ...

  3. error C2665: “std::locale::facet::operator new”: 2 个重载中没有一个可以转换所有参数类型

    qt项目 qt creator项目由插件自动转换成的vs2015项目,为了发布少带些dll ,切换成vs2013项目,在更改了一些vs2013不支持的c++新标准写法之后,release可正常编过,但 ...

  4. React Native常用组件之ScrollView组件

    一.前言 从iOS开发的经验来看,scrollView无疑是移动开发中很重要的一个组件,比如后面会学到的ListView就是继承自它.那么,在开发中比如:焦点图.引导页等地方都有其的影子,那接下来我们 ...

  5. springboot学习(三)——使用HttpMessageConverter进行http序列化和反序列化

    以下内容,如有问题,烦请指出,谢谢! 对象的序列化/反序列化大家应该都比较熟悉:序列化就是将object转化为可以传输的二进制,反序列化就是将二进制转化为程序内部的对象.序列化/反序列化主要体现在程序 ...

  6. java获取当前文件路径 [转]

    1.如何获得当前文件路径 常用: 字符串类型:System.getProperty("user.dir"); 综合: package com.zcjl.test.base; imp ...

  7. 电脑 HOST 文件

    路径: C:\Windows\System32\drivers\etc\HOSTS

  8. Oracle递归查询与常用分析函数

    最近学习oracle的一些知识,发现自己sql还是很薄弱,需要继续学习,现在总结一下哈. (1)oracle递归查询  start with ... connect by prior ,至于是否向上查 ...

  9. RQN 273 马棚问题 dp

    PID273 / 马棚问题  2016-07-29 18:21:55 运行耗时:1624 ms 运行内存:16248 KB 题目描述 每天,小明和他的马外出,然后他们一边跑一边玩耍.当他们结束的时候, ...

  10. 为什么Kubernetes不使用libnetwork

    Kubernetes 在 1.0 版本之前就已经有了最初的网络插件.与此同时 Docker 也引入了 libnetwork 和 Container Network Model (CNM).现在 Doc ...