finch最近正在研究一个新的网站系统,闲的没事想搞搞ssl,结果搞了两天,遇到很多问题,现在记录并分享一下经验。

环境之前搭建好了是Ubuntu14+nginx+php5+mysql

现在开始使用let's encrypt官方给出的安装脚本安装即可:

sudo apt-get update
sudo add-apt-repository ppa:certbot/certbot
sudo apt-get update
sudo apt-get install python-certbot-nginx

如果提示找不到add-apt-repository那么安装下边的这个就好了:

sudo apt-get install python-software-properties
sudo apt-get install software-properties-common

如果没有Python的话自己安装就好了这里就不说了。

安装let's encrypt证书有两种方法,可以自行百度。这里用的其中一种,就是先要停止80端口的程序,也就是nginx:

service nginx stop

生成单域名证书:

certbot certonly --standalone --email your@email.com -d yourdomain.com

上边的_your@email.com和yourdomain.com记得写成你自己的_,email地址可以用于以后找回丢失的证书。

接下来会提示是否接受许可条款,是否安装之类的话,如果之前安装过证书还会提示你是保留还是重新生成。看情况自己选择就行了。

出现这段文字就是证书生成成功了。因为let's encrypt的免费证书有90的期限,过了期限就要自己续期(比如上边显示我的证书会在2018-05-10到期)。上边的红色部分就是之前你写的域名,这两个路径一定要注意,这是你的两个证书的目录,下边配置nginx的时候要用到。

目录“/etc/letsencrypt/live/你刚才写的域名/”下的几个文件:

cert.pem  - Apache服务器端证书

chain.pem  - Apache根证书和中继证书

fullchain.pem  - Nginx所需要ssl_certificate文件

privkey.pem - 安全证书KEY文件

下边就来配置nginx:

首先解释一下nginx的几个文件夹的区别和作用:

nginx.conf:是nginx的配置文件,这里我们不需要改这个。

sites-available:是虚拟机vhost的配置文件夹。

sites-enabled:是上边sites-available文件夹内文件的软连接文件夹。至于为什么nginx这么玩自行百度吧。

其实看看nginx.conf中就会发现它并没有引用sites-available,而是直接引用的sites-enabled。

下边我们需要在sites-available文件夹里边创建ssl.conf来保存我们的ssl配置:

sudo vim /etc/nginx/sites-available/ssl.conf

(提示没有vim的自行安装即可)

#把下边的内容复制进去,然后按照提示修改
server {
# SSL configuration listen 443 ssl;
listen [::]:443 ssl;
ssl on; ssl_certificate /etc/letsencrypt/live/之前你填写的域名/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/之前你填写的域名/privkey.pem;
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; root /var/www/html; #这里要改成你自己的nginx网站的root目录 # Add index.php to the list if you are using PHP
index index.php index.html index.htm index.nginx-debian.html; #这里加上index.php就行了
}

然后现在要在sites-enabled文件夹中建立这个文件的软连接:

sudo ln -s /etc/nginx/sites-available/ssl.conf /etc/nginx/sites-enabled/ssl.conf

然后重启或者重新加载nginx配置文件

service nginx restart

如果想让网站默认只能访问https://,把80的链接强制跳转到443端口,可以在sites-available下边再写一个文件:

server {
listen 80 default_server;
listen [::]:80 default_server; server_name 刚才你写的域名;
rewrite ^(.*) https://$server_name$1 permanent; }

然后像刚才那样再建立一个软连接,然后重启nginx即可。

如果上边的rewrite不成功的话,可以在原来的80的配置文件里直接写一个301重定向就可以了。挺简单的。

#这是原来的80端口的配置文件
server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on; root /home/judge/src/web;
index index.php index.html index.htm; location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ =404;
# Uncomment to enable naxsi on this location
# include /etc/nginx/naxsi.rules
} # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
# NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini # With php5-cgi alone:
fastcgi_pass 127.0.0.1:9000;
# With php5-fpm:
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
} #在下边这里写一个301重定向就可以了。因为有的人说let's encrypt证书的认证可能需要一个80端口,所以不能全部转换为443端口
location / {
return 301 https://$server_name$request_uri;
}
}

然后reload nginx就可以了。以后输入http的网址会直接跳转到https的网址了。

其实到这里就结束了。

但是我就遇到了问题:

问题1:输入https://的网址会直接下载首页php文件。直接访问http://就能正常访问。

解决:在刚才ssl.conf里边加上这段。这个问题是因为nginx默认没有解析.php文件而是直接打开了。(查看答案来源

location ~ .*\.php$ {
fastcgi_pass 127.0.0.1:9000;
}

问题2:输入了上边的话,没有下载首页,可是直接显示502错误。

解决:把上边的话改成下边的就好了。上边的的 fastcgi_pass 变量应该是错的,适用于 PHP 5.3 及以下,在 PHP 5.4 之后,php5-fpm 并不是监听 9000 端口(答案来源和具体解释

location ~ \.php$ {
# fastcgi_pass 127.0.0.1:9000;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}

这下就好了。

由于我的这个网站系统里边有点小问题,所以暂时不显示绿色的https。后边不想搞了。

其他的页面访问时正常的绿色:

欢呼三声:喵!喵!喵!

本文参考的网络资源:

https://www.cnblogs.com/SzeCheng/p/8075799.html

http://www.linuxidc.com/Linux/2017-02/140111.htm

http://www.cnblogs.com/taosim/articles/3291638.html

https://zhidao.baidu.com/question/581467526.html

非常感谢上面的大佬和前辈!

使用let's encrypt为你的Ubuntu14+nginx网站保驾护航!的更多相关文章

  1. 使用免费的Let's Encrypt通配符证书 升级我们的网站

    Let's Encrypt通配符证书的官方启用日期:2018年3月13日 也就是说,2018年3月13日之后,我们就可以使用Let's Encrypt通配符证书了,当然是免费的. Let's Encr ...

  2. Let's Encrypt泛域名使用和Nginx配置拆分

    上一期写了 使用Let's Encrypt实现网站https化 ,随着二级域名的增多,每个二级域名需要一张 SSL 证书,这可太不优雅了,泛域名表示我可以更优雅. 作者:IT王小二 博客:https: ...

  3. 免费SSL证书 之Let’s Encrypt申请与部署(Windows Nginx)

    我着着皇帝的新衣,但是你看不见    有一颗愿意等待的心,说明你对未来充满希望.有一颗充满希望的心,那么等待又算什么.人就是在等待与希望中度过,我们永远要对未来充满信心! 读在最前面: 1.本文案例为 ...

  4. ubuntu14 + nginx + php

    ubuntu14 1.安装nginx sudo apt-get install nginx 安装之后的文件结构大致为: * 所有的配置文件都在/etc/nginx下,并且每个虚拟主机已经安排在了/et ...

  5. 申请 Let’s Encrypt 泛域名证书 及 Nginx/Apache 证书配置

    什么是 Let’s Encrypt? 部署 HTTPS 网站的时候需要证书,证书由 CA (Certificate Authority )机构签发,大部分传统 CA 机构签发证书是需要收费的,这不利于 ...

  6. Python3 + django2.0 + apache2 + ubuntu14部署网站上线

    自己尝试在本地搭建了 Django 项目后,想部署到自己云服务器上,经常多次尝试和多次踩坑(捂脸),总结如下: 环境:ubuntu14, django2.0, apache2. 1.首先安装需要的库包 ...

  7. 快速签发 Let's Encrypt 证书指南

    本文仅记录给自己的网站添加"小绿锁"的动手操作过程,不涉及 HTTPS 工作原理等内容的讲解,感兴趣的同学可以参考篇尾的文章自行了解. 简单了解下我的实验环境: 云服务器:Cent ...

  8. 获取Let`s Encrypt证书的三种方式

    1,acme.sh 方式 1)获取acme脚本 curl https://get.acme.sh | sh 2)开始获取证书 acme.sh强大之处在于,可以自动配置DNS,不用去域名后台操作解析记录 ...

  9. nginx安装Lets Encrypt SSL免费HTTPS加密证书

    Linux Nginx网站:Certbot安装配置Lets Encrypt SSL免费HTTPS加密证书 原文地址:https://renwole.com/archives/157 实验环境:Cent ...

随机推荐

  1. jq操作属性,元素,样式,事件

    操作属性: 单个 $('选择器').attr('属性名','属性值'); 多个 $('选择器').attr({'属性名':'属性值','':''}); eg: $('#a1').attr('flag' ...

  2. Java8新特性 利用流和Lambda表达式对List集合进行处理

    Lambda表达式处理List 最近在做项目的过程中经常会接触到 lambda 表达式,随后发现它基本上可以替代所有 for 循环,包括增强for循环.也就是我认为,绝大部分的for循环都可以用 la ...

  3. 关于github里readme编辑的方法

    实验室的老师昨天改完论文发我后,说按照例子改.于是才发现github里readme编辑满满的极客思维. 看了一下csdn给的教程 https://blog.csdn.net/Kaitiren/arti ...

  4. 从 MVC 到微服务,技术演变的必经之路

    架构模式演进 CGI 模式 图 1 CGI 出现于 1993 年,图 1 是 CGI 模式比较简单的结构图. MVC 模式 开源电商软件等都是采用 MVC 模式,MVC 模式是做软件开发必学和必经历的 ...

  5. 压缩图片C#算法

    转载自 http://www.open-open.com/lib/view/open1391348644910.html using System.IO; using System.Drawing; ...

  6. 4月17日 (PS:由于时间问题,现在才发,望老师见谅)疯狂猜成语-----第三次站立会议 参会人员:杨霏,袁雪,胡潇丹,郭林林,尹亚男,赵静娜

    疯狂猜成语-----第三次站立会议 参会人员:杨霏,袁雪,胡潇丹,郭林林,尹亚男,赵静娜 会议内容: 组员依次汇报自己的工作进度,并且提出自己在进行任务的过程中遇到的问题,是否解决以及解决办法. 以下 ...

  7. 利用SignalR来同步更新Winfrom

    之前写了个用Socket来更新多个Winfrom的试例,这两天看了下SignalR,也用这个来试一下 SignalR 地址:https://www.asp.net/signalr 我这个也是基于 ht ...

  8. nginx 子进程 woker process 启动失败的问题

    问题: 重启nginx服务,worker process 子进程启动失败,启动的都是master进程: 负载急速升高(平常都是4-5),占用CPU资源多的前十进程都是nginx : nginx 错误日 ...

  9. HDU-1052 Tian Ji -- The Horse Racing 贪心 考虑特殊位置(首尾元素)的讨论

    题目链接:https://cn.vjudge.net/problem/HDU-1052 题意 田忌赛马问题扩展版 给n匹马,马的能力可以相同 问得分最大多少 思路 贪心做得还是太少,一开始一点思虑都没 ...

  10. windows下命令行复制

    在CMD命令提示符窗口中点击鼠标右键,选择“标记”选项,然后按住鼠标左键不动,拖动鼠标标记想要复制的内容.标记完成以后请按键盘上的“回车”键