Nginx·https协议

CY 2019年03月05日 1,305次浏览

编译https模块

刚才给网站配置了SSL证书,在阿里云平台上免费获得的SSL证书,因为使用的是Nginx,下载后得到了两个文件,*.pem*.key,然后进行了一通配置,配置遇到了很多问题在这里记录一下。

如果Nginx在编译的时候没有加入https模块,需要重新进行编译:

# 重新进行编译设置
./configure --prefix=/usr/local/nginx --with-http_ssl_module
# 编译安装
make && make install

这样Nginx就支持https协议了

配置https协议

然后再配置文件中配置以下内容:

server {
    listen 443 ssl;
    server_name localhost;
    root html;
    index index.html index.htm;
    ssl_certificate   cert/a.pem;
    ssl_certificate_key  cert/a.key;
    ssl_session_timeout 5m;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    location / {
        root html;
        index index.html index.htm;
    }
}

把其中的server_namessl证书的文件地址改一下即可,location看情况也要改一下

如果想要同时支持http和https可以类似于下面的配置:

server {
    listen  80;
    listen  443 ssl;
    # ...
}

配置好https后,网站默认是不会使用https的,这个时候需要强制转为https

默认使用https访问网站

有一个响应头可以做到这个事情,配置如下:

server {
    listen  80;
    listen  443 ssl;
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
    # ...
}

这样网站默认访问就是https

还有一种方法,但是不能使用上面的server块了,需要将80端口和443端口的server块分开

然后在80server块中配置如下内容:

server {
    listen 80;
    server_name localhost;
    # 重定向到https站点
    return 301 https://$server_name$request_uri;
}

这种方式是强制重定向的方式,但是感觉这种方式就是Nginx官方的文章说的那种错误的使用方式