Nginx配置安全证书SSL实例
Nginx配置安全证书SSL实例
1: 申请SSL证书
2、下载证书
列表中找到已签发的证书,下载:进入下载页面,找到ngin页签中nginx配置信息,并“下载证书 for Nginx”:
下载的文件有两个:
1,214292799730473.pem
2,214292799730473.key
3、服务器安装,配置nginx
1,nginx的安装目录为:/etc/nginx/。进入目录,增加 cert/ 文件夹,把刚刚下载的两个文件上传到cert/文件夹中。
说明:下面的配置是对443端口和80端口进行监听,443端口要启用ssl。
server {
listen 443;
server_name your.com; // 你的域名
ssl on;
root /var/dest; // 前台文件存放文件夹,可改成别的
index index.html index.htm;// 上面配置的文件夹里面的index.html
ssl_certificate cert/214292799730473.pem;// 改成你的证书的名字
ssl_certificate_key cert/214292799730473.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 / {
index index.html index.htm;
}
}
server {
listen 80;
server_name your.com;// 你的域名
rewrite ^(.*)$ https://your.com:443/$1 permanent;// 把http的域名请求转成https
}
配置完成后,检查一下nginx配置文件是否可用,有successful表示可用。
$ nginx -t // 检查nginx配置文件
配置正确后,重新加载配置文件使配置生效:
nginx -s reload // 使配置生效
至此,nginx的https访问就完成了,并且通过rewrite方式把所有http请求也转成了https请求,更加安全。
4、ngx_http_ssl_module模块相关的配置说明:
ssl_certificate file;指明证书路径
ssl_certificate_key file;证书对应的私钥文件;
ssl_ciphers ciphers;指明由nginx使用的加密算法,可以是OpenSSL库中所支持的各种加密套件;
ssl_protocols [SSLv2][SSLv3][TLSv1.1][TLSv1.2];指明使用的SSL协议版本;默认为后三个;
ssl_session_cahce off|none|[builtin[:size]][shared:name:size];指明ssl会话缓存机制;
builtin:使用openssl内置的ssl会话缓存。各worker私有;
shared:在各worker之间使用一个共享的缓存;
name:独有名称;
size:缓存空间大小
ssl_session_timeout time;ssl会话超时时长;即ssl session cache中的缓存有效时长;
5、问题:缺少ssl_module模块
CentOS下配置Nginx的https时报错:缺少ngx_http_ssl_module
为已经安装好的nginx动态添加新模块
1、首先,找到Nginx安装包的位置。比如,我的是:/usr/local/sr
c/nginx-1.15.1 cd /usr/local/src/nginx-1.15.1
如果忘记安装包放哪里了,可以find命令找一下。
如果还是找不到(比如删除了)。可以查看当前Nginx的版本号,重新下载一个。
【查看Nginx版本命令】
/usr/local/nginx/sbin/ nginx -V (/usr/local/nginx/是你Nginx服务器的实际位置)
2.生成新的Nginx配置。执行
/usr/local/nginx/sbin/nginx -V
查看configure arguments:后边有没有值,如果有,就复制下来。
然后执行
./configure --原来有的模块(如果有的话) --with-http_ssl_module
make
3、关闭现在运行的Nginx服务器。
/usr/local/nginx/sbin/nginx -s stop
由于我的配置文件报错,缺少
nginx: emerg the "ssl" parameter requires ngx_http_ssl_module in /usr/local/nginx/conf/nginx.conf:121
所以无法关闭。于是,我尝试把新的正确的nginx.conf替换出问题的nginx.conf。
再次执行关闭,成功。
4、OK,执行最后的步骤。把编译好的nginx覆盖掉原有的nginx。
cp ./objs/nginx /usr/local/nginx/sbin/
系统会提示是否覆盖,输入y。
我运行时,系统提示Text file busy,执行失败。
没关系!
ps -A
找到所有Nginx的进程。
Kill 1234
再次执行
cp ./objs/nginx /usr/local/nginx/sbin/
没有报错。把正确的nginx.conf文件夹上传。
启动nginx。
./nginx -c /usr/local/nginx/conf/nginx.conf
运行成功!!