Nginx+Let's Encrypts个人泛域名网站架设
目前,我们只需要花费很少的钱甚至利用云服务提供商的活动0元就能买到一台云服务器主机,各种开源简单易用的工具更是多不胜数。对于个人开发者或爱好者来说,搭建一个私有网站做内容共享或者私有远程服务是轻而易举的。
现在的浏览器为了安全都强制要求 https
协议,我们对网站的需求也一般不止一个应用,所以本文对笔者自己的一个网站架设方案做一下记录,也希望能给点击本文的朋友一定的帮助。
笔者的需求和目标是希望架设一个基础的服务器环境,这个环境需要能提供 https
支持并且后续能基于当前的环境很容易快速的做网站应用的扩充,这个需求使用 Nginx代理 和 Let’s Encrypt免费的CA证书就能实现。
安装 Nginx
安装 Nginx
的方式一般通过命令安装即可,若有定制化需求的话,也可以采用编译安装的方式去定制 Nginx
。我的服务器使用的是 CentOS
系统,对 Nginx
不熟的用户建议直接在 root
用户下使用如下命令安装:
1 | yum install -y epel-release |
这种方式安装后 Nginx
的配置文件一般在 /etc/nginx
中。
编译安装的话,我们可以根据需要增加或移除一些模块,也可以指定安装路径,但是编译安装需要安装编译环境及一些依赖库。一般来说,服务器这样的应用,我们安装到一个普通用户下用普通用户权限运行可能会更加安全,但是 Linux 中 1000 以下的端口都需要具有 root 权限才能监听使用,nginx 在普通用户下使用就需要做端口映射将 80 443 端口映射到大于 1000 的端口上,后续获取 CA 证书也需要 root 权限,会涉及到一些权限的变更,比较烦琐,我们个人用户就直接在 root 用户安装好了,源码安装的具体安装流程如下:
1 | # 安装编译器及依赖 |
通过以上步骤,Nginx 便安装完成了。启动 nginx 在命令行直接运行 nginx
即可;如果想设置 nginx 在开机启动的话,对于 CentOS 系统来说,你可以将 nginx 添加到系统的守护进程中。Nginx 服务的实际运行是根据相应的配置文件来指导运行的,由于 https
的CA证书文件也要配置到 nginx 的配置文件中,所以接下来我们先去获取 Let's Encrypt
免费证书,之后再对 nginx 服务进行配置。
获取CA证书
Let’s Encrypt 的证书获取需要安装一些工具,这里我们最好去参考一下Let’s Encrypt官网给的安装方式与建议,这里使用官方推荐的Certbot ACME 客户端的命令行安装方式。直接去到 Certbot 网站 根据提示完成工具的获取与安装。
按提示选择 Nginx 和系统 CentOS8:
然后它要求我们需要先安装 snapd
去获取 certbot
,我们直接点击链接 进入snapcraft’s网站 ,选择我们自己的系统,根据提示依次输入如下命令即可完成安装(假设你是 root 用户):
1 | # 添加 epel 仓库 |
完成 snapd
安装后,我们回到 Certbot
进行获取证书工具的安装,按照官方教程,依次执行如下命令:
1 | snap install core |
执行实际操作前,如果曾安装过 certbot-auto 或其他 certbot 相关的包,请先移出他们,你可以参考如下三条命令:
1 | apt-get remove certbot |
做完上述操作后,我们便可以执行下述命令实际去安装 Certbot
:
1 | snap install --classic certbot |
Certbot 安装好了!你可以通过如下命令去获取证书并将证书自动的配置到 Nginx 的配置文件中,当然也可以参考我后续的配置进行手动配置。
1 | certbot --nginx # 或 certbot certonly --nginx |
手动获取证书输入如下命令(注意 *.ereel.cn是申请范域名证书,请注意替换你的域名):
1 | certbot certonly --manual --preferred-challenges dns -d *.ereel.cn |
依照命令行提示一步一步确认执行,可能会需要输入你的邮箱进行验证,以及问你是否接受推送服务信息之类的,这根据情况填写即可;之后会提示让你在自己的域名上增加一条 TXT 类型的 DNS 解析记录 _acme-challenge.ereel.cn
并填入提示的字符串,完成之后回到命令行终端回车,certbot 确认你添加的解析记录后便会将证书相关的密钥文件放在 /etc/letsencrypt/live/ereel.cn/
里面;之后将这个密钥文件路径配置到 nginx 配置文件中即可。
Nginx 配置
Nginx 的主配置文件是 /usr/local/nginx/conf/nginx.conf
,部分内容大概如下:
1 |
|
上述是删除了一部分配置后的结构,可以看到,在这个配置中我强制将 http 转发到了https,这里面主要配置了 www.ereel.cn
的访问服务,这个文件在 http 块里有多个 server ,每个 server 实际上是对应一个站点,从配置 include conf.d/*.conf;
中我们可以看到,主配置文件中将 conf.d/
文件夹中所有 .conf
为后缀的文件都包含了进来,所以我们多个站点最直接的做法就是每个站点放在一个文件中,不同站点的配置需求放不同的文件,这便于维护管理。这样,比如我要增加一个博客的站点,我可以在 conf.d/
中增加一个名为 blog.conf
的文件,放入如下站点配置内容:
1 | server { |
后续我们如果想增加站点的话,其实拷贝一份 blog.conf
重命名,改动一下其中的域名与转发端口即可。改动了配置文件,我们需要手动重新载入才能生效,使用如下命令是重载配置:
1 | nginx -s reload |
刷新CA证书
值得注意的是,Let’s Encrypt 的证书只能维持三个月,到期后需要重新获取证书,你可以参考官方的方法添加 crontab
自动任务并生成RSA密钥对将公钥放置到你域名解析服务商的服务器上自动更新证书,不嫌麻烦的话你可以向我一样,收到到期邮件后重复上述命令重新申请即可。
Nginx+Let's Encrypts个人泛域名网站架设