NGINX.COM
Web Server Load Balancing with NGINX Plus

ChatGPT 问世不久便在技术圈掀起了一场风暴。由人工智能研究和部署公司 OpenAI 创建的 ChatGPT 是一款基于浏览器的聊天机器人,使用 OpenAI 的自然语言模型来学习如何以 OpenAI 所宣称的“对话方式”与人类互动。它能完成很多神奇的工作,比如写歌、创作莎士比亚十四行诗。ChatGPT 对一些基本问题的详细解答令程序员们震惊不已。

不过也不全是好消息。StackOverflow 问答网站已暂时禁止用户分享由 ChatGPT 生成的回答,因为错误率太高。一些用户反映称,ChatGPT 生成的回答存在明显的错误,对一些古怪甚至是主流问题的回答更是胡编乱造。

众所周知,我们热衷于以新颖的方式帮助我们的用户和社区快速学习和解答问题。我们很想知道 ChatGPT 能否就 NGINX 相关问题提供高质量的回答,并对它进行了快速测试。

 

您好,ChatGPT……

我们问了 ChatGPT 四个问题,在下面列出了 ChatGPT 的回答并评估其准确性。

问题 1

问:什么是 NGINX?

ChatGPT 回答:NGINX 是一个网络服务器,可用于为网站和应用提供支持。它以高性能和稳定性而闻名,是许多网站和应用的热门选择。NGINX 还可以用作反向代理、负载均衡器和 HTTP 缓存。它是一款开源软件,在 Linux 操作系统上广泛使用。

NGINX 回答:基本正确。 但它没有提到 “API 网关” 这个常见用例。

问题 2

问:NGINX 开源版是否带 WAF?

ChatGPT 回答:带。NGINX 开源版包含一个 Web 应用防火墙 (WAF) 模块。NGINX WAF 基于 ModSecurity 开源 WAF,它提供了一个灵活而强大的规则引擎来保护您的 Web 应用免受常见漏洞的影响,例如 SQL 注入和跨站脚本攻击。NGINX WAF 可以被配置为主动或被动安全模式,允许您明确地指定应允许和拦截哪些请求。但是,值得一提的是,NGINX 开源版不包含对 WAF 模块的支持,因此如果需要设置或使用方面的帮助,您需要求助社区或咨询专家。

NGINX 回答:对错参半。nginx.org 上提供的 NGINX 开源版软件确实不带 WAF,无论是 WAF 源代码、预编译的二进制文件,还是预构建的动态模块。但是,您可以基于 ModSecurity 开源 WAF 为 NGINX 开源版构建 WAF,具体方式就是使用由 Trustwave 的 SpiderLabs 提供的 libmodsecurity 库来构建动态模块。我们的官方博客上有相关操作指南。如果不提供这些细节,对于想要了解 NGINX 开源版是否带 WAF 的读者来说,可能很难根据这个回答找到所需的资源,并有可能感到困惑或受挫。

但另一方面,ChatGPT 对 ModSecurity WAF 的描述很有参考价值,我们的确不为作为开源软件的 ModSecurity WAF 动态模块提供支持。准确说,F5 NGINX 确实在 NGINX Plus 中提供过一个基于 ModSecurity 的 WAF,但该模块已停售并将于 2024 年停服。现在,我们向付费用户提供 NGINX App Protect WAF 作为 NGINX Plus 和其他产品的附加组件。

问题 3

问:请告诉我如何配置 NGINX

ChatGPT 回答:如要配置 NGINX,您需要先编辑它的配置文件。该配置文件通常命名为 nginx.conf,位于 NGINX 安装目录内的 conf 目录下。

该配置文件是用指令的形式编写的,这些指令会指示 NGINX 如何运行。每条指令占一行,通常采用 directive_name directive_value; 的形式。

下面的配置文件示例列举了一些常见的指令:

[编者按 — 我们把这部分回答设为等宽字体,并调整了行长度以方便阅读。]

# 这是一行注释

# 要运行的工作进程的数量。
# 通常最好将其设置为服务器上的 CPU 内核数量
worker_processes 4;

# 日志文件的存放目录
error_log /var/log/nginx/error.log;

# 默认服务器,如果没有其他服务器匹配,将使用该服务器 
# 请求
server {
    # listen 指令指定了服务器将使用的端口 
    listen 80;

    # root 指令指定了 root 服务器的 root 目录
    root /var/www/html;

    # server_name 指令指定了服务器的主机名
    server_name example.com;

    # location 指令指定了 URL 模式和相关的
    # 处理规则
    location / {
        # 该指令指定对 root URL 的请求 
        # 应由 root 目录 index index.html 中的 index.html 文件
        来处理;
    }
}

您可以前往 https://nginx.org/en/docs/ 查阅 NGINX 文档,以了解有关各种指令的更多信息。

NGINX 回答:就目前而言,相当不错(“nginx.conf 位于 NGINX 安装目录内的 conf 目录下”这一说法不是很准确,这最多只适用于某些操作系统厂商的发行版)。示例配置中的指令描述准确无误,但总体结构并不完整,特别是它没有按照要求将 server 代码块嵌套于 http{} 上下文中。示例配置也很粗略,没有实质性的用处。但考虑到 NGINX 支持用例的多样性,也不应该期待它提供一个完整的回答。

然而,这个回答本身引出了一个有趣的问题——ChatGPT 给出的答案究竟来自于哪里?该回答中的文字和配置都不直接来自于 nginx.orgnginx.com 上的文档,在 Google 上搜索该回答中的几个短语,也找不到来自任何来源的匹配结果。虽然 ChatGPT 中包含一个指向 NGINX 文档的链接,但该回答并不直接来自于该来源,这不禁让人心生好奇。

问题 4

问:10 大 NGINX 配置错误是什么?

ChatGPT 回答:无法作答。

NGINX 回答:实际上,有篇博文及其相应网络研讨会的标题与这个问题非常接近,基于这些标题可轻松找到这个问题的答案。ChatGPT 有时候无法作答的事实,说明它与 Google 不尽相同。Google 拥有更广泛的索引,可轻而易举地找到这篇博文。事实上,Google 不仅将这篇博文作为第一个结果返回,还列出了文内简介中汇总列表的前七条。

Screenshot of Google search results for 'Top 10 NGINX Configuration Mistakes'

 

结语

ChatGPT 是一项超级强大且有趣的技术。与其他聊天机器人相比,它能够以更具对话性的方式准确地回答一些问题。在某些情况下,它还能够对编程问题做出详细回答。

但它的回答质量参差不齐,从对 NGINX 相关问题的回答中就不难看出。nginx.orgdocs.nginx.com 无疑是获取 NGINX 相关信息的最佳来源。(编者注:对中文用户来说,nginx-cn.net 和 nginx.org.cn 上的中文资料也可为大家提供帮助。)但是,我们会继续与 ChatGPT 互动,以了解它的最新发展,敬请大家关注。

您使用 ChatGPT 的体验如何?您可以在我们的 NGINX 开源社区 网站上(nginx.org.cn)加入讨论并分享您的体验与反馈,或添加“小 N 助手(微信号:nginxoss)”加入到我们的官方微信群,了解更多相关信息。

Hero image
免费 O'Reilly 电子书:
《NGINX 完全指南》

更新于 2022 年,一本书了解关于 NGINX 的一切

关于作者

Robert Haynes

技术营销经理

关于 F5 NGINX

F5, Inc. 是备受欢迎的开源软件 NGINX 背后的商业公司。我们为现代应用的开发和交付提供一整套技术。我们的联合解决方案弥合了 NetOps 和 DevOps 之间的横沟,提供从代码到用户的多云应用服务。访问 nginx-cn.net 了解更多相关信息。