目前,咱们经常使用的网站,都已升级到https访问,并且不少的专家也建议实施全站https,下面记录了我在升级https过程当中遇到的几个坑,但愿能对后来者有所帮助。php
先展现效果图 html
要实现https访问网站,须要理清思路。nginx
1. 申请网站ssl安全证书: 2. 验证域名全部权api
验证方式通常分为:DNS验证和文件验证,大多数人可能使用的DNS验证,由于我没有备案域名,因此只能采用文件验证。浏览器
3. 下载证书和部署安全
将证书上传到服务器,并在Nginx服务器中添加https访问的配置项,基本就能够访问了,下面来讲说具体的过程。bash
大多数人都是经过阿里云或者是腾讯云来申请ssl安全证书的,我本身的服务器也是腾讯云,由于本身没有备案,因此使用FreeSSL。服务器
输入本身想要配置ssl的域名,并输入邮箱点击建立便可。网站
填坑:ui
因为本身没有备案域名,使用别人分配的二级域名,所以须要选择文件验证,而上面的默认是使用DNS验证,因此出现了错误。
点击建立以后,会在下面展现文件验证须要的文件、文件夹和文件内容,并在服务器上域名对应的目录下,建立如图所示的文件夹和文件,并将内容写入到文件中,可是会发现访问域名下的这个文件的时候出现下面的错误。
填坑:访问域名时出现403
由于服务器访问时出现了403,因此须要查看log错误日志,这个文件是在/var/log/nginx/error.log,查看错误日志,显示如图:
缘由是:当前登陆的是root用户,建立文件和文件夹的时候,默认用户和用户组是root,而在Nginx的服务器配置中,默认的访问用户是:nginx,因此才会出现403错误,所以须要将建立的文件和文件夹的用户和用户组修改成nginx,使用的命令以下:
chown -R nginx:nginx api
复制代码
如今访问网站,正常显示内容了,以下图:
如今能够访问域名了,所以须要在freessl网站验证,能够先点检测,而后再验证。 验证成功以后,能够点击下载证书,而后将证书上传到服务器,或者是在服务器中建立对应的文件,而后将内容粘贴过去也行。证书以下:
如今已经将证书上传到服务器,接着是配置ssl。 在配置ssl以前,咱们能够建立一个文件夹,专门存储ssl的证书,这样全部的证书都是存放在一块儿,便于管理。 配置Nginx,打开当前域名对应的Nginx配置,修改下面的几个配置项:
1. 修改监听端口号,由原来的80改成443
listen 443; #将原来的80改为443
2. 添加ssl的证书地址和密钥地址
ssl on; #设置开启https访问
ssl_certificate /home/Fly/keys/api.crt; #配置证书位置
ssl_certificate_key /home/Fly/keys/api-private.key; #配置密钥位置
复制代码
注意:在配置ssl时,每一个配置项结束以后,须要加上分号,不然重启Nginx会报错
完整的Nginx配置以下:
server {
listen 80;
server_name ***.com;
#charset koi8-r;
#access_log /var/log/nginx/host.access.log main;
set $root /home/wwwroot/api;
ssl on;
ssl_certificate /home/Fly/keys/api.crt;
ssl_certificate_key /home/Fly/keys/api-private.key;
location / {
root $root;
index index.html index.htm index.php;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $root$fastcgi_script_name;
include fastcgi_params;
}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
复制代码
配置完毕以后,重启Nginx服务器,命令:
service nginx restart
复制代码
如今可使用https进行访问,显示如图:
目前咱们在浏览器中直接输入域名的话,默认是http请求,它就会请求到下面的页面。
因此须要在配置文件中增长一个server,使用rewrite,将全部的http请求重定向到https,配置以下:
server {
listen 80;
server_name xxx.com;
rewrite ^(.*) https://$host$1 permanent; #请求重定向到https
}
复制代码
重启Nginx服务器,如今访问时,全部的请求都会转到https。
经过这次的操做,明白了Nginx的基本配置和具体的配置项的含义,下次出现问题就不会摸不着头脑了,固然还有不足之处:目前证书只能使用1年,一年以后须要从新申请证书,比较麻烦,后面研究一下,如何在证书快到期以后,自动从新申请并配置,不须要手动操做。