主要记录下如何将域名从http升级到https,服务器的系统是Linux
1.购买ssl证书
-
前言:本人服务器和域名都是阿里云买的,所以ssl证书也是直接从阿里云购买,个人开发者免费,每次只能买一年,具体登录阿里云搜索ssl即可购买,购买了以后填写信息完成校验即可
image.png
2.下载证书
-
填完信息提交成功之后,等待个几分钟,看到证书是已签发状态就可以直接点击最右侧的下载啦,选择nginx
的配置
image.png
-
下载下来以后就是一个压缩包,共有一个.pem结尾和一个.key结尾的文件。
3.配置CA证书
-
这里默认你已经安装好了nginx
,接下来就是配置CA证书,首先在nginx/conf目录下,新建cert文件夹,将刚刚下载的两个文件放入其中
-
然后找到nginx/conf
目录下的nginx.conf
文件,找到# HTTPS server
这一行,将下面的serve根据你的实际使用需要进行修改
# 以下属性中以ssl开头的属性代表与证书配置有关,其他属性请根据自己的需要进行配置。
server {
listen 443 ssl; #SSL协议访问端口号为443。此处如未添加ssl,可能会造成Nginx无法启动。
server_name localhost; #将localhost修改为您证书绑定的域名,例如:www.example.com。
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; #站点目录。
index index.html index.htm;
}
}
server {
listen 80;
server_name localhost; #将localhost修改为您证书绑定的域名,例如:www.example.com。
rewrite ^(.*)$ https://$host$1 permanent; #将所有http请求通过rewrite重定向到https。
location / {
index index.html index.htm;
}
}
-
然后保存nginx.conf
的文件配置,nginx -s reload
重启nginx服务配置
4.遇到[emerg] the "ssl" parameter requires ngx_http_ssl_module
的解决办法(主要分为两个,一个nginx/sbin目录为安装好之后的nginx目录下的sbin文件夹内,nginx源码包即nginx-1.9.9文件夹下,当然,每个人的版本可能不一样)
-
但是在重启的时候遇到了一个报错[emerg] the "ssl" parameter requires ngx_http_ssl_module
,查了下原因,其实也挺简单,因为nginx没有安装ssl模块
-
在nginx/sbin目录下运行./nginx -V
,查看到configure arguments
的原有配置为--prefix=/usr/local/nginx
,将你获得的原有配置后面加上--with-http_ssl_module
,即可
-
例如我,切换到源码包的位置,进行添加模块的配置./configure --prefix=/usr/local/nginx --with-http_ssl_module
-
配置完成以后运行make
,不建议make install
覆盖安装
-
然后将原本安装好的nginx进行备份,cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak
-
先将之前写的ssl配置注释,然后跑到nginx/sbin目录下,./nginx -s stop
,先关闭nginx(切记,要先关闭nginx运行再覆盖,不然会提示文件正忙)
-
去源码包的位置,cp ./objs/nginx /usr/local/nginx/sbin/
,将原本的文件进行覆盖,会询问你是否覆盖,输入一个y敲回车即可
-
跑到nginx/sbin目录下,./nginx -V
查看是否已经添加了ssl模块,如果看到configure arguments: --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
即表示配置完成
-
遇到nginx: [error] open() "/usr/local/nginx/logs/nginx.pid" failed
的解决办法
-
在nginx/sbin目录下运行./nginx
,然后发现报错了,报错信息为/usr/local/nginx/logs/nginx.pid
,解决办法是运行代码/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
,然后在运行重启./nginx -s reload
即可,最终完成了https的升级!
网友评论