Nginx配置https

今年7月起,Chrome浏览器的地址栏将把所有HTTP标示为不安全网站。HTTPS是HTTP协议的升级版本,更为安全可靠。互联网用户和网站之间的安全连接协议被视为减少用户风险的必要措施,否则用户可能遭受窃听、中间人攻击或数据篡改。因此网站配置HTTPS很有必要,下面针对nginx,谈一下配置HTTPS的步骤。

添加ssl模块

nginx配置https,需要添加ssl模块。

查看ngixn版本极其编译参数

1
/usr/local/webserver/nginx/sbin/nginx -V

原先的config参数

1
configure arguments: --prefix=/usr/local/webserver/nginx --with-http_stub_status_module --with-pcre

如果存在–with-http_ssl_module说明已添加ssl模块。否则在原先参数的基础上添加–with-http_ssl_module

1
./configure --prefix=/usr/local/webserver/nginx --with-http_stub_status_module --with-pcre --with-http_ssl_module

make编译,make后千万别make install,否则就覆盖安装了。make完之后在objs目录下就多了个nginx,这个就是新版本的程序了。

1
make

备份原有的nginx配置文件

1
cp /usr/local/webserver/nginx/sbin/nginx  /usr/local/webserver/nginx/sbin/nginx.bak

将新生成的nginx程序覆盖原有的nginx(这个时候nginx要停止状态)

1
cp objs/nginx /usr/local/webserver/nginx/sbin/nginx

测试新的nginx程序是否正确

1
/usr/local/webserver/nginx/sbin/nginx -t

Nginx 证书部署

  1. 获取证书

    腾讯云或阿里云搜索证书,获取免费证书。下载,将nginx文件夹下的证书上传到服务器。以腾讯云为例,nginx文件夹包括SSL证书文件 1_www.domain.com_bundle.crt 和私钥文件 2_www.domain.com.key。

  2. 证书配置

    将域名 www.domain.com 的证书文件1_www.domain.com_bundle.crt 、私钥文件2_www.domain.com.key保存到同一个目录,例如/usr/local/webserver/nginx/key目录下。
    更新Nginx配置 文件如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    server {
    listen 443 ssl; #指定ssl监听端口
    server_name www.domain.xyz;
    ssl_certificate /usr/local/webserver/nginx/key/1_www.domain.com_bundle.crt; #指定服务器证书路径
    ssl_certificate_key /usr/local/webserver/nginx/key/2_www.domain.com.key; #指定私钥证书路径

    ssl_session_timeout 5m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #指定SSL服务器端支持的协议版本
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; #指定加密算法
    ssl_prefer_server_ciphers on; #在使用SSLv3和TLS协议时指定服务器的加密算法要优先于客户端的加密算法

    location / {
    root html;
    index index.html index.htm;
    }
    }

    查看配置是否正确:

    1
    /usr/local/webserver/nginx/sbin/nginx -t

    正确无误的话,重启nginx:

    1
    /usr/local/webserver/nginx/sbin/nginx -s reload
  3. 使用全站加密,http自动跳转https(可选)

    1
    2
    3
    4
    5
    server {
    listen 80;
    server_name www.domain.com; #你的域名
    rewrite ^(.*) https://$host$1 permanent; #转发http请求到https
    }