Let's Encrypt+certbot+traefik实现网站https

安装traefik

  • 选择版本下载

参考地址

1
$ wget https://github.com/containous/traefik/releases/download/v1.7.9/traefik
  • 添加执行权限与全局访问
1
2
$ chmod 755 traefik
$ mv traefik /usr/local/bin/

简单配置

  • 创建配置文件
1
$ touch traefik.toml
  • 配置信息
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
logLevel = "INFO"

# 入口,支持http,https
defaultEntryPoints = ["http", "https"]

[entryPoints]
[entryPoints.http]
address = ":80"
compress = true
# http重定向https
[entryPoints.http.redirect]
entryPoint = "https"
[entryPoints.https]
address = ":443"
compress = true
#设置https证书位置
[entryPoints.https.tls]
[[entryPoints.https.tls.certificates]]
certFile = "/etc/letsencrypt/live/a.com/fullchain.pem"
keyFile = "/etc/letsencrypt/live/a.com/privkey.pem"
[web]
address = ":8080"
readOnly = true

[file]
# rules
filename = "rules.toml"
watch = true
  • 注意:
  • a.com 为 certbot 生成证书时的第一个-d参数
  • certFile 对应certbot生成的fullchain.pem目录,
  • keyFile 对应certbot生成的privkey.pem目录,

rules.toml 创建与配置

  • 在 traefik.toml 同一目录下创建
1
$ touch rules.toml
  • 简要配置
1
2
3
4
5
6
7
8
9
10
11
[backends]
[backends.backend1]
[backends.backend1.servers.server1]
url = "[url]"

[frontends]
[frontends.frontend1]
passHostHeader = true
backend = "backend1"
[frontends.frontend1.routes.test_1]
rule = "Host: a.com,www.a.com"

运行

1
$ traefik -c traefik.toml &
  • 注:& 为后台运行

关闭

  • 查看端口
1
$ ps -ef | grep traefik
  • 关闭traefik
1
$ kill -9 [端口号]

安装certbot

系统: centos7

参考地址

  • 安装yum-utils
1
2
$ yum -y install yum-utils
$ yum-config-manager --enable rhui-REGION-rhel-server-extras rhui-REGION-rhel-server-optional
  • certbot安装
1
$ sudo yum install certbot
  • 错误解决
1
2
3
4
5
6
7
No module named 'requests.packages.urllib3

# 解决方案
# 安装urllib3
# @parameter python_version: python 版本号

pip install --upgrade --force-reinstall 'requests==[python_version]' urllib3
  • 使用方法(注意: 需要关闭web服务,注意证书生成与方向代理工具的https配置顺序)

1、生成证书

1
$ sudo certbot certonly --standalone -d [域名1(a.com)] -d [域名2(www.a.com)]

生成的文件目录为 /etc/letsencrypt/live/a.com/(最后一个文件名字由第一个 -d 的参数决定)

2、重新生成

1
$ sudo certbot renew

wordpress https访问时http资源无法访问

  • wordpress项目根目录下的wp-config.php中添加以下代码注意填写位置不要为最底部
1
2
3
if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') {
$_SERVER['HTTPS'] = 'on';
}