Statistics
6
Views
0
Downloads
0
Donations
Nginx完全指南 (Derek DeJonghe) (Z-Library)
技术Author:Derek DeJonghe
NGINX 是当今使用最广泛的 Web 服务器之一,部分原因在于 它可以用作 HTTP 和其他网络协议的负载均衡器和反向代理服务 器。本修订版完全指南通过一些简单易懂的例子解析了应用交 付中真实存在的问题。实用的实操指南可帮助您设置开源或商 业产品,并利用它们解决各种用例中的问题。 对于了解现代 Web 架构(例如 n 层或微服务设计以及 TCP 和 HTTP 等常见 Web 协议)的专业人士来说,本书的这些实操指 南为安全和软件负载均衡以及 NGINX 应用交付平台的监控和维 护提供了经过验证的解决方案。您还将了解到免费的 NGINX 开 源版以及许可授权版 NGINX Plus 的高级功能。
Support Statistics
¥.00 ·
0times
Text Preview (First 20 pages)
Registered users can read the full content for free
Register as a Gaohf Library member to read the complete e-book online for free and enjoy a better reading experience.
Page
1
第 二 版 NGINX 完全指南 实现高性能负载均衡的进阶实操指南 Derek DeJonghe
Page
2
NGINX 完全指南 NGINX 是当今使用最广泛的 Web 服务器之一,部分原因在于 它可以用作 HTTP 和其他网络协议的负载均衡器和反向代理服务 器。本修订版完全指南通过一些简单易懂的例子解析了应用交 付中真实存在的问题。实用的实操指南可帮助您设置开源或商 业产品,并利用它们解决各种用例中的问题。 对于了解现代 Web 架构(例如 n 层或微服务设计以及 TCP 和 HTTP 等常见 Web 协议)的专业人士来说,本书的这些实操指 南为安全和软件负载均衡以及 NGINX 应用交付平台的监控和维 护提供了经过验证的解决方案。您还将了解到免费的 NGINX 开 源版以及许可授权版 NGINX Plus 的高级功能。 您将获取以下方面的实操指南: • HTTP、TCP 和 UDP 高性能负载均衡 • 通过加密流量、安全链接、HTTP 身份验证子请求等保护访问 • 将 NGINX 部署到 Google、亚马逊云科技(AWS)和 Azure 云 • 设置和配置 NGINX Controller • 安装和配置 NGlNXApp Protect 模块 • 通过控制器 ADC 启用 WAF • NGINX Instance Manager、NGINX Service Mesh 和 njs 模块 “NGINX 是当今市场上超级 强大且全面的工具。本书 为大型架构提供了终极配 置指南,其中展示的用例 几乎可以帮助任何人解决 在微服务环境中运行时出 现的任何问题,同时又不 会失去对业务的关注。” —— Gonzalo Spina Brubank 软件工程师 Brubank Derek DeJonghe 在 Web 开发、系统管理 和网络方面的深厚背景和丰富经验让他对现 代 Web 架构有着全面的了解。他擅长各种 规模的云迁移和运维,领导着一支由云架构 师和解决方案工程师组成的优秀团队,并为 许多不同的应用开发可以自我修复、自动扩 展的基础架构。 Twitter:@oreillymedia linkedin.com/company/oreilly-media youtube.com/oreillymedia 系统管理
Page
3
第二版 NGINX 完全指南 实现高性能负载均衡的进阶实操指南 Derek DeJonghe 北京 · 波士顿 · 法纳姆 · 塞巴斯托波尔 · 东京
Page
4
NGINX 完全指南 作者:Derek DeJonghe © 2022 F5 Networks, Inc. Authorized simplified Chinese translation of the English edition of NGINX Cookbook, Second Edition (ISBN 9781098126247) © 2022 O'Reilly Media, Inc. This translation is published by permission of O'Reilly Media, Inc., which owns or controls all rights to publish and sell the same. 所购的 O'Reilly 图书可用于教育、商业或促销用途。其中多数图书也有网络版(http://oreilly.com)。 有关更多信息,请联系我们的企业/机构销售部:800-998-9938 或 corporate@oreilly.com。 策划编辑:Melissa Duffield 开发编辑:Gary O'Brien 制作编辑:Christopher Faucher 文字编辑:Kim Cofer 英文版校对:JM Olejarz O'Reilly 徽标是 O'Reilly Media, Inc. 的注册商标。《NGINX 完全指南》、封面图片和相关商业包 装是 O'Reilly Media, Inc. 的商标。 本书所述均为作者的个人观点,不代表出版商的立场。虽然出版商和作者已经做出了真诚的努力, 希望确保本作品中包含的信息和说明是准确的,但双方均不对其中的错误或遗漏承担任何责任, 包括但不限于因使用或依赖本作品而导致的损害赔偿责任。使用本作品中包含的信息和说明需要 您自行承担风险。如果本作品包含或描述的任何代码示例或其他技术受开源许可或他方知识产权 的约束,您有责任确保您的使用符合此类许可和/或权利。 本作品是 O'Reilly 和 NGINX 的合作成果之一。详情请参见我们的编辑独立性声明。 索引:Potomac Indexing, LLC 内部设计:David Futato 封面设计:Karen Montgomery 插画:Kate Dullea 中文版校对:熊平、林静、易久平、孔令子
Page
5
iii 目录 前言 ...................................................................................................................... ix 1. 基础知识 .......................................................................................................... 1 1.0 简介 1 1.1 在 Debian/Ubuntu 上安装 NGINX 1 1.2 在 RedHat/CentOS 上安装 NGINX 2 1.3 安装 NGINX Plus 3 1.4 验证安装 3 1.5 关键文件、目录和命令 4 1.6 提供静态内容 6 1.7 优雅重载 7 2. 高性能负载均衡 ............................................................................................... 9 2.0 简介 9 2.1 HTTP 负载均衡 10 2.2 TCP 负载均衡 11 2.3 UDP 负载均衡 13 2.4 负载均衡方式 14 2.5 NGINX Plus 之 Sticky Cookie 16 2.6 NGINX Plus 之 Sticky Learn 17 2.7 NGINX Plus 之 Sticky Routing 18 2.8 NGINX Plus 之连接清空 19 2.9 被动健康检查 20 2.10 NGINX Plus 之主动健康检查 21 2.11 NGINX Plus 之慢启动 23 3. 流量管理 ........................................................................................................ 25 3.0 简介 25 3.1 A/B 测试 25 3.2 使用 GeoIP 模块和数据库 27 3.3 基于国家/地区的访问限制 29 3.4 查找原始客户端 30 3.5 限制连接数 31
Page
6
iv 目录 3.6 限制速率 32 3.7 限制带宽 34 4. 大规模可扩展的内容缓存 ............................................................................... 35 4.0 简介 35 4.1 缓存区 35 4.2 缓存锁定 36 4.3 缓存哈希键 37 4.4 绕过缓存 38 4.5 缓存性能 39 4.6 NGINX Plus 之缓存清除 39 4.7 缓存切片 40 5. 可编程性和自动化 .......................................................................................... 43 5.0 简介 43 5.1 NGINX Plus API 43 5.2 使用 NGINX Plus 的键值(Key-Value)存储功能 47 5.3 在 NGINX 中使用 NJS 模块暴露 JavaScript 功能 49 5.4 使用通用编程语言扩展 NGINX 52 5.5 使用 Chef 安装 54 5.6 使用 Ansible 安装 55 5.7 使用 Consul 模板自动进行配置 57 6. 身份验证 ........................................................................................................ 59 6.0 简介 59 6.1 HTTP 基本身份验证 59 6.2 身份验证子请求 61 6.3 使用 NGINX Plus 验证 JWT 62 6.4 创建 JSON Web Key 63 6.5 使用 NGINX Plus 验证 JSON Web Token 64 6.6 使用 NGINX Plus 自动获取和缓存 JSON Web Key Set 65 6.7 使用 NGINX Plus 通过现有的 OpenID Connect SSO 验证用户身份 66 7. 安全控制 ........................................................................................................ 69 7.0 简介 69 7.1 基于 IP 地址的访问 69 7.2 允许跨域资源共享 70 7.3 客户端加密 72 7.4 高级客户端加密 73 7.5 Upstream 加密 75 7.6 保护位置 75
Page
7
v目录 7.7 使用 secret 生成安全链接 76 7.8 保护过期的位置 77 7.9 生成过期链接 78 7.10 HTTPS 重定向 80 7.11 在 NGINX 之前终止 SSL/TLS 后重定向到 HTTPS 80 7.12 HTTP 严格传输安全协议 81 7.13 提供多种安全方法 82 7.14 NGINX Plus 动态应用层 DDoS 防护 83 7.15 安装和配置 NGINX Plus 的 NGINX App Protect WAF 模块 84 8. HTTP/2 .......................................................................................................... 89 8.0 简介 89 8.1 基本配置 89 8.2 gRPC 90 8.3 HTTP/2 服务器推送 92 9. 复杂的媒体串流 ............................................................................................. 95 9.0 简介 95 9.1 传输 MP4 和 FLV 格式的文件 95 9.2 使用 NGINX Plus 的 HLS 模块进行流式传输 96 9.3 使用 NGINX Plus 的 HDS 模块进行流式传输 97 9.4 使用 NGINX Plus 限制带宽 98 10. 云部署 ............................................................................................................ 99 10.0 简介 99 10.1 AWS 上的自动配置 99 10.2 无需 AWS ELB 将流量路由到 NGINX 节点 101 10.3 NLB Sandwich 102 10.4 从 AWS Marketplace 进行部署 104 10.5 在 Azure 上创建 NGINX 虚拟机镜像 105 10.6 通过 Azure 上 NGINX 规模集(scale set)进行负载均衡 107 10.7 通过 Azure Marketplace 进行部署 108 10.8 部署到 Google Compute Engine 109 10.9 创建 Google Compute Image 109 10.10 创建 Google App Engine 代理 110 11. 容器/微服务 ................................................................................................. 113 11.0 简介 113 11.1 使用 NGINX 作为 API 网关 114 11.2 在 NGINX Plus 中使用 DNS SRV 记录 118 11.3 使用官方 NGINX 镜像 119
Page
8
vi 目录 11.4 创建 NGINX Dockerfile 120 11.5 构建 NGINX Plus Docker 镜像 122 11.6 使用 NGINX 中的环境变量 124 11.7 Kubernetes Ingress Controller(Kubernetes Ingress 控制器) 125 11.8 Prometheus Exporter 模块 127 11.9 使用 NGINX Secure Service Mesh 实现 mTLS 129 12. 高可用性部署模式 ........................................................................................ 131 12.0 简介 131 12.1 NGINX Plus HA(高可用性)模式 131 12.2 通过 DNS 实现负载均衡器的负载均衡 132 12.3 在 EC2 上实现负载均衡 132 12.4 NGINX Plus 配置同步 133 12.5 与 NGINX Plus 的状态共享和区域同步 136 13. 高级活动监控 ............................................................................................... 139 13.0 简介 139 13.1 启用 NGINX 开源版的 stub 状态 139 13.2 启用 NGINX Plus 监控仪表盘 140 13.3 使用 NGINX Plus API 收集指标 143 14. 利用访问日志、错误日志和请求跟踪进行调试和故障排除 .......................... 147 14.0 简介 147 14.1 配置访问日志 147 14.2 配置错误日志 149 14.3 转发日志到 Syslog 150 14.4 请求跟踪 151 14.5 用于 NGINX 的 OpenTracing 152 15. 性能调优 ...................................................................................................... 155 15.0 简介 155 15.1 使用压测工具实现测试自动化 155 15.2 保持客户端长连接 156 15.3 保持上游长连接 157 15.4 响应缓冲 158 15.5 访问日志的缓冲 159 15.6 操作系统调优 159
Page
9
vii目录 16. NGINX Instance Manager 简介 ................................................................. 161 16.0 简介 161 16.1 设置概述 161 16.2 代理安装 163 16.3 使用 API 实现 NGINX 发现、配置和监控自动化 165 17. NGINX Controller 简介 ............................................................................... 167 17.0 简介 167 17.1 设置概述 167 17.2 连接 NGINX Plus 与 NGINX Controller 169 17.3 使用 API 驱动 NGINX Controller 170 17.4 通过 NGINX Controller 应用安全防护开启 WAF 171 18. 实用运维提示和结论 .................................................................................... 175 18.0 简介 175 18.1 使用 includes 简化配置 175 18.2 调试配置 176 19. 结语 ............................................................................................................. 179 20. 索引 ............................................................................................................. 181
Page
10
(This page has no text content)
Page
11
ix前言 前言 《NGINX 完全指南》旨在通过一些简单易懂的例子解析应用交付中真实存在的问题。 本书内容丰富全面,探讨了 NGINX 的大部分主要特性,可帮助您学习如何使用这些 功能。 本书涉及到了免费的开源版 NGINX 软件以及 NGINX Inc. 的商用产品 NGINX Plus 和 NGINX Controller。对于那些仅可通过付费订阅 NGINX Plus 才能获得的功能和指令, 本书将作出相关注释。由于 NGINX Plus 是一种应用交付控制器(ADC),提供了许 多高级功能,重点解释这些功能将有助于读者全面了解这一平台所提供的可能性。 本书将先解释 NGINX 和 NGINX Plus 的安装程序以及一些供 NGINX 新手借鉴的基础 入门步骤。后面的内容将过渡到各种形式的负载均衡,并分章节提供了关于流量管理、 缓存以及自动化的配套内容。第 6 章“身份验证”的涉及面很广,但同时也很重要, 因为 NGINX 通常是 Web 流量进入应用的第一个入口点,也是应用层抵御 Web 攻击 和漏洞的第一道防线。书中还有许多章节介绍了 HTTP/2、流媒体、云、service mesh (服务网格)和容器环境等前沿主题,最后又以一些更传统的运维主题收尾,例如监 控、调试、性能和运维技巧等。本书最后将介绍 NGINX Instance Manager1 和 NGINX Controller2(一个以应用为中心的管理平台)。 我个人将 NGINX 用作一个多功能工具,相信本书也能帮您实现这一点。这是一款可 靠、好用又值得信赖的软件。今日得幸于此畅谈,希望本书能给您带来些许启发,帮 助您运用 NGINX 解决棘手的现实问题。 1 NGINX Instance Manager 已于 2022 年正式合并入新产品 NGINX Management Suite,点击了解 详情。 2 NGINX Controller 已于 2022 年正式停售,点击了解相关新产品 NGINX Management Suite。
Page
12
x 前言 本书的使用惯例 本书使用了以下印刷惯例: 斜体 表示新术语、URL、电子邮件地址、文件名和文件扩展名。 此元素表示一般注释。 此元素表示警告或注意事项。 O'Reilly 在线学习平台 40 多年来,O'Reilly Media 一直致力于提供技术和商业培训、 知识以及洞察,帮助企业取得成功。 我们拥有一个独特的专家和创新者网络,他们通过图书、文章和我们的在线学习平台 分享知识和专业技能。O'Reilly 在线学习平台允许您按需访问实时培训课程、深度学习 路径、交互式编码环境以及来自 O'Reilly 和其他 200 多家出版商的大量精选文本和视 频。如欲了解更多信息,请访问:http://oreilly.com 如何联系我们 如对本书有任何意见和问题,请发送给出版商: O'Reilly Media, Inc. 1005 Gravenstein Highway North Sebastopol, CA 95472 800-998-9938(美国或加拿大)
Page
13
xi前言 707-829-0515(国际或本地) 707-829-0104(传真) 我们为本书建立了一个网页,上面列出了勘误表、示例和任何其他信息,访问地址: https://oreil.ly/NGINX-cookbook-2e 如对本书有任何意见或技术问题,请发送电子邮件至:bookquestions@oreilly.com 有关我们的图书和课程的新闻和信息,请访问:https://oreilly.com 请关注我们的 LinkedIn:https://linkedin.com/company/oreilly-media 请关注我们的 Twitter:https://twitter.com/oreillymedia 请关注我们的 YouTube 视频:https://youtube.com/oreillymedia 致谢 感谢 Hussein Nasser 和 Gonzalo Josue Spina 对本书作出的详细而富有见地的指导, 也感谢我的妻子在写作过程中对我的支持。
Page
14
(This page has no text content)
Page
15
1 基础知识 1.0 简介 无论是 NGINX 开源版还是 NGINX Plus,您都要先在系统上安装它们并学习一些基础 知识。在本章中,您将学习如何安装 NGINX、主要配置文件位于何处以及管理命令是 什么,还将了解如何验证您的安装并向默认服务器发出请求。 1.1 在 Debian/Ubuntu 上安装 NGINX 问题 在 Debian 或 Ubuntu 机器上安装 NGINX 开源版。 解决方案 更新已配置源的软件包信息,并安装一些有助于配置官方 NGINX 软件包仓库的软件包: apt-get update apt install -y curl gnupg2 ca-certificates lsb-release \ debian-archive-keyring 下载并保存 NGINX 签名密钥: curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \ | tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null 使用 lsb_release 设置定义操作系统和版本名称的变量,然后创建一个 apt 源文件: OS=$(lsb_release -is | tr '[:upper:]' '[:lower:]') RELEASE=$(lsb_release -cs) echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] \ http://nginx.org/packages/${OS} ${RELEASE} nginx" \ | tee /etc/apt/sources.list.d/nginx.list 第 1 章
Page
16
2 第 1 章:基础知识 再次更新软件包信息,然后安装 NGINX: apt-get update apt-get install -y nginx nginx 详解 本节提供的命令可指示高级打包工具(APT)软件包管理系统使用官方 NGINX 软件包 仓库。NGINX GPG 软件包签名密钥已下载并保存至文件系统的某个位置,以供 APT 使用。为 APT 提供签名密钥有助于 APT 系统验证仓库中的软件包。lsb_release 命令 用于自动确定操作系统和版本名称,用户可以在所有 Debian 或 Ubuntu 发布版本中使 用这些指令。apt-get update 命令指示 APT 系统从其已知的仓库中刷新软件包列表, 此后您便可以从官方 NGINX 仓库安装 NGINX 开源版。安装后,最后一个命令会启动 NGINX。 1.2 在 RedHat/CentOS 上安装 NGINX 问题 在 RedHat 或 CentOS 上安装 NGINX 开源版。 解决方案 创建一个名为 /etc/yum.repos.d/nginx.repo 的文件,其中包含以下内容: [nginx] name=nginx repo baseurl=http://nginx.org/packages/OS/OSRELEASE/$basearch/ gpgcheck=0 enabled=1 修改文件,将 URL 中间的 OS 替换为 rhel 或 centos,具体取决于您的发行版本。分别 将版本 7.x 或 8.x 的 OSRELEASE 替换为 7 或 8。然后运行以下命令: yum -y install nginx systemctl enable nginx systemctl start nginx firewall-cmd --permanent --zone=public --add-port=80/tcp firewall-cmd --reload
Page
17
3 详解 您刚刚为此解决方案创建的文件将指示 YUM 软件包管理系统使用官方 NGINX 开源版 软件包仓库。后面的命令将从官方仓库安装 NGINX 开源版,指示 systemd 在启动时 启用 NGINX,并告知它立即启动。防火墙命令为 TCP 协议打开端口 80,这是 HTTP 的默认端口。最后一个命令重新加载防火墙,以提交更改。 1.3 安装 NGINX Plus 问题 安装 NGINX Plus。 解决方案 请访问 http://cs.nginx.com/repo_setup 。从下拉菜单中选择您要将 NGINX Plus 安装到 哪个操作系统,然后按照说明进行操作。其安装说明与开源解决方案类似,但是您需 要安装一个证书,以便对 NGINX Plus 仓库进行身份验证。 详解 NGINX 会及时更新这个仓库安装指南和 NGINX Plus 安装说明。这些说明因您的操作 系统和版本而略有不同,但都有一个共同点:您必须从 NGINX 门户获取证书和密钥并 提供给您的系统,以便对 NGINX Plus 仓库进行身份验证。 1.4 验证安装 问题 验证 NGINX 是否安装成功并检查版本。 解决方案 您可以使用以下命令验证 NGINX 是否安装成功并检查其版本: 1.3 安装 NGINX Plus
Page
18
4 第 1 章:基础知识 $ nginx -v nginx version: nginx/1.21.3 如本例所示,响应显示了版本。 您可以使用以下命令确认 NGINX 是否正在运行: ps 命令列出了正在运行的进程。通过将该命令导入到 grep 中,您可以在输出中搜索 特定词。此示例使用 grep 搜索 nginx。结果显示有两个正在运行的进程:master 和 worker。如果 NGINX 正在运行中,您将始终可以看到一个 master 以及一个或多个 worker 进程。请注意,master 进程以 root 身份运行,因为 NGINX 只有使用最高权限 才能正常运行。有关启动 NGINX 的说明,请参阅下一节。要了解如何将 NGINX 作为 守护进程启动,请使用 init.d 或 systemd 方法。 要验证 NGINX 能否正确返回请求,请使用浏览器向您的机器发出请求或使用 curl。发 送请求时,请使用机器的 IP 地址或主机名。如果安装在本地,您可以使用 localhost, 如下所示: curl localhost 您将看到 NGINX 欢迎页面默认的 HTML 站点。 详解 nginx 命令允许您与 NGINX 二进制文件交互,以便检查版本、列出已安装的模块、测 试配置以及向 master 进程发送信号。NGINX 必须在运行时才能服务请求。ps 命令是 一种确定 NGINX 是守护进程还是前台进程的可靠方法。NGINX 默认提供的配置在端 口 80 上运行静态站点 HTTP 服务器。为了测试这一默认站点,您可以使用 localhost 以及主机的 IP 地址和主机名向机器发送 HTTP 请求。 1.5 关键文件、目录和命令 问题 了解重要的 NGINX 目录和命令。 $ ps -ef | grep nginx root 1738 1 0 19:54 ? 00:00:00 nginx: master process nginx 1739 1738 0 19:54 ? 00:00:00 nginx: worker process
Page
19
5 解决方案 NGINX 文件和目录 以下文件、目录和命令对于 NGINX 新手来说十分重要。 /etc/nginx/ /etc/nginx/ 目录是 NGINX 服务器的默认配置根,您可以从中找到指示 NGINX 如 何运行的配置文件。 /etc/nginx/nginx.conf /etc/nginx/nginx.conf 文件是 NGINX 服务使用的默认配置入口点。此配置文件能够 为 worker 进程、调优、日志记录、动态模块的加载以及对其他 NGINX 配置文件 的引用设置全局设置。在默认配置中,/etc/nginx/nginx.conf 文件包括顶层 http 代 码块,也就是上下文,它提供了下述目录中的所有配置文件。 /etc/nginx/conf.d/ /etc/nginx/conf.d/ 目录包含默认的 HTTP 服务器配置文件,其中以 .conf 结尾的 文件都包含在 /etc/nginx/nginx.conf 文件的顶层 http 代码块中。最佳实践是利用 include 语句并以这种方式组织配置,从而保持配置文件的简洁。在某些软件包仓 库中,此文件夹被命名为 sites-enabled,配置文件链接到 site-available 文件夹; 此惯例已不再使用。 /var/log/nginx/ /var/log/nginx/ 目录是 NGINX 的默认日志位置,您可以从中找到一个 access.log 文件和 error.log 文件。访问日志包含 NGINX 服务的每条请求的条目。如果启用了 debug 模块,则错误日志文件包含错误事件和调试信息。 NGINX 命令 nginx -h 显示 NGINX 帮助菜单。 nginx -v 显示 NGINX 版本。 nginx -V 显示 NGINX 版本、build 信息和配置参数,这些参数显示了 NGINX 二进制文件中 内置的模块。 1.5 关键文件、目录和命令
Page
20
6 第 1 章:基础知识 nginx -t 测试 NGINX 配置。 nginx -T 测试 NGINX 配置并将验证后的配置打印到屏幕上。此命令在寻求支持时很有用。 nginx -s signal -s 标记向 NGINX master 进程发送信号。您可以发送 stop、quit、reload 和 reopen 等信号。stop 信号可立即停止 NGINX 进程。quit 信号会在完成当前正在 处理的请求后停止 NGINX 进程。reload 信号可重新加载配置。reopen 信号指示 NGINX 重新打开日志文件。 详解 在了解这些关键文件、目录和命令后,您就可以准备开始使用 NGINX 了。您可以运用 这些知识更改默认配置文件,并使用 nginx -t 命令测试您的更改。如果测试成功,您还 将了解到如何使用 nginx -s reload 命令指示 NGINX 重新加载配置。 1.6 提供静态内容 问题 使用 NGINX 提供静态内容。 解决方案 使用以下 NGINX 配置示例覆盖位于 /etc/nginx/conf.d/default.conf 的默认 HTTP 服务 器配置: server { listen 80 default_server; server_name www.example.com; location / { root /usr/share/nginx/html; # alias /usr/share/nginx/html; index index.html index.htm; } }
The above is a preview of the first 20 pages. Register to read the complete e-book.
Comments 0
Loading comments...
Reply to Comment
Edit Comment