当前位置: 首页 > 后端技术 > PHP

Nginx部署HTTPS服务流程及异常处理实践

时间:2023-03-29 23:30:39 PHP

一、背景笔者团队需要开发iosAPP,apptstore应用商店审核要求应用使用https,因此需要配置https证书。笔者将配置过程和遇到的一些问题记录下来,方便自己和读者后续参考。2.操作概述申请证书和认证证书下载和配置问题分析总结3.申请证书和认证要搭建https服务,首先需要有一个SSL证书。证书一般都是第三方申请的,阿里云的安全服务里面有SSL证书这一项,可以在里面申请免费的证书;您也可以在自己的计算机上生成它。虽然也可以完成加密,但是浏览器不承认,所以最好去第三方申请3.1的证书。阿里云免费提供证书,不需要人工审核。是一个非常好的测试选择。申请地址为以下网址。https://common-buy.aliyun.com/?spm=5176.2020520163.cas.1.1aa12b7aWWn20O&commodityCode=cas#/buy免费证书深藏不露。如果要申请免费证书,需要选择域名->Symantec->免费类型,这里需要读者注意,参考下图。选好后,再想下一步,就可以完成购买了。免费购买证书后,作者需要返回证书控制台。有一个链接地址可以补全控制台中的信息。需要通过这个地址补充申请人的联系方式。参考下图3.2域名验证完成个人信息后,笔者还需要验证当前域名是否属于阿里云。有两种验证方法。第一种是通过dns解析验证,第二种是通过上传验证文件验证。笔者这里使用验证文件认证。首先,需要下载文件。下载验证文件后,作者需要将文件放到服务器中。这里复制命令scp~/Downloads/fileauth.txttangqingsong@192.168。43.34:~/将验证文件复制到服务器后,作者还需要将验证文件放到站点相应目录下。参考命令如下:mkdir-p/website/.well-known/pki-validation&&cpfileauth.txt/website/.well-known/pki-validation/现在笔者想验证文件的位置是否正确是正确的。笔者通过人工验证和阿里云验证两种方式进行了验证。3.2.1人工验证人工验证的目的是首先保证文件所在位置的正确性。可以判断该站点的url是否访问成功。例如,作者可以访问以下网址。值,表示配置成功。http://www.songboy.net/.well-known/pki-validation/fileauth.txt3.2.2通过阿里云验证。确保文件放置正确后,关键是允许阿里云访问它。阿里云这里提供了检查配置的功能。在下载验证文件的页面上,有一个检查配置的链接。点击之后就可以查看了,如下图。点击检查配置后,如果阿里云可以正常访问,左侧会有提示,此时可以返回证书列表,可以在列表中看到当前状态为审核中,如图下图,因为审核不需要人工干预,所以很快就会出证,笔者出证的时间大概是2分钟左右。4.证书下载及配置4.1证书下载证书签发后,您可以在列表中的状态栏看到已经签发,同时您可以在操作栏下载并查看详情。如下图点击下载后,会跳转到下载详情页面,在下载详情页面可以选择你对应的web服务。例如,我使用nginx。选择nginx后,下面会有很贴心的提示如何配置。现在我下载nginx配置文件。下载配置文件后,我需要解压它。解压后可以看到里面有两个证书文件。如下图,我需要将这两个证书文件复制到服务器上。首先,我需要在服务器上创建相应的文件。文件夹,参考命令如下cd/usr/local/nginx/conf/&&mkdircert#该命令在服务器上执行服务器创建对应文件夹后,执行命令将证书文件复制到服务器,参考命令如下:scp~/Downloads/214905423420461/*tangqingsong@192.168.43.34:/usr/local/nginx/conf/cert4.2证书配置复制证书后,可以更改nginx配置文件,使用vim命令编辑nginx配置文件。参考命令如下:vim/usr/local/nginx/conf/nginx.conf在vim界面复制之前的http配置部分,复制后修改监听端口(listen)为443,并在其后添加ssl信息,参考配置如下:listen443;SSL开启;ssl_certificate证书/214905423420461.pem;ssl_certificate_key证书/214905423420461.key;ssl_session_timeout5m;MD5:!ADH:!RC4;ssl_protocolsTLSv1TLSv1.1TLSv1.2;ssl_prefer_server_cipherson;4.3重启Nginx并修改配置文件后,需要测试nginx配置文件是否正确。参考命令如下:nginx-t如果nginx相关信息没有报错,基本配置没有问题,下面是我的nginx返回结果:nginx:配置文件/usr/local/etc/nginx/nginx.conf语法为oknginx:配置文件e/usr/local/etc/nginx/nginx.conf测试成功nginx配置没有问题后,需要重启nginx才能生效。参考命令如下nginx-sreload4.4查看效果。现在所有需要完成的工作都完成了,笔者可以通过浏览器访问,可以正常访问。打开以下URLhttps://www.xxx.com。浏览器的地址栏将显示如下图所示。如果您看到浏览器,它会显示安全性,并且显示为绿色,这意味着您已完成。五、问题分析与总结到目前为止,https虽然已经部署成功,但是还是有很多附带的问题。以下是笔者在后续中遇到的一些问题及解决方法。5.1重定向405错误部署https后,作者急于将http全部重定向到https。这时,下面的代码返回301https://$server_name$request_uri;这段代码可能会添加到nginx配置文件中,其实是有缺陷的。它只能帮你重定向get请求。如果客户端用post请求,经过301重定向后会变成get请求,最终会导致服务端返回405,除了405问题之外,还有一个隐患。301重定向是永久重定向。部署https的时候很容易有坑。如果使用永久重定向,如果服务器出现问题需要回滚,即使服务器回滚了,浏览器还是会跳转。对https,因为有重定向缓存,不建议使用301重定向,应该使用302;但是302不好处理post请求,所以还是用307。配置代码如下:return307https://$server_name$request_uri;5.2跨域问题启用https证书后,你会发现很多浏览器都会出现跨域问题。下面有两种解决方法。5.2.1自适应协议允许在http域下加载https资源浏览器,但是浏览器会屏蔽https加载http资源,所以首页地址最好不要指定协议,这样就可以了”http://”或“https://”使用自适应协议替换“//”,这样浏览器会自动调用对应域的资源,不会出现https站点无法加载http的问题资源,但https请求http。跨域问题。5.2.2范围设置http和https不在同一个范围内,所以一些ajax请求的时候,会出现跨域问题。这时候可以修改nginx的配置文件,扩大它的资源范围,把下面的代码放在http的配置项如下:需要注意的是,如果网站的资源可以被任意调用范围,会有安全隐患,所以最好指定几个范围,而不是全部释放。add_header'Access-Control-Allow-Origin''*';add_header'Access-Control-Allow-Credentials''true';add_header'Access-Control-Allow-Headers''Origin,X-Requested-With,Content-Type,Accept,Connection,User-Agent,Cookie,Content-Type,Authorization';add_header'Access-Control-Allow-Methods''PUT,POST,GET,DELETE,OPTIONS';5.3同时支持,批量部署https说到证书,你会遇到很多小问题。一开始笔者打算一步解决,后来发现小问题不断,比如之前的跨域问题,301重定向问题;这些问题看似小,但是小问题是有很多的,所以我建议大家在用https上线的时候,最好分批上线,以满足现在的需求。不要一次切换所有http。需要注意https被阻止加载http资源的问题。作者:唐青松微信:songboy8888

猜你喜欢