本博客服务是搭在腾讯云服务器上的,所以从腾讯云这边申请的免费SSL,下面将详细描述配置SSL的过程。
本文将以 www.domain.com 域名为例, 将证书下载下来,放到nginx目录下的conf文件夹,本文将放到conf下的ssl文件夹,详细配置如下:
# 单域名SSL证书配置
```nginx
server {
listen 80;
#被重写的域名,要保证优先匹配到,如果已经被其他的先匹配到将不会走此逻辑,也就不会被重写到https
server_name www.domain.com;
#把http的域名请求转成https
rewrite ^(.*)$ https://$host$1 permanent;
}
upstream blog_server{
server localhost:8080;
}
server {
#SSL 访问端口号为 443
listen 443 ssl;
#填写绑定证书的域名
server_name www.domain.com;
#启用 SSL 功能
ssl on;
#证书文件名称 填写绝对路径
ssl_certificate /usr/local/nginx/conf/ssl/1_www.domain.com_bundle.crt;
#私钥文件名称 填写绝对路径
ssl_certificate_key /usr/local/nginx/conf/ssl/2_www.domain.com.key;
ssl_session_timeout 5m;
#请按照以下协议配置
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
#请按照以下套件配置,配置加密套件,写法遵循 openssl 标准。
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
location / {
# 具体的服务地址,本文使用upstream
proxy_pass http://blog_server;
}
}
```
如果有多个域名要配置,请参照下面配置,没有请跳过
# 多域名SSL证书配置
```nginx
# 增加blog.domain.com
server {
listen 80;
server_name www.domain.com blog.domain.com;
rewrite ^(.*)$ https://$host$1 permanent;
}
upstream blog_server{
server localhost:8080;
}
server {
listen 443 ssl;
server_name www.domain.com;
ssl on;
#证书文件名称 填写绝对路径
ssl_certificate /usr/local/nginx/conf/ssl_www/1_www.domain.com_bundle.crt;
#私钥文件名称 填写绝对路径
ssl_certificate_key /usr/local/nginx/conf/ssl_www/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 / {
proxy_pass http://blog_server;
}
}
# 增加blog.domain.com域名
server {
listen 443 ssl;
server_name blog.domain.com;
ssl on;
ssl_certificate /usr/local/nginx/conf/ssl_blog/1_blog.domain.com_bundle.crt;
ssl_certificate_key /usr/local/nginx/conf/ssl_blog/2_blog.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 / {
proxy_pass http://blog_server;
}
}
```
以上我们nginx的配置文件已经配置完成了,我们nginx -t 检查一下配置文件是否正确,果然不会这么顺利,意料之中的报错了
# 处理报错
```log
[emerg] the "ssl" parameter requires ngx_http_ssl_module in /usr/local/nginx/conf/nginx.conf:xxx
```
这个错误是缺少了ssl模块,我们只需要添加上即可,如下操作
```nginx
1. 安装OpenSSL
yum -y install openssl openssl-devel
2. 在nginx安装目录 下执行
./configure --with-http_ssl_module
3. 运行命令 make 一定不要使用make install这样会覆盖安装
4. 然后备份原有已安装好的nginx
cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak
5. 将刚刚编译好的nginx覆盖掉原有的nginx
cp ./objs/nginx /usr/local/nginx/sbin/
6. 通过命令查看是否已经加入成功
/usr/local/nginx/sbin/nginx -V
提示包含 configure arguments: --with-http_ssl_module说明没有问题
```
接下我们再执行nginx -t 出现如下日志则表示到目前为止我们的操作是正确的:
```log
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
```
接下来执行nginx -s reload
# 测试
1. 访问 https://www.domain.com 成功
2. 访问 http://www.domain.com 跳转到 https://www.domain.com 成功

nginx配置ssl证书