Nginx 建站指北

源起

起因是在查看之前写的 Hexo 指南的时候,发现居然没有 Nginx 反代的部分(っ °Д °;)っ,于是赶紧补了几行,也就顺便发出来一起看看。

什么是Nginx

Nginx 是一个 HTTP 服务器、反向代理、内容缓存、负载均衡、TCP/UDP、邮件代理器(😎没错,都是在下)。具体这几块内容展开说的话很多,我也不专业,姑且就简单介绍一下作为 HTTP 服务器建站的简单建站操作。

可视化操作

如果你恰好有 “命令不耐受” 的症状,想要有一套可视化的工具协助搭建,自然也是可以的。比如 1Panel 宝塔等运维工具,都提供了一键部署 Nginx,可视化建站的界面。(此处省略0个字)

手动部署

这里我以 Openresty 为例来进行说明。

什么是Openresty:OpenResty® 是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。

为什么选择 Openresty:开源,有现成二进制包,自带常用组件(不必再手动添加了)。

1.确认待部署服务器系统版本:

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 版本。

2.进入下载页面,选择对应的发行版,根据提示输入命令安装即可。

工具包我基本用不到,所以就只安装 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

3.启动测试

安装目录在:/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 验证的方式实现自动续签。

拢总分三步:

1.安装acme 普通/root用户都可以,安装位置在 ~/.acme.sh 下面。后面使用到 ./acme.sh 命令都默认已进入此目录,或者配置环境变量也可以,不过没必要。 bash curl https://get.acme.sh | sh -s email=my@example.com

2.获取API Key

 API Key(各家叫法不一样,意思都相同):是提供给 acme 能够修改域名 DNS 的一个认证凭据,便于程序自动完成认证。

 

  1. 如果获取~~指挥官的芳心~~API Key,这里有具体说明各家域名服务商如何获取,以 CloudFlare 为例。

    注意,这里仅说明申请单个域名的情况,如果是多个域名,请参照以上wiki说明!

    1. 注册一个账号就不说了吧。进入 API Tokens section,创建令牌,权限选择【Zone > DNS > Edit】,然后在Zone Resources下,选择需要申请证书的域名。

    2. 配置完成后,会生成一个 token,记录一下,比如为 CF_Token="Y_jpG9AnfQmuX5Ss9M_qaNab6SQwme3HWXNDzRWs"

    3. 在域名概述页面右下角可以看到区域 ID,比如 CF_Zone_ID="763eac4f1bcebd8b5c95e9fc50d010b4"

    4. 将以上两个值导入 acme.sh 环境变量 bash export CF_Token="Y_jpG9AnfQmuX5Ss9M_qaNab6SQwme3HWXNDzRWs" export CF_Zone_ID="763eac4f1bcebd8b5c95e9fc50d010b4"

3.申请证书 bash ./acme.sh --issue --dns dns_dp -d example.com -d *.example.com > 替换域名即可,等待完成申请和验证,如果失败了,就再执行一次。

4.安装证书 申请完成的证书在 ~/.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 管理就按照上面这样输入绝对路径。

5.查看已安装证书信息
bash ./acme.sh --info -d example.com

6.手动更新证书 证书每 60 天自动更新,也可以手动更新: bash ./acme.sh --renew -d example.com --force

7.修改 reloadcmd 重新安装证书可以实现修改。

8.更新 acme.sh

./acme.sh --upgrade

# 开启自动更新
./acme.sh --upgrade --auto-upgrade

9.出错排查 如果出错,就添加 –debug 参数输出详细调试信息,然后拜托 bing 娘啦!

正式上线?

至此,网站应该就可以正式访问了,不过这个时候只是个毛胚房,想要达到上线的要求还要很多内容要补充,不过那也就不是本文的重点了,下次有时间就再写吧,不知道是不是和这个网站的初衷有点偏离了(笑死)。

任何个人或组织,在未征得【发布者】同意时,禁止复制、盗用、采集、发布本站内容到任何网站。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧