Nginx 建站指北|网站技术交流动态圈|科技专区|DP次元美化

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 的一个认证凭据,便于程序自动完成认证。

    如果获取~~指挥官的芳心~~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 娘啦!

正式上线?

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

 

请登录后发表评论

    请登录后查看回复内容