主要记录下如何将域名从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;
}
}
- 设置http默认跳转https
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的升级!