从 nginx 迁移到 Angie#

如果您正在从 nginx 切换到 Angie,恭喜您! 我们为您准备了一份指南。

请注意,本指南针对的是依赖 Angie 软件包版本的基本替换场景。 如果您使用的是 容器、 虚拟机、自定义路径或 模块, 您将需要进行额外的调整。

安装 Angie#

我们建议使用来自 我们仓库 的官方软件包; 请参阅适用于您的发行版的 Angie 安装步骤。 暂时不要启动服务器; 而是使用命令 sudo angie -V 检查它:

$ sudo angie -V

  Angie version: Angie/1.11.2
  nginx version: nginx/1.29.3
  built by gcc 11.4.0
  configure arguments: --prefix=/etc/angie --conf-path=/etc/angie/angie.conf ...

如上所示, 当从软件包安装 Angie 时, 配置 位于 /etc/angie/ 中。

更新 Angie 配置#

Angie 通常只需要对现有 nginx 配置进行最小的更改。

  1. 将整个 nginx 配置复制到 /etc/angie/:

    $ sudo rsync -a --no-links /etc/nginx/ /etc/angie/
    

    我们假设 nginx 配置存储在 /etc/nginx/ 中; 如果您的路径不同,请调整这些步骤。

  2. 按照 Angie 的要求重命名主配置文件:

    $ sudo mv /etc/angie/nginx.conf /etc/angie/angie.conf
    
  3. 更新整个 Angie 配置中的路径, 从主配置文件开始。 具体细节取决于 nginx 的安装方式, 但至少需要更新以下内容。

    任何仍然指向 /etc/nginx/include 路径:

    # include /etc/nginx/conf.d/*.conf;
    # include /etc/nginx/default.d/*.conf;
    # include /etc/nginx/http.d/*.conf;
    # include /etc/nginx/stream.d/*.conf;
    include /etc/angie/conf.d/*.conf;
    include /etc/angie/default.d/*.conf;
    include /etc/angie/http.d/*.conf;
    include /etc/angie/stream.d/*.conf;
    
    # include /etc/nginx/sites-enabled/*;
    include /etc/angie/sites-enabled/*;
    
    # include /etc/nginx/modules-enabled/*;
    include /etc/angie/modules-enabled/*;
    
    # include /etc/nginx/mime.types;
    include /etc/angie/mime.types;
    

    PID 文件,这对 Angie 进程管理很重要:

    # pid /var/run/nginx.pid;
    # -- 或 --
    # pid /run/nginx.pid;
    pid /run/angie.pid;
    

    最后, 访问日志错误日志:

    # access_log /var/log/nginx/access.log;
    access_log /var/log/angie/access.log;
    
    # error_log /var/log/nginx/error.log;
    error_log /var/log/angie/error.log;
    

虚拟主机#

如果使用 sites-enabled/ 目录来包含虚拟主机, 也需要更新它:

# include /etc/nginx/sites-enabled/*;
include /etc/angie/sites-enabled/*;

然后在 /etc/angie/sites-enabled/ 中重新创建符号链接 以使一切正常工作。

列出原始虚拟主机文件,例如:

$ ls -l /etc/nginx/sites-enabled/

  default -> /etc/nginx/sites-available/default

注意它们的实际位置; 这里是 /etc/nginx/sites-available/

如果之前没有将它们复制到 /etc/angie/, 现在复制它们:

$ sudo rsync -a /etc/nginx/sites-available/ /etc/angie/sites-available/

最后,重新创建每个符号链接:

$ sudo ln -s /etc/angie/sites-available/default \
             /etc/angie/sites-enabled/default

动态模块#

为 nginx 配置中引用的所有动态模块 查找并 安装 Angie 等效模块, 例如:

$ sudo nginx -T | grep load_module

  load_module modules/ngx_http_geoip2_module.so;
  load_module modules/ngx_stream_geoip2_module.so;
  ...

这意味着您需要安装 angie-module-geoip2 包, 依此类推。

有两种常见的方式来包含动态模块配置:

如果通过 /usr/share/nginx/modules/ 包含动态模块, 更新路径:

# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
# include /usr/share/nginx/modules/*.conf;

include /usr/share/angie/modules/*.conf;

然后复制模块配置文件:

$ sudo rsync -a /usr/share/nginx/modules/ /usr/share/angie/modules/

最后,在每个文件中更改 load_module 路径:

# load_module "/usr/lib64/nginx/modules/ngx_http_geoip2_module.so";
load_module "/usr/lib64/angie/modules/ngx_http_geoip2_module.so";

根目录(可选)#

如果 root 指向 /usr/share/nginx/html/ 目录, 您可以更改该指令以指向 Angie。

复制目录并更新 Angie 配置中的 root 值:

$ sudo rsync -a /usr/share/nginx/html/ /usr/share/angie/html/
# root /usr/share/nginx/html;
root /usr/share/angie/html;

用户和组(可选)#

虽然保持 user 指令不变就足够了, 但您可以使用 Angie 账户以获得灵活性。

更新 Angie 配置中的 user 设置:

# user www-data www-data;
user angie angie;

更改*所有*配置文件的所有者, 包括 /usr/share/angie/ 中的文件, 例如:

$ sudo chown -R angie:angie /etc/angie/
$ sudo chown -R angie:angie /usr/share/angie/

如果 Angie 配置中有 root 指令, 更改其中指定目录的所有者, 例如:

$ sudo chown -R angie:angie /var/www/html/

收尾工作#

为确保没有遗漏, 在 Angie 配置中查找并修复剩余的 nginx 引用:

$ grep -rn --include='*.conf' 'nginx' /etc/angie/

测试和切换#

更新 Angie 配置后, 下一步是检查其语法 以确保 Angie 可以使用它, 然后进行切换。 验证 Angie 接受新配置:

$ sudo angie -t

此命令解析配置 并报告会阻止 Angie 启动的错误; 修复任何问题并重新运行该命令。

停止 nginx,启动 Angie#

为了最小化停机时间,在停止 nginx 后立即启动 Angie:

$ sudo systemctl stop nginx && sudo systemctl start angie

如果需要,启用 Angie 服务以在重启后自动启动:

$ sudo systemctl enable angie

迁移完成!就是这样;您真棒。

禁用 nginx#

在确认 Angie 稳定运行后, 您可以禁用或删除 nginx 以避免冲突。

您至少可以禁用该服务:

$ sudo systemctl disable nginx

使用 SSL 证书#

如果您使用 Certbot 管理 nginx 的 SSL 证书, 它将继续与 Angie 一起工作。

在 Angie 中使用 Certbot#

在 Certbot 中支持 Angie 只需最少的工作, 因为 Angie 向后兼容 nginx。 要使 Certbot 工作,只需创建一个符号链接 并指定适当的参数:

# 创建符号链接以实现 Certbot 兼容性
$ sudo ln -s /etc/angie/angie.conf /etc/angie/nginx.conf

# 为域名获取证书
$ sudo certbot --nginx --nginx-server-root=/etc/angie --nginx-ctl=angie -d example.com -d www.example.com

# 自动续订证书
$ sudo certbot renew

# 检查证书状态
$ sudo certbot certificates

迁移到 Angie 后,Certbot 将继续通过配置的 cron 作业或 systemd 定时器自动续订证书。

从 Certbot 迁移到内置 ACME 模块#

Angie 包含内置的 ACME 模块, 它允许您自动获取和续订 SSL 证书, 而无需使用 Certbot 等外部工具。

内置 ACME 模块的优势:

  • 与 Angie 配置完全集成;

  • 无需额外服务即可自动续订证书;

  • 支持 HTTP 和 DNS 验证;

  • 能够获取通配符证书。

有关从 Certbot 迁移到内置 ACME 模块的详细说明, 请参阅 从 certbot 迁移 部分。

配置 Angie 功能#

可以肯定地说,您迁移是有原因的。 为什么不更进一步,配置一些 AngieAngie PRO 中可用的附加功能, 这些功能在 nginx 中是没有的?