精通Nginx(第2版)(txt+pdf+epub+mobi电子书下载)


发布时间:2020-09-24 19:56:07

点击下载

作者:(瑞士) Dimitri Aivaliotis 艾维利

出版社:人民邮电出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

精通Nginx(第2版)

精通Nginx(第2版)试读:

前言

第1章 安装Nginx及第三方模块

1.1 使用包管理器安装Nginx

1.2 从源代码安装Nginx

1.3 配置SSL支持

1.4 使用各种模块

1.5 查找并安装第三方模块

1.6 添加对Lua的支持

1.7 组合在一起

1.8 小结

第2章 配置指南

2.1 基本配置格式

2.2 Nginx全局配置参数

2.3 使用include文件

2.4 HTTP的server部分

2.5 虚拟服务器部分

2.6 Locations—where,when,how

2.7 完整的示例配置文件

2.8 小结

第3章 使用mail模块

3.1 基本代理服务

3.2 认证服务

3.3 与memcached结合

3.4 解释日志文件

3.5 操作系统限制

3.6 小结

第4章 Nginx作为反向代理

4.1 反向代理简介

4.2 代理模块

4.3 带有cookie的遗留应用程序

4.4 upstream模块

4.5 保持活动连接

4.6 上游服务器的类型

4.7 单个上游服务器

4.8 多个上游服务器

4.9 非HTTP型上游服务器

4.10 负载均衡

4.11 将if配置转换为一个更现代的解释

4.12 使用错误文件处理上游服务器问题

4.13 确定客户端真实的IP地址

4.14 小结

第5章 反向代理高级话题

5.1 安全隔离

5.2 孤立应用程序组件的扩展

5.3 反向代理服务器的性能调优

5.4 小结

第6章 Nginx HTTP服务器

6.1 Nginx的系统架构

6.2 HTTP核心模块

6.3 使用limit指令防止滥用

6.4 约束访问

6.5 流媒体文件

6.6 预定义变量

6.7 SPDY和HTTP/2

6.8 使用Nginx和PHP-FPM

6.9 将Nginx和uWSGI结合

6.10 小结

第7章 Nginx的开发

7.1 集成缓存

7.2 动态修改内容

7.3 使用服务器端包含SSI(Server Side Include)

7.4 Nginx中的决策

7.5 创建安全链接

7.6 生成图像

7.7 跟踪网站访问者

7.8 防止意外代码执行

7.9 小结

第8章 在Nginx中集成Lua

8.1 ngx_lua模块

8.2 集成Lua

8.3 使用Lua记录日志

8.4 小结

第9章 故障排除技巧

9.1 分析日志文件

9.2 配置高级日志记录

9.3 常见的配置错误

9.4 操作系统限制

9.5 性能问题

9.6 使用Stub Status模块

9.7 小结

附录A 指令参考

附录B Rewrite规则指南

附录C Nginx社区

附录D Solaris系统下的网络调优

欢迎来到异步社区!

版权信息

书名:精通Nginx(第2版)

ISBN:978-7-115-45996-1

本书由人民邮电出版社发行数字版。版权所有,侵权必究。

您购买的人民邮电出版社电子书仅供您个人使用,未经授权,不得以任何方式复制和传播本书内容。

我们愿意相信读者具有这样的良知和觉悟,与我们共同保护知识产权。

如果购买者有侵权行为,我们可能对该用户实施包括但不限于关闭该帐号等维权措施,并可能追究法律责任。

• 著    [瑞士] Dimitri Aivaliotis

  译    李红军

  责任编辑 陈冀康

• 人民邮电出版社出版发行  北京市丰台区成寿寺路11号

  邮编 100164  电子邮件 315@ptpress.com.cn

  网址 http://www.ptpress.com.cn

• 读者服务热线:(010)81055410

  反盗版热线:(010)81055315版权声明

Copyright ©2017 Packt Publishing.

First published in the English language under the title Mastering NGINX,Second Edition.

All rights reserved.

本书由英国Packt Publishing公司授权人民邮电出版社出版。未经出版者书面许可,对本书的任何部分不得以任何方式或任何手段复制和传播。

版权所有,侵权必究。

内容提要

Nginx是一个高性能的轻量级Web服务器,本书从配置文件的角度出发,介绍了多种关于Nginx配置的技巧。

本书以模块化风格写成,几乎每一章都是一个独立的模块,读者将能够自由地在各个模块间切换阅读。全书分两部分,第一部分用9章内容介绍了安装Nginx及第三方模块、配置向导、使用mail模块、Nginx作为反向代理、Nginx Http服务器、Nginx的开发、在Nginx中集成Lua以及故障排除技巧;第二部分用4个附录的形式介绍了指令参考、Rewrite规则指南、Nginx社区以及Solaris系统下的网络调优。

本书适合在安装和配置服务器方面有经验的系统管理员或系统工程师,阅读本书不需要任何Nginx使用经验,相信这本书会帮助读者更好地完成任务。

作者简介

从构建基于Linux的计算机网络到为银行构建多数据中心的高可用性基础设施和流行的门户网站,他在解决客户问题上已经花费了10多年时间,并且在这条路上发现了Nginx。

Dimitri以最优异的成绩获得了伦斯勒理工学院的理科学士,并且获得了佛罗里达州立大学管理信息系统的理科硕士。人们会认为第2版应该很容易撰写,纠正第1版的错误并更新其内容。一方面,这比从头开始撰写要少写很多,但另一方面,一切都必须重新评估。它不像起初看起来那么容易。我要感谢所有审稿人,让我诚实,并指出阐述不清楚的内容。当然,剩下的任何错误是我自己的。感谢Packt再次给我撰写这本书的机会。感谢Nginx公司创建一个如此灵活和高效的产品,它在当今仍被广泛使用。

审稿人简介

Markus Jelsma是Openindex私人有限公司的CTO与共同所有人,Openindex私人有限公司是一家专门从事开源搜索和爬虫解决方案的荷兰公司。作为Apache Nutch的提交者和PMC成员,他是搜索引擎技术和爬虫解决方案方面的专家。

译者序

Nginx是俄罗斯软件工程师Igor Sysoev开发的免费开源Web服务器软件。Nginx于2004年发布,聚焦于轻量级、高并发、高性能、高度模块化的设计与低内存消耗问题。它具有多种Web服务器功能特性:负载均衡、缓存、访问控制、带宽控制以及高效整合各种应用的能力,这些特性使得Nginx很适合于现代网站架构。目前,Nginx是互联网上仅次于Apache的第二流行的开源Web服务器软件。《精通Nginx(第2版)》一书是艾维利的代表作,该书第1版于2013年3月出版,时隔3年,本书第2版于2016年7月出版。在《精通Nginx(第2版)》中,艾维利从配置文件的角度出发,介绍了多种关于Nginx的配置技巧。本书以模块化风格写成,几乎每一章都是一个独立的模块,读者将能够自由地在各个模块间切换阅读。全书分两部分,第一部分用9章内容介绍了安装Nginx及第三方模块、配置指南、使用mail模块、Nginx作为反向代理、反向代理高级话题、Nginx HTTP服务器、Nginx的开发、在Nginx中集成Lua以及故障排除技巧;第二部分用4个附录的形式介绍了指令参考、Rewrite规则指南、Nginx社区以及Solaries系统下的网络调优。了解Nginx新版本的新内容、熟练掌握Nginx的开发并将其灵活运用在工作环境中,这些都是Nginx用户和Web开发人员的迫切需求。

感谢原作者艾维利,感谢他为全球的Nginx开发者带来了这本充满智慧的Nginx图书。感谢本书第1版译者陶利军老师所做的工作。感谢人民邮电出版社信息技术分社引进如此高品质的图书,感谢人民邮电出版社的陈冀康老师对我的信任,把这本书交给了我翻译。他在本书编辑过程中所表现出来的热心、耐心和敬业精神令我十分感动,与陈冀康老师合作,让人非常愉快!人民邮电出版社的编辑们为本书的出版在幕后做了大量艰苦细致的工作,才让本书得以面世,译者谨向他们表示衷心的感谢。希望所有使用Nginx以及对Nginx开发感兴趣的读者都能从中获益。

译者也是抱着一颗炽热的学习之心在阅读和翻译本书的,并且希望把这本书推荐给身边更多的朋友。由于译者自身对本书内容的理解深度可能有所欠缺,在翻译的过程中难免出现一些不够准确或者不清楚的描述。读者若发现翻译处理不当之处,欢迎批评指正。

最后,需要深深感谢在翻译过程中给予我理解、支持、帮助的家人和朋友们。李红军2016年12月19日hjliemail@yahoo.com

前言

Nginx是一台高性能Web服务器,它使用了非常少的系统资源。在互联网上出现很多how-to和示例配置文件,这会澄清Nginx配置的浑水。这样做,你将会学到在各种环境中如何调整Nginx以及一些模糊的配置选项,以便设计一个符合你需求的配置文件。

在已经理解了如何根据自己的需求来构建一个配置文件后,你就不再需要复制、粘贴、配置片段了。这是一个过程,而且会有曲折。不过本书有关技巧的解释,会使你觉得手写配置文件是一件很舒服的事情。万一事情不像期望中的那样工作,你将能够独立地调试该问题,或者至少能够寻求帮助,而不会觉得自己好像都没有尝试过。

这是一本以现代风格所写的书,这种设计有助于你尽可能快地获取信息。几乎每一章都是一个独立模块,你可以根据需要自由地跳到任何地方来获取更深入的特定主题。如果觉得错过了某些主要的内容,那么你可以返回去读取前面的章节。它们在这种方式下构建,以帮助你的配置文件一步步成长。本书涵盖的内容

第1章,安装Nginx及第三方模块。教你如何在选择的操作系统上安装Nginx以及在你的安装中如何包含第三方模块。

第2章,配置指南,讲解Nginx的配置文件格式,你将学到每一个不同区段的配置,如何配置全局参数以及location的用处。

第3章,使用mail模块,探索Nginx的邮件代理模块,详细介绍配置的方方面面。在本章中,还有一个认证服务的代码示例。

第4章,Nginx作为反向代理,介绍反向代理的概念,并且描述Nginx如何充当该角色。

第5章,反向代理高级话题,深入研究使用Nginx作为反向代理解决可伸缩及性能的问题。

第6章,Nginx HTTP服务器,描述如何使用各种模块,包括通过Nginx解决常见的Web服务问题。

第7章,Nginx的开发,展示Nginx如何与你的应用程序集成,以便更快速地把内容交付给你的用户。

第8章,在Nginx中集成Lua,对如何使用嵌入式脚本语言Lua扩展Nginx功能提供一个概览。

第9章,故障排除技巧,研究一些常见的配置文件,一旦出现问题如何调试,以及调优性能的一些建议。

附录A,指令参考,提供一个方便的配置指令参考,这些指令贯穿全书,也有一些以前未覆盖到的其他指令。

附录B,Rewrite规则指南,描述如何使用Nginx的Rewrite规则模块,并描述将Apache格式的rewrite规则转换为Nginx可处理的rewrite规则的一些步骤。

附录C,Nginx社区,介绍可以搜寻到的更多的线上资源。

附录D,Solaris系统下的网络调优,详述Solaris 10及以上版本系统下的网络调优的必要性。使用这本书你需要做的

任何现代Linux PC都能充分运行本书中的示例代码。示例代码在每一章都给定了安装操作指南。基本上可以归纳如下。● 构建环境:编译器、头文件,等等。● Nginx:最好是最新版本。● Ruby:最好从https://rvm.io安装。● Perl:默认版本较好。谁需要这本书

这本书适用有经验的系统管理员或者系统工程师,熟悉服务器的安装和配置以满足特定的需求。你不需要有使用Nginx的经验。本书约定

本书采用了一些不同风格的文本样式,便于区分不同的信息。这里有一些格式的示例,并有解释说明。

文本格式的代码字符、数据库表名、文件夹名、文件名、文件扩展名、路径名、虚拟URL、用户输入和Twitter处理如下列格式显示:“This section will be placed at the top of the nginx.conf configuration file.”

代码块设置如下:http { include /opt/local/etc/nginx/mime.types; default_type application/octet-stream; sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; server_names_hash_max_size 1024;}

任何命令行输入或者输出书写如下:$ mkdir $HOME/build$ cd $HOME/build && tar xzf nginx-.tar.gz

新术语与重要的字以粗体显示。你在屏幕上看到的字,例如,在菜单或者对话框中,会出现类似这样的版本:“Clicking theNext button moves you to the next screen.”警告或者重要的事项出现在这样的框内。提示和技巧以这种方式显示。读者反馈

从读者获悉的反馈总是受欢迎的,它让我们知道你对本书的想法——什么是你喜欢的,什么是你不喜欢的。对于我们而言,读者反馈很重要,它使我们的课题发挥更大作用。

向我们发送一般的反馈,只需简单地发送电子邮件至feedback@packtpub.com,并且在邮件的主题部分提及本书名称就可以了。

如果有你擅长的主题,并且你对写作或者投稿感兴趣,那么你可以看看我们的作者向导www.packtpub.com/authors。客户支持

现在你自豪地成为Packt书的读者了。我们可以为你提供若干售后服务。下载示例代码

你可以从http://www.packtpub.com上用你的账号下载本书的示例代码,如果你从别的地方购买了这本书,你可以访问http://www.packtpub.com/support并注册,那么代码会以邮件的形式直接发送给你。

你可以通过如下步骤来下载代码文件。

1.使用你的电子邮件地址和密码登录或注册我们的网站。

2.鼠标指针悬浮在顶部的SUPPORT标签。

3.单击Code Downloads & Errata。

4.在Search框中,输入书名。

5.选择你要下载代码文件的图书。

6.从下拉菜单中选择你购买的图书。

7.单击Code Download。

下载完代码文件后,请确保你使用了如下最新版本的软件来解压或提取文件夹。● Windows系统下的WinRAR、7-Zip。● Mac系统下的Zipeg、iZip、UnRarX。● Linux系统下的7-Zip、PeaZip。下载本书的彩图

我们还为你提供了PDF文件,它载有本书使用到的截图。这些彩图可以更好地帮助你理解输出中的变化。你可以从http://www.packtpub.com/sites/default/files/downloads/Bookname_ ColorImages.pdf下载该文件。勘误表

尽管我们非常小心地确保图书内容的准确性,但是错误还是会发生。如果你在我们的任何一本图书中发现了错误——可能是文本错误,也可能是代码错误,并把它向我们报告,我们将非常感谢。通过这样做,你可以使其他读者免于阅读错误,并且帮助我们在本书的后续版本中更正。如果你想查找任何勘误表,请通过http://www.packtpub. com/submit-errata访问它们,选择你要找的图书,单击Errata Submission Form链接,就会进入本书的详细勘误表。一旦你的勘误表被校验,那么你的提交将会被接受,并且在我们网站上的勘误表将会被更新,或者添加到任何位于标题部分下的现有勘误表中。

进入https://www.packtpub.com/books/content/support,通过在搜索框输入图书名称,你都可以查看之前的勘误表。需要的信息会出现在Errata部分。版权保护

在互联网上,侵犯受版权保护资料的盗版行为,一直是一个持续的跨越全媒体的问题。在Packt,我们非常重视版权和许可。如果你在互联网上偶然发现以任何形式非法复制我们文字的地方,请立即提供给我们地址或者网站的名字,以便使我们能够追究补救办法。

请联系我们copyright@packtpub.com,并且附上涉嫌盗版的材料链接。

我们非常感谢你帮助保护我们的作者,并且我们有能力给读者带来有价值的内容。问题

如果有任何关于本书的问题,你可以联系我们questions@packtpub.com,我们将会尽量解决。第1章 安装Nginx及第三方模块

Nginx最初的设计,是成为一个HTTP服务器,一个能解决C10K问题的HTTP服务器。关于C10K这个问题,Daniel Kegel在http://www.kegel.com/c10k.html页面有具体描述,它旨在设计一个同时连接处理10000连接数的Web服务器。为了实现这个目标,Nginx通过基于事件的连接—处理机制,并且操作系统也要使用相应的事件机制,便可以解决C10K问题。

在我们开始探索如何配置Nginx之前,首先我们要安装它。这一章将详细讲述如何安装Nginx,以及如何获取正确的模块并安装与配置它们。Nginx是模块化设计的,并且有非常丰富的第三方模块开发者社区。它们的设计者通过创建这些模块为核心Nginx服务器增添了功能,我们可以在编译安装Nginx时将它们添加到Nginx服务器。

在这一章中,本书涉及如下内容。● 使用包管理器安装Nginx。● 通过源代码安装Nginx。● 为Web或者Mail服务器配置Nginx。● 配置SSL支持。● 使用各种模块。● 查找并安装第三方模块。● 添加对Lua的支持。● 组合在一起。1.1 使用包管理器安装Nginx

使用包管理器安装Nginx的机会,是你所使用的操作系统己经提供了nginx的安装包。使用包管理器安装Nginx的方法很简单,只需要使用包管理器安装命令就可以了:● Linux(基于deb)

sudo apt-get install nginx● Linux(基于rpm)

sudo yum install nginx● FreeBSD

sudo pkg_install -r nginx命令sudo表示的是通过操作系统中的超级用户(root)权限执行的命令。如果操作系统支持RBAC(role-based access control),那么可以用一个不同的命令,例如“pfexec”,来达到同样的目的。

通过上述命令,Nginx将会安装到操作系统的标准位置下。如果使用操作系统的安装包安装Nginx,那么通过上面的命令来安装是最佳方式。

Nginx核心团队也提供了稳定的二进制版本,可以从http://nginx.org/en/download.html页面下载可用的版本。未发布nginx安装包的系统用户(例如,CentOS),可以使用下面的指导来安装预测试、预编译二进制版本。1.1.1 在Centos上安装Nginx

通过创建下面的文件,在系统中添加Nginx仓库的yum配置:sudo vi /etc/yum.repos.d/nginx.repo[nginx]name=nginx repobaseurl=http://nginx.org/packages/centos/7/$basearch/gpgcheck=0enabled=1

然后,通过执行如下命令来安装nginx:sudo yum install nginx

也可以按照前面介绍的URL下载nginx发行版安装。1.1.2 在Debian上安装Nginx

使用如下步骤在Debian上安装Nginx。

1.通过从http://nginx.org/keys/nginx_signing.key下载并安装Nginx签名key,将该签名key添加到系统的apt密钥中: sudo apt-key add nginx_signing.key

2.将nginx.org仓库追加到/etc/apt/sources.list文件的末尾: vi /etc/apt/sources.list deb http://nginx.org/packages/debian/jessie nginx deb-src http://nginx.org/packages/debian/jessie nginx

3.然后,通过执行如下命令来安装nginx: sudo apt-get update sudo apt-get install nginx

如果所使用的操作系统在它可用的安装包中未包含 nginx,或是所包含的版本太老不能满足需要,或是nginx.org并未提供所需要的安装包,或是你想使用“development”版本的Nginx,或者是你想启用或禁用特定的模块,那么从源代码编译的方法来安装Nginx是唯一可用的另外一个方法。1.2 从源代码安装Nginx

Nginx 代码提供了两种独立的下载分支——开发版与稳定版。开发分支是一个正处于积极开发状态的版本。在这个版本中,会有一些新功能被集成到其中,在稳定版中是找不到这些功能的。当发布一个“开发”版时,它会经历同样的QA和作为稳定版的一组类似功能测试。因此,无论哪一个分支都可以用于生产环境中。两者主要的不同,在于对第三方模块的支持。在开发版中,内部的API可能会发生改变,而稳定版则保持不变。因此,为了与第三方模块向下兼容,在稳定版中第三方模块都可以有效使用。1.2.1 准备编译环境

为了从源代码编译Nginx,系统需要满足某些必要条件。除了编译器之外,如果想分别启用SSL支持和使用rewrite模块,那么还需要提供相应的OpenSSL与PCRE(Perl Compatible Regular Expressions)库及开发头文件。rewrite模块是默认安装的。如果你没有PCRE库与开发头文件,你需要在配置阶段禁用rewrite模块。这依赖于系统,也有可能在系统中已经默认安装了这些必要条件。如果没有安装,则需要从其安装包安装或者从源码下载并解压安装,并在Nginx的配置脚本文件中指定它们在系统中的安装位置。

如果在配置文件中使用了--with-=选项,那么Nginx会试图建立一个静态依赖库。如果你想让Nginx不依赖于系统任何其他部分,或是想多获得些nginx的二进制额外性能,那么你可能会使用构建静态库的做法。如果你使用的外部库功能只能从某一个版本起有效(例如,NPN[Next Protocol Negotiation] TLS扩展从OpenSSL 1.0.1版有效),那么你就不得不将其指定到特定版本解压后的源代码路径中。

根据自己的喜好,你可能会提供其他的、可选安装包。你可以为这些安装包提供支持。它们包括MD5和SHA-1以支持散列算法、zip压缩库、libatomic库。在Nginx中,很多地方会用到散列算法,例如,为了计算URI散列进而计算缓存key。

zlib压缩库被用来投递gzip压缩内容。如果atomic_ops库有效,那么Nginx会用它来实现自动内存更新操作,以便实现高性能的内存锁定代码。1.2.2 从源代码编译

读者可以从http://nginx.org/en/download.html下载Nginx,在该页面找到.tar.gz或者.zip格式的源代码分支,按照如下步骤将下载的安装包解压到一个临时目录中:$ mkdir $HOME/build$ cd $HOME/build && tar xzf nginx-.tar.gz

使用下面的命令配置Nginx:$ cd $HOME/build/nginx- && ./configure

然后,使用下面的命令进行编译安装:$ make && sudo make install

在编译自己的二进制nginx时,你会有很大的灵活性来包含你仅使用的功能。你已经指定使用哪个用户运行Nginx了吗?你要使用默认的logfile位置,以便不用在Nginx的配置文件明确地说明它们吗?表1-1所示是配置选项列表,通过它来帮助你设计出自己的nginx命令。这些选项对Nginx都是有效的,模块可以被独立激活。表1-1  通用配置选项选项解释--prefix=Nginx安装的根路径,所有其他的安装路径都要依赖于该选项--sbin-指定nginx二进制文件的路径。如果没有指定,那么这个路径会依path=赖于——prefix选项--conf-如果在命令行没有指定配置文件,那么将会通过这里指定的路径,path=nginx将会去那里查找它的配置文件--error-log-指定错误文件的路径,nginx将会往其中写入错误日志文件,除非path=有其他的配置--pid-指定的文件将会写入nginx master进程的pid,通常在/var/run下path=--lock-共享存储器互斥锁文件的路径path=--user=worker进程运行的用户--worker进程运行的组group=--with-file-aio为FreeBSD 4.3 +和Linux 2.6.22 +系统启用异步I/O--with-debug这个选项用于启用调试日志。在生产环境的系统中不推荐使用该选项

如表 1-2 所示,你可以使用优化编译,但你可能无法在包管理器安装中获得优化。这正是表1-2中选项的用武之地。表1-2  配置优化选项选项说明--with-如果想设置一个不在默认PATH下的C编译器cc=--with-设置C预处理器的相应路径cpp=--with-cc-指定必要的include文件路径,可能(-I)指出,也可能是优opt=化(-O4)并指定一个64位构建--with-ld-包含连接器库的路径(-L)和运行路径(-R)opt=--with-cpu-通过该选项为特定的CPU构建Nginxopt=1.2.3 为Web或者Mail服务器配置Nginx

Nginx是一个独一无二的高性能Web服务器,它也被设计成为一个邮件代理服务器。根据你构建Nginx的目标,可将其配置成一个Web加速器、Web服务器、邮件代理,或者是集三者为一体。你可以将任何服务安装在一个二进制文件中,这样做的好处是可以通过配置文件来设置Nginx服务器的角色,或者根据需要在高性能的环境中安装一个精简的二进制Nginx文件。1.2.4 邮件代理的配置选项

如表1-3所示,是邮件模块独有的配置选项。表1-3  mail配置选项选项说明--with-mail该选项用于启用mail模块,该模块默认没有被激活--with-为了代理任何一种类型的使用SSL/TLS的mail,需要激活该模mail_ssl_module块--without-在启用mail模块后,单独地禁用POP3模块mail_pop3_module--without-在启用mail模块后,单独地禁用IMAP模块mail_imap_module--without-在启用mail模块后,单独地禁用SMTP模块mail_smtp_module--without-http该选项将会完全禁用http模块,如果你只想支持mail,那么可以使用它

对于典型的mail代理,我推荐将Nginx配置为:$ ./configure --with-mail --with-mail_ssl_module --with-openssl=${BUILD_ DIR}/openssl-1.0.1p

对于邮件服务器来说,现在几乎每一个邮件服务器的安装都需要安装SSL/TLS,并且没有一个邮件代理启用了预期功能的劫持用户。我推荐静态编译OpenSSL,以便对操作系统中的OpenSSL库没有依赖性。不过,这确实意味着你必须保持警惕,确保你的静态编译的OpenSSL保持最新,并在必要时重建你的二进制文件。在前面命令中使用的变量BUILD_DIR需要提前设置。1.2.5 指定路径的配置选项

表1-4显示了http模块有效的配置选项,从激活Perl模块到指定临时目录的位置。表1-4  http配置选项选项说明--without-http-在使用upstream模块时,Nginx能够配置本地缓存内容。这个选项cache能够禁用缓存--with-Nginx配置能够扩展使用Perl代码。这个选项启用这个模块(然而,http_perl_modulI/O受阻塞时,使用这个模块会降低性能。)e--with-对于额外嵌入的Perl模块,使用该选项指定该Perl解析器的路径。perl_modules_p也可以通过配置选项来指定Perl模块解析器的位置ath= --with-如果在默认的路径中没有找到Perl,那么指定Perl(5.6.1版本以perl=上)的路径--http-log-http访问日志的默认路径path=--http-client-从客户端收到请求后,该选项设置的目录用于作为请求体临时存body-temp-放的目录。如果WebDAV模块启用,那么推荐设置该路径为同一path= 文件系统上的目录作为最终的目的地--http-proxy-在使用代理后,通过该选项设置存放临时文件路径temp-path= --http-fastcgi-设置FastCGI临时文件的目录temp-path = --http-uwsgi-设置uWSGI临时文件的目录temp-path= --http-scgi-temp-设置SCGI临时文件的目录path=1.3 配置SSL支持

对于TLS/SSL协议,Nginx使用OpenSSL项目。有关此开源工具包的更多信息,请访问https://www.openssl.org。你可以从操作系统或者直接从工具包的单独副本来获取对SSL的支持。如果使用不带--with-ssl选项的--with-http_ssl_module或者--with-mail_ssl_module,你正在使用执行了configure命令的、安装在计算机上的OpenSSL库。如果你想要针对特定版本的OpenSSL进行编译,请下载该分发包,将其解压缩到一个目录中,然后将该目录的路径指定为--with-openssl的参数。使用--with-openssl-opt选项为OpenSSL本身指定额外的构建选项。

例如,为了使用具有优化椭圆曲线的OpenSSL来构建Nginx,您将使用如下的命令:$ ./configure --with-http_ssl_module --with-openssl=${BUILD_DIR}/openssl- 1.0.1p --with-openssl-opt=enable-ec_nistp_64_gcc_1281.4 使用各种模块

在Nginx发布的版本中,除了http和mail模块之外,还有其他一些模块。这些模块并没有在默认安装中激活,但是可以在编译安装时适当地配置选项--with-_module来启用相应的选项,如表1-5所示。表1-5  http模块配置选项选项说明--with-如果需要对流量进行加密,那么可以使用到这个选项,在URL中http_ssl_module开始部分将会是https(需要OpenSSL库)--with-如果你的Nginx在七层负载均衡器或者是其他设备之后,它们将http_realip_modhttp头中的客户端IP地址传递,那么你将会需要启用这个模块。在ule多个客户处于一个IP地址的情况下使用--with-这个模块作为一个输出过滤器,使你能够在请求经过一个locationhttp_addition_m前或者后时在该location本身添加内容odule--with-该模块用于处理XML响应转换,基于一个或者多个XSLT格式(需http_xslt_modul要libxml2和libxslt库)e--with-该模块被作为图像过滤器使用,在将图像投递到客户之前进行处http_image_filter理(需要libgd库)_module--with-使用该模块,能够设置各种变量以便在配置文件中的区段使用,http_geoip_mod基于地理位置查找客户端IP地址(需要MaxMind GeoIP库和相应ule的预编译数据库文件)--with-该模块实现了替代过滤,在响应中用一个字符串替代另一个字符http_sub_modul串,提醒一句:使用该模块隐式禁用标头缓存e--with-启用这个模块将激活使用WebDAV的配置指令。请注意,这个模http_dav_modul块也只在有需要使用的基础上启用,如果配置不正确,它可能带e来安全问题--with-如果需要提供Flash流媒体视频文件,那么该模块将会提供伪流媒http_flv_module体--with-这个模块支持H.264/AAC文件伪流媒体http_mp4_module--with-当被调用的资源没有.gz结尾格式的文件时,如果想支持发送预压http_gzip_static缩版本的静态文件,那么使用该模块_module--with-对于不支持gzip编码的客户,该模块用于为客户解压缩预压缩内http_gunzip_mo容dule--with-如果你想提供从一个目录中随机选择文件的索引文件,那么这个http_random_in模块需要被激活dex_module--with-该模块提供了一种机制,它会将一个散列值链接到一个URL中,http_secure_link因此,只有那些使用正确的密码能够计算链接_module--with-启用这个模块后会收集Nginx自身的状态信息。输出的状态信息可http_stub_status以使用RRDtool或类似的内容来绘制成图_module

正如你所看到的,所有这些模块都是建立在http模块的基础之上,它们提供了额外的功能。在编译时启用这些模块根本不会影响到运行性能,以后在配置使用这些模块时性能会产生影响。

因此,对于网络加速器/代理,就配置选项来说,我想提出以下建议。$ ./configure --with-http_ssl_module --with-http_realip_module --with- http_ geoip_module --with-http_stub_status_module --with-openssl=${BUILD_DIR}/ openssl-1.0.1p

下面是Web服务器的建议:$ ./configure --with-http_stub_status_module

不同之处在于Nginx面对的客户,处于Web加速角色时,会考虑到SSL请求的终结,也包括处理代理客户和基于客户来源决策;处于Web服务角色时,则仅需要提供默认文件访问能力。

我总是推荐启用stub_status模块,这是因为它提供了收集Nginx如何执行、如何对其度量的一个方法。禁用不再使用的模块

有些http模块通常情况下是激活的,但是可以通过设置适当的--without-_module选项禁用它们。如果在配置中不使用这些模块,如表1-6所示,那么你可以禁用它们。表1-6  禁用的配置选项选项说明--without-该字符集模块负责设置Content-Type响应头,以及从一个字http_charset_module符集转换到另一个字符集--without-gzip 模块作为一个输出过滤器,在将内容投递到客户时对内http_gzip_module容进行压缩--without-该模块是一个过滤器,用于处理SSI包含。如果启用了Perl模http_ssi_module块,那么额外的SSI指令(perl)可用--without-userid模块能够使得Nginx设置cookies,用于客户标识。变量http_userid_module$uid_set和$uid_got可以记录用户跟踪--without-access模块基于IP地址控制访问locationhttp_access_module--without-该模块通过HTTP基本身份验证限制访问http_auth_basic_module--without-如果一个目录中没有index文件,那么autoindex模块能够收集http_autoindex_modu这个目录列出文件le--without-该模块能够让你基于客户端IP地址设置配置变量,然后根据http_geo_module这些变量的值采取行动--without-map模块能够让你映射一个变量到另一个变量http_map_module--without-该模块创建用于A/B测试的变量http_split_clients_module--without-该模块能够让Nginx阻止基于Referer HTTP头的请求http_referer_module--without-通过rewrite模块能够让你基于变量条件改变URIhttp_rewrite_module--without-使用proxy模块允许Nginx将请求传递到其他服务器或者服务http_proxy_module器组--without-FastCGI模块能够让Nginx将请求传递到FastCGI服务器http_fastcgi_module--without-该模块能够让Nginx将请求传递到uWSGI服务器http_uwsgi_module--without-SCGI模块能够让Nginx将请求传递到SCGI服务器http_scgi_module--without-该模块能够使得Nginx与一个memcached服务器进行交互,http_memcached_m将响应放置到变量查询中odule--without-该模块能够使得Nginx基于某些键,通常是IP地址,设置连接http_limit_conn_mod限制ule--without-通过该模块,Nginx能够限制每个用户的请求率http_limit_req_module--without-在内存中空的GIF模块产生一个1像素×1像素的透明GIF图像http_empty_gif_module--without-browser模块允许基于User-Agent HTTP请求头配置,变量的http_browser_module设置基于在该头中发现的版本--without-该模块定义了一组可以与不同的代理模块结合使用的服务器http_upstream_ip_hash_module1.5 查找并安装第三方模块

由于有多个开源项目,所以在Nginx周围就会有一个活跃的开发社区。由于Nginx的模块化特性,这个社区能够开发和发布模块,从而为Nginx提供额外的功能。它们涵盖了广泛的应用,所以着手开发自己的模块之前应该看看有什么可用模块。

安装第三方模块的过程相当简单,步骤如下。

1.定位你想要使用的模块(在https://github.com或者是http://wiki.nginx.org/3rdPartyModules查找)。

2.下载该模块。

3.解压缩源代码安装包。

4.如果有README文件,那么阅读README文件,查看在安装中是否有依赖安装。

5.通过./configure–add-module=选项配置使用该模块。

这个过程会给你的nginx二进制文件与模块附加这个功能。

需要注意的是,很多第三方模块是实验性质的。因此,在将这些模块用于生产系统之前,首先要测试使用这些模块。另外请记住,Nginx的开发版本中可能会有API的变化,会导致第三方模块出现问题。1.6 添加对Lua的支持

特别应该提到的是ngx_lua这个第三方模块,ngx_lua模块提供了启用Lua的功能,而不是像Perl一样在配置时嵌入式脚本语言。该模块对于perl模块来说最大的优点就是它的无阻塞性,并与其他第三方模块紧密集成。对于它的安装说明的完整描述详见:https://github.com/ openresty/lua-nginx-module#installation。我们将以这个模块为例,在下一节中介绍如何安装第三方模块。1.7 组合在一起

现在你已经大概了解了各种配置选项,接下来你可以根据自己的需要设计一个二进制文件。下面的例子中,指定了prefix、user、group,某些路径禁用了某些模块,启用了一些其他模块,并包括一些第三方模块。$ export BUILD_DIR='pwd'$ export NGINX_INSTALLDIR=/opt/nginx$ export VAR_DIR=/home/www/tmp$ export LUAJIT_LIB=/opt/luajit/lib$ export LUAJIT_INC=/opt/luajit/include/luajit-2.0$ ./configure \ --prefix=${NGINX_INSTALLDIR} \ --user=www \ --group=www \ --http-client-body-temp-path=${VAR_DIR}/client_body_temp \ --http-proxy-temp-path=${VAR_DIR}/proxy_temp \ --http-fastcgi-temp-path=${VAR_DIR}/fastcgi_temp \ --without-http_uwsgi_module \ --without-http_scgi_module \ --without-http_browser_module \ --with-openssl=${BUILD_DIR}/../openssl-1.0.1p \ --with-pcre=${BUILD_DIR}/../pcre-8.32 \ --with-http_ssl_module \ --with-http_realip_module \ --with-http_sub_module \ --with-http_flv_module \ --with-http_gzip_static_module \ --with-http_gunzip_module \ --with-http_secure_link_module \ --with-http_stub_status_module \ --add-module=${BUILD_DIR}/ngx_devel_kit-0.2.17 \ --add-module=${BUILD_DIR}/ngx_lua-0.7.9

接下来,跟随的大量输出显示了在你的系统上能找到什么样的配置,概要打印出来,配置如下所示。Configuration summary + using PCRE library: /home/builder/build/pcre-8.32 + using OpenSSL library: /home/builder/build/openssl-1.0.1p + md5: using OpenSSL library + sha1: using OpenSSL library + using system zlib library nginx path prefix: "/opt/nginx" nginx binary file: "/opt/nginx/sbin/nginx" nginx configuration prefix: "/ opt/nginx/conf" nginx configuration file: "/opt/nginx/conf/nginx.conf" nginx pid file: "/ opt/nginx/logs/nginx.pid" nginx error log file: "/opt/nginx/logs/error.log" nginx http access log file: "/opt/nginx/logs/access.log" nginx http client request body temporary files: "/home/www/tmp/ client_ body_temp" nginx http proxy temporary files: "/home/www/tmp/proxy_temp" nginx http fastcgi temporary files: "/home/www/tmp/fastcgi_temp"

如上所示,configure找到了所有我们要查找的条目,并且按照我们的喜好设置了路径。现在,你可以构建你的nginx并安装它,正如本章一开始提到的。1.8 小结

本章介绍了各种Nginx的有效模块,通过编译你自己的二进制文件,你可以定制Nginx能够为你提供哪些功能。对于你来说,构建和安装软件应该不会陌生。所以,创造一个构建环境或者确保所有依赖关系都存在,这并不会花费你很多的时间。一个Nginx的安装应该是按照你的需要,能随时启用或禁用模块,正如你看到的,启用或者是禁用一个模块应该感到很容易。

接下来,我们将介绍基本的Nginx配置概述,以便感受一下在通常情况下Nginx是如何配置的。第2章 配置指南

Nginx 配置文件的格式非常合乎逻辑。学习这种格式以及如何使用每个部分是基础,这将有助于你手工创建一个配置文件。构造配置涉及为每个单独的段指定全局参数和指令。这些指令以及它们如何适应整个配置文件是本章的主要内容。目标是了解如何创建正确的配置文件以满足你的需求。

通过这一章的讨论话题,帮助你达到如下目标。● 基本配置格式。● Nginx全局配置参数。● 使用include文件。● HTTP的server部分。● 虚拟服务器部分。● location——where, when, how。● mail的server部分。● 完整的示例配置文件。2.1 基本配置格式

基本的Nginx配置文件由若干个部分组成,每一个部分都是通过下列方法定义的。

{ ;}

需要注意的是,每一个指令行都由分号结束(;),这标记着一行的结束。大括号({})实际上表示一个新配置的上下文(context),但是在大多数情况下,我们将它们作为“节、部分(section)”来读。2.2 Nginx全局配置参数

全局配置部分被用于配置对整个server都有效的参数和前一个章节中的例外格式。全局部分可能包含配置指令,例如,user和worker_processes,也包括“节、部分(section)”。例如,events,这里没有大括号({})包围全局部分。

在全局部分中,最重要的配置指令都在表 2-1 中,这些配置指令将会是你处理的最重要部分。表2-1  全局配置指令

全局配置指令说明user使用这个参数来配置worker进程的用户和组。如果忽略group,那么group的名字等于该参数指定用户的用户组worker_process指定worker进程启动的数量。这些进程用于处理客户的所有连es接。选择一个正确的数量取决于服务器环境、磁盘子系统和网络基础设施。一个好的经验法则是设置该参数的值与CPU绑定的负载处理器核心的数量相同,并用1.5~2之间的数乘以这个数作为I/O密集型负载error_logerror_log是所有错误写入的文件。如果在其他区段中没有设置其他的error_log,那么这个日志文件将会记录所有的错误。该指令的第二个参数指定了被记录错误的级别(debug、info、notice、warn、error、crit、alert、emerg)。注意,debug级别的错误只有在编译时配置了--with-debug选项才可以使用pid设置记录主进程ID的文件,这个配置将会覆盖编译时的默认配置use该指令用于指示使用什么样的连接方法。这个配置将会覆盖编译时的默认配置,如果配置该指令,那么需要一个events区段。通常不需要覆盖,除非是当编译时的默认值随着时间的推移产生错误时才需要被覆盖设置worker_connect该指令配置一个工作进程能够接受并发连接的最大数。这个连接ions包括客户连接和向上游服务器的连接,但并不限于此。这对于反向代理服务器尤为重要,为了达到这个并发性连接数量,需要在操作系统层面进行一些额外调整

下面是一个使用这些指令的简短示例:# we want nginx to run as user 'www'user www;# the load is CPU-bound and we have 12 coresworker_processes 12;# explicitly specifying the path to the mandatory error logerror_log /var/log/nginx/error.log;# also explicitly specifying the path to the pid filepid /var/run/nginx.pid;# sets up a new configuration context for the 'events' moduleevents { # we're on a Solaris-based system and have determined that nginx # will stop responding to new requests over time with the default # connection-processing mechanism, so we switch to the second-best use /dev/poll; # the product of this number and the number of worker_processes # indicates how many simultaneous connections per IP:port pair are # accepted

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载