Nginx 部署 https

本文使用腾讯云申请的免费证书

配置443端口

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

server {
    listen 443;
    server_name domain.com; #填写绑定证书的域名
    ssl on;
    ssl_certificate cert/1_www.domain.com_bundle.crt;
    ssl_certificate_key cert/2_www.domain.com.key;
    ssl_session_timeout 5m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;    #按照这个协议配置
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; #按照这个套件配置
    ssl_prefer_server_ciphers on;
    location / {
        root   html; #站点目录
        index  index.html index.htm;
    }
}

证书路径可以用相对路径、绝对路径,路径字符串也可以用单引号来标识 ssl_certificate '/usr/cert/1_www.domain.com_bundle.crt';

配置完成后,先用 ./sbin/nginx –t 来测试下配置是否有误,正确无误的话,重启 Nginx。就可以使 https://domain.com 来访问了。

然而事实总是残酷的

[root@VM_0_9_centos sbin]# ./nginx -t
nginx: [emerg] unknown directive "ssl" in /usr/local/nginx/conf/nginx.conf:65
nginx: configuration file /usr/local/nginx/conf/nginx.conf test failed

出现这个错误说明没有将 ssl 模块编译进 Nginx,在 configure 的时候加上 –with-http_ssl_module 即可

#切换到当前Nginx版本安装包的解压目录
cd /usr/nginx/nginx-1.13.5/
./usr/nginx/nginx-1.13.5/configure --with-http_ssl_module
#切记千万不要make install那样就覆盖安装了
make
#先关闭当前Nginx
#nginx -s stop会检查nginx.conf文件,需要还原修改,或者直接kill进程
#用ps检查一下 ps -ef | grep nginx
./usr/local/nginx/sbin/nginx -s stop
#先备份
cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak
#make之后会在当前目录生成objs目录
cp objs/nginx /usr/local/nginx/sbin/nginx
#重启Nginx
./usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf

现在 https://domain.com 终于可以访问了

注意:腾讯云需要在服务器安全组中打开443端口

Nginx 配置 http 跳转 https

下一步就是 http 到 https 的跳转

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

下面推荐一个配置 http 全部301跳转到 https,并且 www.domain.com 全部301跳转到 domain.com ,加上禁止IP访问

server {
    listen 80 default;
    server_name  _;
    return 404;
}

server {
    listen 80;
    server_name www.domain.com;
    return 301 https://domain.com$request_uri;
}

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

server {
    listen 443 default;
    server_name  _;
    ssl on;
    ssl_certificate cert/1_domain.com_bundle.crt;
    ssl_certificate_key cert/2_domain.com.key;
    return 404;
}

server {
    listen 443;
    server_name www.domain.com;
    ssl on;
    ssl_certificate cert/1_domain.com_bundle.crt;
    ssl_certificate_key cert/2_domain.com.key;
    return 301 https://domain.com$request_uri;
}

server {
    listen 443;
    server_name domain.com; #填写绑定证书的域名
    ssl on;
    ssl_certificate cert/1_www.domain.com_bundle.crt;
    ssl_certificate_key cert/2_www.domain.com.key;
    ssl_session_timeout 5m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;    #按照这个协议配置
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; #按照这个套件配置
    ssl_prefer_server_ciphers on;
    location / {
        root   html; #站点目录
        index  index.html index.htm;
    }
}

参考链接

Nginx如何安装https-ssl证书

nginx 服务器重启命令,关闭

Nginx的启动(start),停止(stop)命令

Nginx配置禁止IP直接HTTP/HTTPS访问

发表评论

发表回复

*

沙发空缺中,还不快抢~