nginx 安裝詳解(better version)

nginx 安裝詳解(better version)


編譯自:
installing-nginx-open-sourcehtml

目錄

  • 選擇 Stable 仍是 Mainline?
  • 選擇預編譯的 pacakge 仍是從源碼編譯?
  • 從源碼編譯 nginx
    • 安裝 nginx 的依賴庫
    • 下載源碼 tarball
    • 配置編譯選項
      • 配置 nginx 文件安裝路徑
      • 配置 nginx gcc 選項
      • 指定 nginx 併發模型
      • nginx 的模塊
      • 默認編譯的模塊
      • 默認不編譯的模塊
      • 第三方模塊
      • 靜態連接模塊和動態連接模塊
    • 完成安裝
  • 安裝預編譯的 package
    • 預編譯的 package 所包含的模塊
    • 安裝 Red Hat/CentOS packages

選擇 Stable 仍是 Mainline?


nginx 提供兩種版本的源碼包:linux

  • mainline 版。該版本包含最新的特性和bug修改,而且老是保持更新。該版本是可靠的,但它可能會包含實驗性的模塊,以及必定數量的新 bug。nginx

  • stable 版。該版本不包含新特性,但包含關鍵 bug 修復。推薦使用該版用於生產環境。git

選擇預編譯的 pacakge 仍是從源碼編譯?


mainline 版和 stable 版都提供兩種安裝方式:github

  • 從預編譯的 package 進行安裝。這是快速和容易的安裝方式。預編譯的 package 包含幾乎全部的 nginx 官方模塊,且適用於大多數流行的操做系統。正則表達式

  • 從源碼編譯安裝。這種方式更爲靈活:你能夠添加特定的模塊,包含添加第三方的模塊,或者應用最新的安全補丁。centos

從源碼編譯 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 替代cookie

  • 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

相關文章
相關標籤/搜索