注册了个小程序,发现后台必须走HTTPS协议,经朋友介绍,可以在 ssl for free 免费申请证书,尝试了下,并且配置到了服务器,但是中间也遇到问题,记录下.

申请证书

SSl For Free

输入域名创建证书

创建证书

证书文件获取

选择手动上传验证文件,获取证书

手动上传验证文件

获取验证文件,并在网站跟目录创建目录mkdir -p .well-known/acme-challenge,把下载的文件上传到该目录

验证文件上传

证书下载

我们的正式下载下来包含三个文件private.key,certificate.crt,ca_bundle.crt.

Nginx 的ssl配置要求证书文件是一个,需要把certificate.crt,ca_bundle.crt合并.我刚开始根据这个教程进行合并处理Nginx ssl,用linux下的cat命令进行合并,一直报错

SSL: error:0906D066:PEM routines:PEM_read_bio:bad end line

合并的有问题,证书文件的尾部分隔符出错.我改成使用notepad++,对两个文件进行合并处理.结果如下图

Nginx 配置

配置参考如下

#
# The default server
#

server {
		listen       443;
		server_name  test.vstary.com;
		index index.php default.html default.htm default.php;
		root         /data/test.vstary.com;
		ssl on;
		ssl_certificate /data/ssl/cert.crt;
		ssl_certificate_key /data/ssl/private.key;
		ssl_session_cache    shared:SSL:1m;
		ssl_session_timeout  5m;

		ssl_ciphers  HIGH:!aNULL:!MD5;
		ssl_prefer_server_ciphers  on;
		# Load configuration files for the default server block.
		include /etc/nginx/default.d/*.conf;

		location / {
				try_files $uri $uri/ /index.php?$query_string;
		}

		error_page 404 /404.html;
				location = /40x.html {
		}

		error_page 500 502 503 504 /50x.html;
				location = /50x.html {
		}
		location ~ \.php$ {
				fastcgi_pass   127.0.0.1:9000;
				fastcgi_index  index.php;
				fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
				include        fastcgi_params;
		 }
}

注意,一定要开放443端口

其它

因为浏览器默认是走http协议,所以建议在写个配置文件,重定向到当前https协议的web.

配置如下

server{
    listen 80;
    server_name  test.vstary.com;
    rewrite ^/(.*) https://test.vstary.com/$1 permanent;
}

重启nginx ,就可以了.了.