1、去阿里云生成免费的ssl证书
https://yundunnext.console.aliyun.com/?spm=5176.2020520101.aliyun_sidebar.10.63dc4df5pBPmsw&p=cas#/overview/cn-hangzhou
2、下载生成的证书包含两个文件.pem和.key,但在nginx配置中需要用到.crt文件。因此要将证书上传腾讯云转换为.crt后缀:
a、打开腾讯云ssl:https://console.cloud.tencent.com/ssl
b、将.pem文件中的内容复制到证书中
c、将.key证书中的内容复制到私钥中。
d、最后点击上传,上传完成后,可以重新在腾讯云下载证书,进入Nginx证书目录查看,即为crt文件的证书
注:生成的.crt证书内容其实跟.pem内容是一样的。所以应该可以直接改后缀名就可以(已验证)。
3、将生成的.crt文件和.key文件上传到自己服务器,通常保存在nginx下的ssl文件夹,在nginx配置ssl证书时使用。
4、示例一,在vhost下修改项目配置文件,与现有80端口的server配置并列写入(即有80端口和443端口两个server配置),其中443配置如下:
server { listen 443 ssl; server_name aaa.xxx.com; ssl on; #设置为on启用SSL功能。 index index.html index.htm index.php; root /home/wwwroot/ar/public; include /home/wwwroot/nginx_rewrite.conf; #error_page 404 /404.html; ssl_certificate /usr/local/nginx/ssl/3142918_ar.wanaot.com.crt; #将domain name.pem替换成您证书的文件名。 ssl_certificate_key /usr/local/nginx/ssl/3142918_ar.wanaot.com.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 ~ [^/]\.php(/|$) { # comment try_files $uri =404; to enable pathinfo try_files $uri =404; fastcgi_pass unix:/tmp/php-cgi.sock; fastcgi_index index.php; include fastcgi.conf; #include pathinfo.conf; } location /nginx_status { stub_status on; access_log off; } location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ { expires 30d; } location ~ .*\.(js|css)?$ { expires 12h; } access_log /home/wwwlogs/access.log; }
4、示例二
server { listen 443 ssl; server_name aaa.xxx.com; ssl on; #设置为on启用SSL功能。 index index.html index.htm index.php; root /home/wwwroot/zhimeikm; include /home/wwwroot/nginx_rewrite.conf; #error_page 404 /404.html; ssl_certificate /usr/local/nginx/ssl/4820241_zhimeikm.com.crt; #将domain name.pem替换成您证书的文件名。 ssl_certificate_key /usr/local/nginx/ssl/4820241_zhimeikm.com.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 ~ [^/]\.php(/|$) { # comment try_files $uri =404; to enable pathinfo try_files $uri =404; fastcgi_pass unix:/tmp/php-cgi.sock; fastcgi_index index.php; include fastcgi.conf; #include pathinfo.conf; } location /nginx_status { stub_status on; access_log off; } location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ { expires 30d; } location ~ .*\.(js|css)?$ { expires 12h; } access_log /home/wwwlogs/access.log; }
5、http重定向https在80端口的配置文件中加入:
rewrite ^(.*)$ https://$host$1 permanent;
配置如下:
server
{
listen 80 ;
server_name aaa.xxx.com
index index.html index.htm index.php;
root /home/wwwroot/website;
include /home/wwwroot/nginx_rewrite.conf;
rewrite ^(.*)$ https://$host$1 permanent; // 加入的跳转文件
#error_page 404 /404.html;
#其他的配置
}
6、重启nginx
期间若报以下错误
Starting nginx... nginx: [warn] the "ssl" directive is deprecated, use the "listen ... ssl" directive instead in /usr/local/nginx/conf/vhost/ar.zhimeikm.conf:43
则直接注释掉 ssl on; 这句即可
总结:
1-申请证书(如果使用的是云主机,可在阿里云或者腾讯云申请较为方便)。腾讯云颁发证书的速度更快。
2-将证书上传至Nginx所在服务器
3-配置Nginx SSL