服务器购买了3年,其中2020年基本没有去管他,最近https证书过期了,重新申请了证书,固做此记录:
配置https
使用阿里云免费提供的赛门铁克ssl证书,服务器类型:nginx
在aliyun搜索ssl,申请证书,一般第二天即可使用。
证书文件
下载的Nginx证书压缩文件解压后包含:
- .pem:证书文件。PEM文件的扩展名为CRT格式。
- .key:证书的密钥文件。申请证书时如果未选择自动创建CRS,则下载的证书文件压缩包中不会包含.key文件,需要您将自己手动创建的私钥文件拷贝到cert目录下。
上传到nginx的安装目录
[localhost nginx]# cd /usr/local/nginx/conf/
[localhost]# ls
cert
[localhost]# cd cert/
3147716_xxxx.key 3147716_xxxx.pem
修改配置文件
打开Nginx安装目录/usr/local/conf/nginx.conf文件并找到以下属性:
# HTTPS server
server {
listen 443;
server_name localhost;
ssl on;
ssl_certificate cert.pem;
ssl_certificate_key cert.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
ssl_prefer_server_ciphers on;
location / {
....
}
按照下文中注释内容修改nginx.conf文件:
# 以下属性中以ssl开头的属性代表与证书配置有关,其他属性请根据自己的需要进行配置。
server {
listen 443;
server_name localhost; # localhost修改为您证书绑定的域名。
ssl on; #设置为on启用SSL功能。
root html;
index index.html index.htm;
ssl_certificate cert/domain name.pem; #将domain name.pem替换成您证书的文件名。
ssl_certificate_key cert/domain name.key; #将domain name.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; #站点目录。跟80端口的server保持一致!!!
index index.html index.htm;
}
}
设置HTTP请求自动跳转HTTPS
设置HTTP请求自动跳转HTTPS。在需要跳转的HTTP站点下添加以下rewrite语句,实现HTTP访问自动跳转到HTTPS页面。
server {
listen 80;
server_name localhost;
rewrite ^(.*)$ https://$host$1 permanent;
....
}
重启
保存nginx.conf文件后退出,重启Nginx服务器。
可能出现问题
nginx: [emerg] unknown directive "ssl" in /usr/local/nginx/conf/nginx.conf:104
因为我们配置这个SSL证书需要引用到nginx的中SSL这模块,然而我们一开始编译的Nginx的时候并没有把SSL模块一起编译进去,所以导致这个错误的出现。
解决方案
// 来到nginx的包压缩的解压目录,我这里是nginx-1.13.7
cd /usr/local/nginx/nginx-1.13.7
//重新添加这个ssl模块
./configure --with-http_ssl_module
// 如出错
yum -y install openssl openssl-devel
// 执行make命令,但是不要执行make install
make
可以查看到在nginx解压目录下,objs文件夹中多了一个nginx的文件,这个就是新版本的程序了。首先我们把之前的nginx先备份一下,然后把新的程序复制过去覆盖之前的即可。
cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak
cd /usr/local/nginx/nginx-1.13.7
cp objs/nginx /usr/local/nginx/sbin/nginx
查看是否有安装ssl模块成功
[localhost]# cd /usr/local/nginx/
[localhost nginx]# ./sbin/nginx -V
nginx version: nginx/1.13.7
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-39) (GCC)
built with OpenSSL 1.0.2k-fips 26 Jan 2017
TLS SNI support enabled
configure arguments: --with-http_ssl_module
最后如果出现如上,则SSL模块添加到Nginx的编译好了,这次重新启动则OK
[localhost]# cd /usr/local/nginx/sbin/
[localhost nginx]# ./nginx -s reload
如果重启出现
[localhost nginx]# ./nginx -s reload
nginx: [error] open() "/usr/local/Nginx/logs/Nginx.pid" failed(2:No such file or directory)
//解决
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
在阿里云后台开启443端口
切记这个,(一)里面有说明怎么开启操作步骤。
测试
浏览器访问helijun.com.cn 可以看到已经是https了,大功告成!
安装node
// 执行命令
curl -sL https://rpm.nodesource.com/setup_8.x | bash -
sudo yum install -y nodejs
node -v