双十一买了几个域名和一台 VPS ( Ubuntu 的)的主机,打算把域名都放在 VPS 上,建立好 Nginx 的,Apache 和 LE 证书。 看了一下相关教程都是比较复杂的,自已对于 Linux 的不熟悉,因为抱持着 “是只做一次的事情” 的心态,于是不想折腾和学习, 想要做一个伸手党...相信各位前辈也有相关经验,集成了一些简便快捷的方法,在这虚心学习。
这个时候前辈可能会说教程得到知识也不比在这里得到的差,甚至给你的也是一些教程。所以这里先说一下,教程可能是给特定人群的,可能会添加一些奇怪的东西,教程可能不是最新的,会导致一些意外问题......但是前辈给出的方法是经验的精华,也可能是针对我的理解而给出的一些建议,这对于我在许多不完整的教程中学习来得更好。
虽然作为伸手党,但 “人没有付出就什么也得不到,要想得到什么就必须付出同等的代价” 于是我省下一些实行教程的时间写下一些理解,希望前辈更能了解我的需求。
简单地说就是在多个域名也可以指向我的一台 VPS,它们都是用 LE 证书并能够自动续期,因为域名和 VPS 都有 5 年时间,所以希望这个自动续期是穏定的。在访问每个域名下,都能自动从 HTTP 跳到 HTTPS。而这些域名后端都是用了 Apache,PHP。当然 Go 和 NodeJS 也可能会有。
sudo apt-get update
sudo apt-get install apache2
sudo apt-get install nginx
sudo apt-get -y install git
sudo add-apt-repository ppa:certbot/certbot
sudo apt-get install python-certbot-apache
在我得到的资讯下,Nginx 和 Apache 都有各自的多域名设置
以下是设置 Nginx 的静态内容服务和 Proxy 到 Apache HTTPS.
Nginx 是这样的( default.conf )
server
{
listen 80;
listen [::]:80;
listen 443;
listen [::]:443;
ssl_protocols TLSv1.2 TLSv1.1 TLSv1;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
server_name example.com;
rewrite ^/(.*) https://www.example.com/$1 permanent;
root /home/www/example.com;
index index.html index.php;
}
server
{
listen 80;
listen [::]:80;
listen 443;
listen [::]:443;
server_name example2.com;
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://localhost:81;
proxy_read_timeout 90;
proxy_redirect http://localhost:81 https://localhost:81;
}
}
Apache 是这样的( httpd-vhosts.conf)
<VirtualHost *:81>
DocumentRoot "/home/www/example2.com"
ServerName www.example2.com
</VirtualHost>
<VirtualHost *:82>
DocumentRoot "/home/www/example3.com"
ServerName www.example3.com
</VirtualHost>
RewriteEngine On
RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [R=301,L]
sudo mkdir -p /home/www/example.com
sudo mkdir -p /home/www/example2.com
sudo mkdir -p /home/www/example3.com
sudo chown -R $USER:$USER /var/www/example.com
sudo chown -R $USER:$USER /var/www/example2.com
sudo chown -R $USER:$USER /var/www/example3.com
sudo chmod -R 755 /var/www
sudo certbot --nginx -d example.com
sudo certbot --apache -d example2.com -d example3.com
sudo crontab -e
30 12 * * * /usr/bin/certbot renew --quiet
1
datou 2017-11-14 15:24:09 +08:00
caddy 搞定一切
|
2
momocraft 2017-11-14 16:28:55 +08:00
如果你用 docker: 我用的申请证书的 image: https://github.com/adferrand/docker-letsencrypt-dns 可以自动申请 /更新证书,并在更新后重启别的容器 (如 nginx) 。我觉得对于会用 docker 的人是个不错的方案 (nginx 一个容器,证书申请一个容器,每服务的 content server 一个容器)。
另外五年不用动这个期待可能有点高,LE 的 API 都未必能五年不变,我觉得有过期监视就行了。 |