需要一个 Ubuntu 的 VPS 多域名架设 Apache 及使用 LE 证书最简便方法

2017-11-14 12:42:02 +08:00
 Ghkitg

前言

双十一买了几个域名和一台 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]

www 目录

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

LE 证书

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
1537 次点击
所在节点    程序员
2 条回复
datou
2017-11-14 15:24:09 +08:00
caddy 搞定一切
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 都未必能五年不变,我觉得有过期监视就行了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/406235

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX