編譯自:
installing-nginx-open-sourcehtml
nginx 提供兩種版本的源碼包:linux
mainline 版。該版本包含最新的特性和bug修改,而且老是保持更新。該版本是可靠的,但它可能會包含實驗性的模塊,以及必定數量的新 bug。nginx
stable 版。該版本不包含新特性,但包含關鍵 bug 修復。推薦使用該版用於生產環境。git
mainline 版和 stable 版都提供兩種安裝方式:github
從預編譯的 package 進行安裝。這是快速和容易的安裝方式。預編譯的 package 包含幾乎全部的 nginx 官方模塊,且適用於大多數流行的操做系統。正則表達式
從源碼編譯安裝。這種方式更爲靈活:你能夠添加特定的模塊,包含添加第三方的模塊,或者應用最新的安全補丁。centos
從源碼編譯安裝的方式更爲靈活:你能夠添加特定的模塊,包含添加第三方的模塊,或者應用最新的安全補丁。安全
在編譯安裝 nginx 以前,須要首先安裝 nginx 的依賴:服務器
$ 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
$ 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
替代
$ 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 下載地址是: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 進行編譯安裝。
子目錄:
配置示例:
$ ./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
使用 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 庫。
指定編譯相關選項:
--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"
。
可參考: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,所以不須要在 configure
腳本的選項中顯式地指定。可是若是你但願不編譯某個默認模塊,可以使用 --without-MODULE
選項將其排除在外。
沒有默認編譯的模塊以及第三方模塊,必須在執行 configure
腳本時進行顯式地指定。對於這些模塊,其中一部分是靜態連接到 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**
在響應首部的 「Content-Type」 字段添加指定的字符集,可以對數據進行字符集轉換。
使用 gzip 對響應報文進行壓縮,可減小傳輸的數據大小,可減小一半或更多。
Processes SSI (Server Side Includes) commands in responses passing through it.
爲客戶端標識設置合適的 cookies
Limits access to certain client addresses. 經過 「IP地址」 限制某個客戶端的訪問
使用 HTTP 基本認證協議,對客戶端進行認證,以限制對資源的訪問。
Processes requests ending with the slash character (‘/’) and produces a directory listing.
Creates variables with values depending on the client IP address.
Creates variables whose values depend on values of other variables.
Creates variables suitable for A/B testing, also known as split testing.
對客戶端的訪問,若是在請求首部的 Referer 字段有無效的值,則阻止其對某個站點的訪問。
使用正則表達式修改請求 URI,並返回重定向指令;根據條件判斷選擇配置。依賴於 PCRE 庫。
將請求轉發給其餘服務器
將請求轉發給 FastCGI 服務器。
將請求轉發給 uwsgi 服務器。
將請求轉發給 SCGI 服務器。
從一個 memcached 服務器獲取響應。
對每一個定義的 key,限制其鏈接數,特別是限制來自同一個 IP 地址的鏈接數。
對每一個定義的 key,限制其請求的處理速率,特別是限制來自同一個 IP 地址的請求處理速率。
Emits single-pixel transparent GIF.
Creates variables whose values depend on the value of the 「User-Agent」 request header field.
激活基於 hash 的負載均衡策略
激活基於 IP hash 的負載均衡策略
http_upstream_least_conn_module
激活基於 「最小鏈接數」 的負載均衡策略
http_upstream_keepalive_module
激活 keepalive 鏈接保持
激活共享內存區
一些模塊是默認不編譯的,你須要使用 ./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 的系統有: Red Hat, CentOS, Debian, Ubuntu 以及 SLES。
關於預編譯的 package 所包含的模塊,請參見 linux_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
安裝 EPEL 倉庫:
$ sudo yum install epel-release
更新倉庫,並安裝 nginx:
$ sudo yum update
驗證所安裝的 nginx 版本:
$ sudo nginx -v nginx version: nginx/1.6.3
設置 yum 倉庫:
$ cd /etc/yum.repos.d $ sudo vi /etc/yum.repos.d/nginx.repo
添加以下內容:
[nginx] name=nginx repo baseurl=http://nginx.org/packages/mainline/OS/OSRELEASE/$basearch/ gpgcheck=0 enabled=1
其中:
好比,爲 CentOS 7.0 獲取最新的 mainline package:
[nginx] name=nginx repo baseurl=http://nginx.org/packages/mainline/centos/7/$basearch/ gpgcheck=0 enabled=1
保存退出
更新倉庫,並安裝 nginx:
$ sudo yum update
運行 nginx:
$ sudo nginx
驗證 nginx 是否啓動:
$ curl -I 127.0.0.1 HTTP/1.1 200 OK Server: nginx/1.11.1
版權信息:
本文編譯自 installing-nginx-open-source