本节书摘来异步社区《精通nginx》一书中的第1章,第1.2节,作者: 【瑞士】dimitri aivaliotis 译者: 陶利军 责编: 陈冀康,更多章节内容可以访问云栖社区“异步社区”公众号查看。
nginx代码提供了两个独立的下载分支—标准版和开发版。开发分支是一个正处于积极开发状态的版本。在这个版本中将会有一些新的功能被集成到其中,在标准版中是找不到这些功能的。当一个“开发”版被发布时,它会经历同样的qa和作为标准版的一组类似功能的测试。因此无论哪一个分支都可以用于生产环境。两者主要的不同在于对第三方模块的支持。在开发版本里内部的api可能会改变,而标准版本却保持不变,因此为了向下兼容第三方模块,在标准版本中第三方模块都可以有效使用。
为了从源代码编译nginx,系统需要具备某些必要的条件。除了编译器之外,如果想启用ssl支持和能够使用rewrite模块,那么还需要提供相应的openssl和pcre (perl compatible regular expressions)库及开发头文件。这依赖于系统,也有可能在系统中这些必要条件已经被默认安装了,如果没有安装,那么需要从其安装包安装或者是从源码下载并解压安装,但是要在nginx的配置文件中指定它们在系统中安装的位置。
如果在配置文件中使用了–with-<library>=<path>选项,那么nginx将试图建立一个静态的依赖库。如果你想是的nginx不依赖于系统的任何其他部分,也可能是你想多榨取一点nginx二进制额外的性能,那么你可能会使用构建静态库的做法。如果你使用的外部库的功能只能从某个版本起(例如,npn[next protocol negotiation] tls扩展从openssl 1.0.1版本有效),那么你就不得不将其指定到特定版本解压后的源代码路径。
根据你自己的喜好,可能还会提供其他的、可选的安装包。这些安装包包括md5和sha-1以支持哈希算法、zlib压缩库、libatomic库。在nginx中,很多地方会使用到哈希算法,例如,为了计算uri哈希从而计算缓存key。zlib压缩库被用于投递gzip压缩的内容。如果atomic_ops库有效,那么nginx将会使用它实现自动内存更新操作,以便实现高性能的内存锁定代码。
使用下面的命令来配置nginx。
然后使用下面的命令编译并且安装。
下表的配置选项将帮助您设计出自己的nginx二进制。这些选项对nginx都是有效的,模块可以被独立激活。
在编译自己的二进制nginx时,你会有很大的灵活性来包含你仅使用的功能。你已经说定使用哪个用户运行nginx了吗?你要使用默认的logfile位置,以便不用在nginx的配置文件明确地说明它们吗?表1-1所示是配置选项列表,通过它来帮助你设计你自己的nginx命令。
如表1-2所示,可以优化编译,这正是下表中的选项的用武之地。