源起
起因是在查看之前写的 Hexo 指南的时候,发现居然没有 Nginx 反代的部分(っ °Д °;)っ,于是赶紧补了几行,也就顺便发出来一起看看。
什么是Nginx
Nginx 是一个 HTTP 服务器、反向代理、内容缓存、负载均衡、TCP/UDP、邮件代理器(😎没错,都是在下)。具体这几块内容展开说的话很多,我也不专业,姑且就简单介绍一下作为 HTTP 服务器建站的简单建站操作。
可视化操作
如果你恰好有 “命令不耐受” 的症状,想要有一套可视化的工具协助搭建,自然也是可以的。比如 1Panel 宝塔等运维工具,都提供了一键部署 Nginx,可视化建站的界面。(此处省略0个字)
手动部署
这里我以 Openresty 为例来进行说明。
什么是Openresty:OpenResty® 是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。
为什么选择 Openresty:开源,有现成二进制包,自带常用组件(不必再手动添加了)。
- 确认待部署服务器系统版本:
cat /proc/version
比如这里我的显示为:
Linux version 4.18.0-348.7.1.el8_5.x86_64 (mockbuild@kbuilder.bsys.centos.org) (gcc version 8.5.0 20210514 (Red Hat 8.5.0-4) (GCC))
el8 表示是 CentOS8 版本。
- 进入下载页面,选择对应的发行版,根据提示输入命令安装即可。
工具包我基本用不到,所以就只安装 Openresty了。# CentOS8 wget https://openresty.org/package/centos/openresty.repo sudo mv openresty.repo /etc/yum.repos.d/openresty.repo sudo yum check-update yum install -y openresty
- 启动测试
安装目录在:/usr/local/openresty
,下一级目录就是nginx
,就和安装官方版本的目录结构一致了。启动服务:
/usr/local/openresty/nginx/sbin/nginx
打开
http://<IP>
就可以看到 Openresty 的欢迎界面了。如果无法访问,检查防火墙是否放行,服务启动了没。
Hexo 建站
Hexo 搭建不属本文讨论内容,略过,只需知晓我们的站点文件放置在 /data/hexoblog
目录下即可(index.html父级目录)。
修改 nginx.conf
(位置在以上安装目录下conf目录内)配置,将 root 根目录修改为以上站点目录 /data/html
,设置好域名、端口等配置,就可以指向到博客文件,重载nginx,站点就搭建好了。
# 检查 nginx.conf 配置语法是否合规
/usr/local/openresty/nginx/sbin/nginx -t
# 重载服务
/usr/local/openresty/nginx/sbin/nginx -s reload
🎗️ 这里之所以没有细说 Nginx 配置文件如何配置,是因为推荐使用下面的可视化工具帮忙生成 Nginx 配置,并一键部署到安装目录。
Nginx 配置生成
如果是大佬ヾ(≧▽≦*)o,愿意手搓配置,当然是没有任何问题的!☺️
但如果是和我一样的白中之白,只想要快速改好一套配置,可以考虑使用 DigitalOcean 提供的 Nginx 工具,提供了可视化配置界面。
站点配置
每个站点就是一个域名,因为大多数配置一看就懂,所以部分地方做一下解释。
- 服务:
- 其中路径和运行目录都以
/
开始,一起拼接出 html 站点资源路径。 - 子域名重定向不建议勾选,因为还会部署很多二级域名的服务。
- 其中路径和运行目录都以
- HTTPS:
- 证书类型如果自申请就选择【本地证书】,填写对应
cer
和key
路径;如果使用该工具提供的申请方式填写邮箱即可。
- 证书类型如果自申请就选择【本地证书】,填写对应
- PHP:
- 一般是不需要启用的,但建议加上。PHP服务选择【TCP:127.0.0.1:9000】,其它默认即可。然后根据教程安装PHP8服务(自带的PHP我使用一直有问题,重新部署一套8版本的就正常)。
- 反向代理:
- 此项与 PHP 冲突,因此不能在同个域名使用。不建议启用,如果真需要,一般wiki也会提供反代配置,不需要单独写。
- 路由设置:
- 勾选
html
和php
- 勾选
- 其它:根据需要配置即可。
配置完成后,下方可以看到实时配置内容,按照使用配置复制命令执行替换 Openresty 下的配置即可。
执行 SSL 初始化:
openssl dhparam -out /etc/nginx/dhparam.pem 2048
重载Nginx。
SSL 证书申请
这里我以 acme.sh
工具来进行说明,使用 DNS 验证的方式实现自动续签。
拢总分三步:
-
安装acme 普通/root用户都可以,安装位置在
~/.acme.sh
下面。后面使用到./acme.sh
命令都默认已进入此目录,或者配置环境变量也可以,不过没必要。bash curl https://get.acme.sh | sh -s email=my@example.com
-
获取API Key
API Key(各家叫法不一样,意思都相同):是提供给 acme 能够修改域名 DNS 的一个认证凭据,便于程序自动完成认证。
如果获取~~指挥官的芳心~~API Key,这里有具体说明各家域名服务商如何获取,以 CloudFlare 为例。
注意,这里仅说明申请单个域名的情况,如果是多个域名,请参照以上wiki说明!
-
注册一个账号就不说了吧。进入 API Tokens section,创建令牌,权限选择【Zone > DNS > Edit】,然后在Zone Resources下,选择需要申请证书的域名。
-
配置完成后,会生成一个 token,记录一下,比如为
CF_Token="Y_jpG9AnfQmuX5Ss9M_qaNab6SQwme3HWXNDzRWs"
-
在域名概述页面右下角可以看到区域 ID,比如
CF_Zone_ID="763eac4f1bcebd8b5c95e9fc50d010b4"
-
将以上两个值导入
acme.sh
环境变量bash export CF_Token="Y_jpG9AnfQmuX5Ss9M_qaNab6SQwme3HWXNDzRWs" export CF_Zone_ID="763eac4f1bcebd8b5c95e9fc50d010b4"
-
-
申请证书
bash ./acme.sh --issue --dns dns_dp -d example.com -d *.example.com
> 替换域名即可,等待完成申请和验证,如果失败了,就再执行一次。 -
安装证书 申请完成的证书在
~/.acme.sh
目录下,不要直接复制或引用使用,需要使用--install-cert
命令复制!Nginx 这么做:
acme.sh --install-cert -d example.com \ --key-file /path/to/keyfile/in/nginx/key.pem \ --fullchain-file /path/to/fullchain/nginx/cert.pem \ --reloadcmd "/usr/local/openresty/nginx/sbin/nginx -s reload"
建议使用
tab
避免输入错误!其中reloadcmd
一定要保持正确,因为每次更新证书都需要重载,如果没有做systemd
管理就按照上面这样输入绝对路径。 -
查看已安装证书信息
bash ./acme.sh --info -d example.com
-
手动更新证书 证书每 60 天自动更新,也可以手动更新:
bash ./acme.sh --renew -d example.com --force
-
修改
reloadcmd
重新安装证书可以实现修改。 -
更新 acme.sh
./acme.sh --upgrade # 开启自动更新 ./acme.sh --upgrade --auto-upgrade
-
出错排查 如果出错,就添加
--debug
参数输出详细调试信息,然后拜托 bing 娘啦!
正式上线?
至此,网站应该就可以正式访问了,不过这个时候只是个毛胚房,想要达到上线的要求还要很多内容要补充,不过那也就不是本文的重点了,下次有时间就再写吧,不知道是不是和这个网站的初衷有点偏离了(笑死)。
请登录后查看回复内容