美文网首页nginx Linux服务器运维
nginx 安装详解(better version)

nginx 安装详解(better version)

作者: C86guli | 来源:发表于2016-07-04 18:58 被阅读1650次

    编译自:
    installing-nginx-open-source

    目录

    • 选择 Stable 还是 Mainline?
    • 选择预编译的 pacakge 还是从源码编译?
    • 从源码编译 nginx
      • 安装 nginx 的依赖库
      • 下载源码 tarball
      • 配置编译选项
        • 配置 nginx 文件安装路径
        • 配置 nginx gcc 选项
        • 指定 nginx 并发模型
        • nginx 的模块
        • 默认编译的模块
        • 默认不编译的模块
        • 第三方模块
        • 静态链接模块和动态链接模块
      • 完成安装
    • 安装预编译的 package
      • 预编译的 package 所包含的模块
      • 安装 Red Hat/CentOS packages

    选择 Stable 还是 Mainline?


    nginx 提供两种版本的源码包:

    • mainline 版。该版本包含最新的特性和bug修改,并且总是保持更新。该版本是可靠的,但它可能会包含实验性的模块,以及一定数量的新 bug。

    • stable 版。该版本不包含新特性,但包含关键 bug 修复。推荐使用该版用于生产环境。

    选择预编译的 pacakge 还是从源码编译?


    mainline 版和 stable 版都提供两种安装方式:

    • 从预编译的 package 进行安装。这是快速和容易的安装方式。预编译的 package 包含几乎所有的 nginx 官方模块,且适用于大多数流行的操作系统。

    • 从源码编译安装。这种方式更为灵活:你可以添加特定的模块,包含添加第三方的模块,或者应用最新的安全补丁。

    从源码编译 nginx


    从源码编译安装的方式更为灵活:你可以添加特定的模块,包含添加第三方的模块,或者应用最新的安全补丁。

    安装 nginx 的依赖库

    在编译安装 nginx 之前,需要首先安装 nginx 的依赖:

    • PCRE 库 - nginx 的 corerewrite 模块依赖 PCRE 库。它提供对于正则表达式的支持:
    $ wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.38.tar.gz
    $ tar -zxf pcre-8.38.tar.gz
    $ cd pcre-8.38
    $ ./configure
    $ make
    $ sudo make install
    

    译注:也可用 yum install pcre-devel 替代

    • zlib 库 - nginx 的 gzip 模块依赖 zlib 库。用于对 HTTP headers 进行压缩:
    $ wget http://zlib.net/zlib-1.2.8.tar.gz
    $ tar -zxf zlib-1.2.8.tar.gz
    $ cd zlib-1.2.8
    $ ./configure
    $ make
    $ sudo make install
    

    译注:也可用 yum install zlib-devel 替代

    • OpenSSL 库 - nginx 的 SSL 模块依赖该库,用于支持 HTTPS 协议:
    $ wget http://www.openssl.org/source/openssl-1.0.2f.tar.gz
    $ tar -zxf openssl-1.0.2f.tar.gz
    $ cd openssl-1.0.2f
    $ ./configure darwin64-x86_64-cc --prefix=/usr
    $ make
    $ sudo make install
    

    译注:也可用 yum install openssl-devel 替代

    下载源码 tarball

    源码 tarball 下载地址是:http://nginx.org/en/download.html

    mainline 版:

    $ wget http://nginx.org/download/nginx-1.11.1.tar.gz
    $ tar zxf nginx-1.11.1.tar.gz
    $ cd nginx-1.11.1
    

    stable 版:

    $ wget http://nginx.org/download/nginx-1.10.1.tar.gz
    $ tar zxf nginx-1.10.1.tar.gz
    $ cd nginx-1.10.1
    

    配置编译选项

    源码包中提供 configure 脚本用于在编译前定义 nginx 各方面的配置。
    执行 configure 脚本最后生成 Makefile,make 命令根据 Makefile 进行编译安装。

    子目录:

    • 配置 nginx 文件安装路径
    • 配置 nginx gcc 选项
    • 指定 nginx 并发模型
    • nginx 的模块
    • 默认编译的模块
    • 默认不编译的模块
    • 第三方模块
    • 静态链接模块和动态链接模块

    配置示例:

    $ ./configure \
    --sbin-path=/usr/local/nginx/nginx \
    --conf-path=/usr/local/nginx/nginx.conf \
    --pid-path=/usr/local/nginx/nginx.pid \
    --with-pcre=../pcre-8.38 \
    --with-zlib=../zlib-1.2.8 \
    --with-http_ssl_module \
    --with-stream \
    --with-mail=dynamic \
    --add-module=/usr/build/nginx-rtmp-module \
    --add-dynamic-module=/usr/build/3party_module
    

    配置 nginx 文件安装路径

    使用 configure 脚本可设置 nginx 的文件安装路径,包括 nginx 二进制文件和配置文件,以及设置依赖库如 PCRE 和 SSL 的源码所在路径(用于对其进行静态编译)。

    --prefix=path

    定义 nginx 文件的安装路径。configure 的其他选项如果使用相对路径,那么以此路径为基础路径。(except for paths to libraries sources)。nginx.conf 文件中的相对路径也以此为基础路径。默认 --prefix=/usr/local/nginx

    --sbin-path=path

    设置 nginx 二进制程序的路径名,这个名字只在安装期间使用。默认 --sbin-path=prefix/sbin/nginx

    --conf-path=path

    设置 nginx.conf 的路径。nginx 可在启动时手动以 -c file 参数指定其他配置文件。默认 --conf-path=prefix/conf/nginx.conf

    --pid-path=path

    设置 nginx.pid 文件的路径。安装nginx之后,可在 nginx.conf 文件中使用 pid 指令修改该路径。默认 --pid-path=prefix/logs/nginx.pid

    --error-log-path=path

    设置 nginx 错误日志的路径。安装nginx之后,可在 nginx.conf 文件中使用 error_log 指令修改该路径。默认 --error-log-path=prefix/logs/error.log

    --http-log-path=path

    设置 nginx 访问日志的路径。安装nginx之后,可在 nginx.conf 文件中使用 access_log 指令修改该路径。默认 --http-log-path=prefix/logs/access.log

    --user=name

    设置启动 worker 进程时所使用的非特权用户名。安装nginx之后,可在 nginx.conf 文件中使用 user 指令修改用户名。默认 --user=nobody

    --group=name

    设置启动 worker 进程时所使用的非特权用户组名。安装nginx之后,可在 nginx.conf 文件中使用 user 指令修改用户组名。默认 --group=nobody

    --with-pcre=path

    设置 PCRE 库的源码路径。首先需要下载和解压 PCRE 库。要求 PCRE 的版本范围为 4.4 — 8.38。设置之后,其余的就交给 ./configure 和 make 命令。nginx 使用 PCRE 库用于支持正则表达式。正则表达式在 location 指令和 rewrite 模块中会用到。

    --with-pcre-jit

    编译 PCRE 库时,加入 “just-in-time compilation” 支持 (1.1.12, the pcre_jit directive)

    --with-zlib=path

    设置 zlib 库的源码路径。首先需要下载和解压 zlib 库。
    要求 zlib 库的版本范围为 1.1.3 — 1.2.8,设置之后,其余的就交给 ./configure 和 make 命令。gzip 压缩模块依赖 zlib 库。

    配置 nginx gcc 选项

    指定编译相关选项:

    --with-cc-opt=parameters

    为 CFLAGS 变量设置额外的参数。比如 FreeBSD 下使用 PCRE 库,必须指定 --with-cc-opt="-I /usr/local/include"。 比如 希望增加 select() 支持的文件数,可指定:--with-cc-opt="-D FD_SETSIZE=2048"

    --with-ld-opt=parameters

    设置链接时的额外参数。比如,FreeBSD 使用 PCRE 库时,必须指定 --with-ld-opt="-L /usr/local/lib"

    指定 nginx 并发模型

    可参考:Connection Processing Methods

    --with-select_module
    --without-select_module

    是否编译 select 模块。使用 select 模块可使 nginx 工作于 select() 模式。
    如果 nginx 不支持其他更合适的模块,如 kqueue, epoll 或者 /dev/poll,该模块被自动编译。

    --with-poll_module
    --without-poll_module

    是否编译 poll 模块。使用 poll 模块可使 nginx 工作于 poll() 模式。
    如果 nginx 不支持其他更合适的模块,如 kqueue, epoll 或者 /dev/poll,该模块被自动编译。

    nginx 的模块

    nginx 由很多模块组成。一些模块被默认编译进 nginx,因此不需要在 configure 脚本的选项中显式地指定。但是如果你希望不编译某个默认模块,可使用 --without-MODULE 选项将其排除在外。

    没有默认编译的模块以及第三方模块,必须在执行 configure 脚本时进行显式地指定。对于这些模块,其中一部分是静态链接到 nginx 库,另一些是可动态链接到 nginx 库。

    • 如果是静态链接到 nginx,当每次 nginx 启动时,这些模块被加载到 nginx 中。
    • 如果是动态链接到 nginx,只有当在 nginx.conf 中指定了的该模块,模块才会被加载到 nginx 中。

    默认编译的模块

    如果你希望不编译某个默认模块,可使用 --without-MODULE 选项将其排除在外:

    $ ./configure --sbin-path=/usr/local/nginx/nginx \
    --conf-path=/usr/local/nginx/nginx.conf \
    --pid-path=/usr/local/nginx/nginx.pid \
    --with-http_ssl_module \
    --with-stream \
    --with-pcre=../pcre-8.38 \
    --with-zlib=../zlib-1.2.8 \
    --without-http_empty_gif_module
    

    http_charset_module

    在响应首部的 “Content-Type” 字段添加指定的字符集,能够对数据进行字符集转换。

    http_gzip_module

    使用 gzip 对响应报文进行压缩,可减少传输的数据大小,可减少一半或更多。

    http_ssi_module

    Processes SSI (Server Side Includes) commands in responses passing through it.

    http_userid_module

    为客户端标识设置合适的 cookies

    http_access_module

    Limits access to certain client addresses.
    通过 “IP地址” 限制某个客户端的访问

    http_auth_basic_module

    使用 HTTP 基本认证协议,对客户端进行认证,以限制对资源的访问。

    http_autoindex_module

    Processes requests ending with the slash character (‘/’) and produces a directory listing.

    http_geo_module

    Creates variables with values depending on the client IP address.

    http_map_module

    Creates variables whose values depend on values of other variables.

    http_split_clients_module

    Creates variables suitable for A/B testing, also known as split testing.

    http_referer_module

    对客户端的访问,如果在请求首部的 Referer 字段有无效的值,则阻止其对某个站点的访问。

    http_rewrite_module

    使用正则表达式修改请求 URI,并返回重定向指令;根据条件判断选择配置。依赖于 PCRE 库。

    http_proxy_module

    将请求转发给其他服务器

    http_fastcgi_module

    将请求转发给 FastCGI 服务器。

    http_uwsgi_module

    将请求转发给 uwsgi 服务器。

    http_scgi_module

    将请求转发给 SCGI 服务器。

    http_memcached_module

    从一个 memcached 服务器获取响应。

    http_limit_conn_module

    对每个定义的 key,限制其连接数,特别是限制来自同一个 IP 地址的连接数。

    http_limit_req_module

    对每个定义的 key,限制其请求的处理速率,特别是限制来自同一个 IP 地址的请求处理速率。

    http_empty_gif_module

    Emits single-pixel transparent GIF.

    http_browser_module

    Creates variables whose values depend on the value of the “User-Agent” request header field.

    http_upstream_hash_module

    激活基于 hash 的负载均衡策略

    http_upstream_ip_hash_module

    激活基于 IP hash 的负载均衡策略

    http_upstream_least_conn_module

    激活基于 “最小连接数” 的负载均衡策略

    http_upstream_keepalive_module

    激活 keepalive 连接保持

    http_upstream_zone_module

    激活共享内存区

    默认不编译的模块

    一些模块是默认不编译的,你需要使用 ./configure 命令添加该选项。在这些默认不编译的模块中,有些模块可编译为动态模块,如下:

    mail
    stream
    geoip
    image_filter
    perl
    xslt

    示例:

    $ ./configure --sbin-path=/usr/local/nginx/nginx \
    --conf-path=/usr/local/nginx/nginx.conf \
    --pid-path=/usr/local/nginx/nginx.pid \
    --with-pcre=../pcre-8.38 \
    --with-zlib=../zlib-1.2.8 \
    --with-http_ssl_module \
    --with-stream \
    --with-mail
    

    --with-threads

    Enables NGINX to use thread pools. See Thread Pools in NGINX Boost Performance 9x! blog post for details.

    --with-file-aio

    Enables asynchronous I/O.

    --with-ipv6

    Enables IPv6 support.

    --with-http_ssl_module

    Provides support for HTTPS. Requires an SSL library such as OpenSSL.See the ngx_http_ssl_module reference for the list of directives.

    --with-http_v2_module

    Provides support for HTTP/2.See the ngx_http_v2_module reference for the list of directives and the “HTTP/2 Module in NGINX” blog post for details.

    --with-http_realip_module

    Changes the client address to the one sent in the specified header field. See the ngx_http_realip_module reference for the list of directives.

    --with-http_addition_module

    Adds text before and after a response. See the ngx_http_addition_module reference for the list of directives.

    --with-http_xslt_module or --with-http_xslt_module=dynamic

    Transforms XML responses using one or more XSLT stylesheets. The module requires the Libxml2 and XSLT libraries. See the ngx_http_xslt_module reference for the list of directives. The module can also be compiled as dynamic.

    --with-http_image_filter_module or --with-http_image_filter_module=dynamic

    Transforms images in JPEG, GIF, and PNG formats. The module requires the LibGD library. See ngx_http_image_filter_module reference for the list of directives. The module can also be compiled as dynamic.

    --with-http_geoip_module or --with-http_geoip_module=dynamic

    Allows creating variables whose values depend on the client IP address. The module uses MaxMind GeoIP databases. See the ngx_http_geoip_module reference for the list of directives. The module can also be compiled as dynamic.

    --with-http_sub_module

    Modifies a response by replacing one specified string by another. See the ngx_http_sub_module reference for the list of directives.

    --with-http_dav_module

    Intended for file management automation via the WebDAV protocol. See the ngx_http_dav_module reference for the list of directives.

    --with-http_flv_module

    Provides pseudo-streaming server-side support for Flash Video (FLV) files. See the ngx http_flv_module reference for the list of directives.

    --with-mp4_module

    Provides pseudo-streaming server-side support for MP4 files. See the ngx_http_mp4_module reference for the list of directives.

    --with-http_gunzip_module

    Decompresses responses with Content-Encoding: gzip for clients that do not support zip encoding method. See the ngx_http_gunzip_module for the list of directives.

    --with-http_gzip_static_module

    Allows sending precompressed files with the *.gz filename extension instead of regular files. See the ngx_http_gzip_static_module for the list of directives.

    --with-http_auth_request_module

    Implements client authorization based on the result of a subrequest. See the http_auth_request_module for the list of directives.

    --with-http_random_index_module

    Processes requests ending with the slash character (‘/’) and picks a random file in a directory to serve as an index file. See the ngx_http_random_index_module for the list of directives.

    --with-http_secure_link_module

    Used to check authenticity of requested links, protect resources from unauthorized access, and limit link lifetime. See the ngx_http_secure_link_module for the list of directives.

    --with-http_slice_module

    Allows splitting a request into subrequests, each subrequest returns a certain range of response. Provides more effective caching of large files. See the ngx_http_slice_module reference for the list of directives.

    --with-http_degradation_module

    Allows returning an error when a memory size exceeds the defined value.

    --with-http_stub_status_module

    Provides access to basic status information. See the ngx_http_stub_status_module reference for the list of directives. Note that NGINX Plus customers do not require this module as they are already provided with extended status metrics and interactive dashboard.

    --with-http_perl_module or --with-http_perl_module=dynamic

    Used to implement location and variable handlers in Perl and insert Perl calls into SSI. Requires the PERL library. See the ngx_http_perl_module reference for the list of directives. The module can also be compiled as dynamic.

    --with-mail or --with-mail=dynamic

    Enables mail proxy functionality. See the ngx_mail_core_module reference for the list of directives. The module can also be compiled as dynamic.

    --with-mail_ssl_module

    Provides support for a mail proxy server to work with the SSL/TLS protocol. Requires an SSL library such as OpenSSL. See the ngx_mail_ssl_module reference for the list of directives.

    --with-stream or --with-stream=dynamic

    Enables the TCP proxy functionality. See the ngx_stream_core_module reference for the list of directives. The module can also be compiled as dynamic.

    --with-stream_ssl_module

    Provides support for a stream proxy server to work with the SSL/TLS protocol. Requires an SSL library such as OpenSSL. See the ngx_stream_ssl_module reference for the list of directives.

    --with-google_perftools_module

    Allows using Google Performance tools library.

    --with-cpp_test_module
    --with-debug

    Enables the debugging log.

    第三方模块

    你可以为 nginx 编译第三方模块,一些第三方模块可参见:modules
    使用第三方模块,需要自己承担稳定性的风险,因为第三方模块的稳定性是没有保证的。

    静态链接模块和动态链接模块

    静态链接模块

    大多数被编译进 nginx 的模块是被静态链接的,它们在编译 nginx 时被构建到 nginx 中,并且被 nginx 的可执行文件静态地链接。被静态链接的模块无法被 disabled,只有重新编译 nginx 才能达到这个目的。

    以静态方式编译第三方模块,如下所示,在执行 configure 脚本时,添加 --add-module= 选项,并输入模块的路径:

    $  ./configure ... --add-module=/usr/build/nginx-rtmp-module
    
    动态链接模块

    某些 nginx 模块也可以被编译为共享对象(*.so 文件),并在运行时被加载到 nginx 中。这种方式提供了更多的灵活性,因为可以自由选择加载或不加载某个动态模块。要加载某个动态模块,只要在 nginx.conf 中使用 load_module指令指定该模块。

    支持动态加载的模块,它们不是默认编译的:

    mail
    stream
    geoip
    image_filter
    perl
    xslt

    以动态方式编译第三方模块,如下所示,在执行 configure 脚本时,添加 --add-dynamic-module= 选项,并输入模块的路径:

    $  ./configure ... --add-dynamic-module=/path/to/module
    

    生成的 *.so 文件可在 prefix/modules/ 目录中找到,例如默认的路径为 /usr/local/nginx/modules

    安装完成后,如果要加载某个动态模块,只要在 nginx.conf 中使用 load_module指令指定该模块。

    相关扩展阅读:
    Introducing Dynamic Modules in NGINX 1.9.11
    Extending NGINX

    完成安装

    使用 configure 脚本配置完成后,可进行编译安装:

    $ make
    $ sudo make install
    

    安装顺利完成后,执行 nginx 命令,启动 nginx:

    $ sudo nginx
    

    安装预编译的 package

    安装预编译的 package 相对更简单和快速。缺点是缺少灵活性。可安装预编译的 package 的系统有: Red Hat, CentOS, Debian, Ubuntu 以及 SLES。

    预编译的 package 所包含的模块

    关于预编译的 package 所包含的模块,请参见 linux_packages

    安装 Red Hat/CentOS packages

    nginx 为 Red Hat/CentOS 5, 5.x, 6, 6.x, 7 and 7.x 提供了预编译 package,package 有两个来源:

    • 默认的 Red Hat or CentOS yum 仓库。这是最快的方式,但所提供的 package 版本比较老旧。比如说,CentOS 7.0 默认提供 nginx/1.6.2 released in September, 2014

    • nginx repo。为了从 nginx repo 安装 package,你需要设置相应的 yum 仓库。这里提供最新版本的 package

    从默认的 Red Hat/CentOS 仓库安装 nginx

    1. 安装 EPEL 仓库:

      $ sudo yum install epel-release

    2. 更新仓库,并安装 nginx:

      $ sudo yum update

    3. 验证所安装的 nginx 版本:

      $ sudo nginx -v nginx version: nginx/1.6.3

    从 nginx repo 安装 nginx

    1. 设置 yum 仓库:

      $ cd /etc/yum.repos.d $ sudo vi /etc/yum.repos.d/nginx.repo

    2. 添加如下内容:

      [nginx] name=nginx repo baseurl=http://nginx.org/packages/mainline/OS/OSRELEASE/$basearch/ gpgcheck=0 enabled=1

    其中:

    • “OS” 是 rhel 或者 centos
    • “OSRELEASE” 为系统版本:5, 5.x, 6, 6.x, 7, 7.x
    • “/mainline” 是最新的 mainline 版。删除 “/mainline” 是安装最新的 stable 版

    比如,为 CentOS 7.0 获取最新的 mainline package:

    [nginx]
    name=nginx repo
    baseurl=http://nginx.org/packages/mainline/centos/7/$basearch/
    gpgcheck=0
    enabled=1
    
    1. 保存退出

    2. 更新仓库,并安装 nginx:

      $ sudo yum update

    3. 运行 nginx:

      $ sudo nginx

    4. 验证 nginx 是否启动:

      $ curl -I 127.0.0.1 HTTP/1.1 200 OK Server: nginx/1.11.1

    版权信息
    本文编译自 installing-nginx-open-source

    相关文章

      网友评论

        本文标题:nginx 安装详解(better version)

        本文链接:https://www.haomeiwen.com/subject/yixhjttx.html