Nginx配置SSL证书——采用腾讯云SSL证书配置Nginx使用https访问
一、引言
为什么我们要配置这个SSL证书呀?
SSL证书,就是遵守SSL安全套接层协议的服务器数字证书,由浏览器受信任的根证书颁发机构在验证服务器身份后颁发,具有网站身份验证和加密传输等功能。SSL证书并不是什么高深的技术产品,只需要成功申请下发后,安装到网站服务器即可。当你访问一个网站时,如果发现浏览器的地址栏中显示的是“https://”,就说明这个网站已经安装部署了SSL证书。
网站安装SSL证书到底有哪些好处呢?简单整理几条给大家:
好处一:隐私信息加密。对网站传输的数据进行SSL加密,防止被黑客监听、窃取和篡改,有效保证用户的隐私信息。
好处二:提高网站排名。谷歌、百度等主流搜索引擎表示优先收录以HTTPS开头的网站,并赋予网站高权重,有效提高网站关键词在搜索引擎中的排名。
好处三:受浏览器信任。安装由权威证书颁发机构签发的证书,会成为谷歌、火狐等主流浏览器受信任的站点。
好处四:提升企业形象。安装高级SSL证书可以显示单位名称,大大提升企业的形象和可信度。
好处五:防止流量劫持。网站流量劫持现象频繁发生,安装SSL证书,能有效避免流量劫持。
二、准备工作
1、首先得有自己的一台云服务器,需要在后台把443端口开放。
2、购买一个域名(腾讯云、阿里云都行),.com的域名需要备案,其他的不需要备案但是也能访问,可能不稳定。
3、在腾讯云、阿里云申请一个SSL证书,有免费版的,然后下载下来如图。
配置SSL关联到对应域名
一般申请注册阶段就配置好了
下载证书
下载证书.png
三、Nginx配置SSL
3.1将下载的ssl nginx证书上传至云服务器
阿里云申请的ssl:nginx文件如下所示:
1,214292799730473.pem
2,214292799730473.key
腾讯云申请的ssl, nginx文件如下所示:
3.2开始安装配置nginx
一、安装编译工具及库文件
yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel
二、安装 PCRE(让 Nginx 支持 Rewrite 功能)
二、安装 PCRE(让 Nginx 支持 Rewrite 功能)
#下载最新版本的,注意不要用pcre2 wget https://jaist.dl.sourceforge.net/project/pcre/pcre/8.42/pcre-8.42.tar.gz tar -xvf pcre-8.42.tar.gz cd pcre-8.42 #安装编译 ./configure make && make install #查看pcre版本 pcre-config --version
三、安装nginx(源码安装)
#下载 wget https://nginx.org/download/nginx-1.15.9.tar.gz tar -xvf nginx-1.15.9.tar.gz cd nginx-1.15.9 #编译安装 ./configure --prefix=/usr/local/webserver/nginx --with-http_stub_status_module --with-http_ssl_module --with-pcre=/usr/local/src/pcre-8.42 make && make install #查看版本 /usr/local/webserver/nginx/sbin/nginx -v
四、nginx配置
#启动 /usr/local/webserver/nginx/sbin/nginx /usr/local/webserver/nginx/sbin/nginx -s reload # 重新载入配置文件 /usr/local/webserver/nginx/sbin/nginx -s reopen # 重启 Nginx /usr/local/webserver/nginx/sbin/nginx -s stop # 停止 Nginx
配置nginx配置文件(/usr/local/webserver/nginx/conf/nginx.conf)
user root; #user nobody; worker_processes 1; #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #pid logs/nginx.pid; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; #access_log logs/access.log main; sendfile on; #tcp_nopush on; #keepalive_timeout 0; keepalive_timeout 65; #gzip on; server { listen 443 ssl; server_name www.relishfruit.com; ssl_certificate /usr/local/nginx/conf/Nginx/1_www.relishfruit.com_bundle.crt; ssl_certificate_key /usr/local/nginx/conf/Nginx/2_www.relishfruit.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; } server { listen 80; server_name www.relishfruit.com; rewrite ^ https://$server_name$request_uri? permanent; #charset koi8-r; #access_log logs/host.access.log main; location / { root html; index index.html index.htm; } } }
修改项为:
- server_name 设置绑定的域名
- ssl_certificate 证书
- ssl_certificate_key 证书的私钥
- ssl_protocols 使用的协议
- ssl_ciphers 配置加密套件,写法遵循 openssl 标准
http 自动跳转 https (可选)
这时候的网站既可以使用http://
请求,也可以使用https://
请求。
如果想将所有的http请求自动跳转为https请求,在/usr/local/nginx/conf/nginx.conf
添加
rewrite ^(.*) https://$host$1 permanent;
现在重启Nginx,Chrome应该能正常显示Https.如果只想使用Https连接,可以再添加一个server,然后跳转到https
server {
listen 80;
server_name liuzhichao.com www.liuzhichao.com ;
rewrite ^ https://$server_name$request_uri? permanent;
}
重启nginx,测试如下:
注意事项:
1、nginx:[emerg]unknown directive ssl,就是这个错误提示
因为我们配置这个SSL证书需要引用到nginx的中SSL这模块,然而我们一开始编译的Nginx的时候并没有把SSL模块一起编译进去,所以导致这个错误的出现。
步骤一:我们先来到当初下载nginx的包压缩的解压目录,如果你是看小编写的教程安装的,解压目录应该在“/usr/loacl/src/”,绝大多数应该都是在这个目录下的,已经是一种规范了。
重启报错:缺少http_ssl_module模块
这是由于在最开始编译nginx时,没有加入http_ssl_module模块的原因导致的。
解决方案:重新编译一次nginx,并把http_ssl_module模块加上去。
- 如果出现这个问题,一般情况下也可能没有安装openssl和openssl-devel模块。请安装这两个模块:
yum install openssl
yum install openssl-devel
步骤二:来到解压目录下后,按顺序执行一下命令: 命令1、./configure --with-http_ssl_module //重新添加这个ssl模块 注意如果没有出现错误,则直接看命令2即可 执行以上一条命令出现这个错误(./configure:错误:SSL模块需要OpenSSL库。),原因是因为缺少了OpenSSL,那我们再来安装一个即可执行:yum -y install openssl openssl-devel 等待OpenSSL的安装完成后,再执行./configure ,最后在执行” 命令1" 即可。 命令2、执行make命令,但是不要执行make install,因为make是用来编译的,而make install是安装,不然你整个nginx会重新覆盖的。 命令3、在我们执行完做命令后,我们可以查看到在nginx解压目录下,objs文件夹中多了一个nginx的文件,这个就是新版本的程序了。首先我们把之前的nginx先备份一下,
然后把新的程序复制过去覆盖之前的即可。 cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak cp objs/nginx /usr/local/nginx/sbin/nginx 命令4,最后我们来到Nginx安装目录下,来查看是否有安装ssl模块成功。执行./sbin/nginx -V即可看
重新启动nginx则OK了。