如何从nginx迁移到Angie#

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

请注意,该指南是为依赖Angie软件包版本的基本替换场景量身定制的。 如果您正在处理:ref:容器 <docker_images>、 虚拟机、自定义路径或:ref:模块 <install-dynamicmodules>, 您需要相应地进行调整。

安装Angie#

我们建议使用 我们的仓库 中的官方软件包; 请参阅您操作系统的安装说明以安装Angie, 但在实际启动之前请停止。 相反,运行 sudo angie -V 以确保一切正常:

$ sudo angie -V

  Angie version: Angie/1.8.2
  nginx version: nginx/1.27.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;
    

    对Angie进程管理至关重要的 PID 文件:

    # 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/ 包含动态模块, 更新路径:

# 加载动态模块。请参阅/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

配置Angie额外功能#

可以假设您正在迁移是有原因的,那么为什么不更进一步, 配置一些 AngieAngie PRO 在nginx之上提供的附加功能呢?