1.下载nginx,目前下载最新版本即可

官网下载地址:http://nginx.org/en/download.html


2.编译选项说明,此部分很枯燥,但建议看看,新版本增加了不少新功能

# ./configure --help

--prefix=PATH         //指定安装目录的路径
--sbin-path=PATH      //指定可执行程序的安装路径
--modules-path=PATH   //指定模块的安装路径
--conf-path=PATH      //指定配置文件的路径
--error-log-path=PATH //指定错误日志的路径
--pid-path=PATH       //指定PID文件的路径
--lock-path=PATH      //指定锁文件的安装路径
 
--user=USER   //指定运行的用户
--group=GROUP //指定运行的组

--build=NAME  //设置编译名称
--builddir=DIR //设置编译目录

--with-select_module  //启用select模块支持,不建议启用
--without-select_module //禁用select模块支持
--with-poll_module    //启用poll模块支持,不建议启用
--without-poll_module  //禁用poll模块支持

--with-threads  //启用线程池支持
--with-file-aio //文件AIO(异步I/O)模式支持,建议启用,在很大程度上可以提高系统的吞吐量
--with-ipv6  //IPv6的支持

--with-http_ssl_module        //启用支持ssl模式,也就是https,必须先安装openssl
--with-http_v2_module         //支持HTTP2协议,取代ngx_http_spdy_module,谷歌spdy
--with-http_realip_module     //允许请求包头更改客户端的ip地址
--with-http_addition_module   //此模块是一个过滤器,添加文本之前和之后的反应。
--with-http_xslt_module       //0.7.8以后的版本支持,这个模块是一个过滤器,使用一个或多个XSLT样式表转换XML响应。
--with-http_image_filter_module //传输JPEG/GIF/PNG 图片的一个过滤器)(默认为不启用。gd库要用到)

--with-http_geoip_module //模块(0.8.6+)创建变量,使用预编译的MaxMind数据库解析客户端IP地址,得到变量值
--with-http_sub_module   //允许用一些其他文本替换nginx响应中的一些文本
--with-http_dav_module   //增加PUT,DELETE,MKCOL:创建集合,COPY和MOVE方法)默认情况下为关闭,需编译开启
--with-http_flv_module   //模块ngx_http_flv_module 为Flash Video(FLV)文件 提供服务端伪流媒体支持
--with-http_mp4_module   //模块ngx_http_mp4_module为H.264/AAC文件,主要是以 .mp4、.m4v、和.m4a为扩展名的文件, 提供伪流媒体服务端支持。

--with-http_gunzip_module  //ngx_http_gunzip_module模块是一个过滤器, 它为不支持“gzip”编码方法的客户端解压具有“Content-Encoding: gzip”头的响应。 当希望存储压缩后的数据以节省空间和减少I/O开销,又不希望对那些不支持gzip压缩的客户端造成不利影响时, 此模块会派上用途。

--with-http_gzip_static_module  //模块 ngx_http_gzip_static_module 允许发送以“.gz”作为文件扩展名的预压缩文件,以替代发送普通文件。
--with-http_auth_request_module //模块ngx_http_auth_request_modul(1.5.4+)实现了客户端的基本认证
--with-http_random_index_module //显示随机首页模块支持
--with-http_secure_link_module  //这个模块为一个必需的安全性令牌检查请求网址。要使用这个模块必须在编译时指定下列编译参数(0.7.18后版本可用)
--with-http_degradation_module  //启用ngx_http_degradation_module支持(允许在内存不足的情况下返回204或444码)
--with-http_slice_module  //ngx_http_slice_module模块(1.9.8)是一个过滤器,它将请求分为subrequests,每个返回一个特定范围的响应。大的过滤器提供了更有效的缓存响应。
--with-http_stub_status_module //模块ngx_http_stub_status_module提供访问基本的状态信息

--without-http_charset_module //禁用ngx_http_charset_module支持(重新编码web页面,但只能是一个方向--服务器端到客户端,并且只有一个字节的编码可以被重新编码)
--without-http_gzip_module  //不编译http_gzip_module模块。该模块可以压缩HTTP服务器的响应,该模块需要zlib库才能编译和运行
--without-http_ssi_module  //禁用ssi支持;ngx_http_ssi_module模块是一个过滤器处理SSI(服务器端包括)命令响应通过它。目前,支持的SSI命令列表是不完整的。
--without-http_userid_module  //禁用ngx_http_userid_module,此模块适合客户端设置cookie识别。收到并设置cookie可以记录使用嵌入式变量$uid_got和$uid_set
--without-http_access_module  //禁止ngx_http_access_module,此模块允许限制访问某些客户地址。
--without-http_auth_basic_module  //禁止基本的认证模块,比如用户名密码
--without-http_autoindex_module   //禁止ngx_http_autoindex_module模块流程请求以斜杠字符(“/”)和生成一个目录清单。通常一个请求传递给ngx_http_autoindex_module模块
当ngx_http_index_module模块无法找到一个索引文件。满足指令。
--without-http_geo_module  //禁止ngx_http_geo_module模块创建变量和值取决于客户端IP地址。
--without-http_map_module  //禁止ngx_http_map_module模块创建变量的值取决于其他变量的值。
--without-http_split_clients_module  //禁用ngx_http_split_clients_module支持(该模块用来基于某些条件划分用户。条件如:ip地址、报头、cookies等等)
--without-http_referer_module  //禁用disable ngx_http_referer_module支持(该模块用来过滤请求,拒绝报头中Referer值不正确的请求)
--without-http_rewrite_module  //禁用ngx_http_rewrite_module模块用于变更请求URI使用正则表达式,返回重定向,有条件地选择配置。
--without-http_proxy_module  //禁用ngx_http_proxy_module支持(有关代理服务器)
--without-http_fastcgi_module  //禁用ngx_http_fastcgi_module支持(该模块允许Nginx 与FastCGI 进程交互,并通过传递参数来控制FastCGI 进程工作。 )FastCGI一个常驻型的公共网关接口。
--without-http_uwsgi_module  //禁用ngx_http_uwsgi_module支持(该模块用来医用uwsgi协议,uWSGI服务器相关)
--without-http_scgi_module  //禁用ngx_http_scgi_module支持(该模块用来启用SCGI协议支持,SCGI协议是CGI协议的替代。它是一种应用程序与HTTP服务接口标准。
它有些像FastCGI但他的设计 更容易实现。)
--without-http_memcached_module  //禁用ngx_http_memcached_module支持(该模块用来提供简单的缓存,以提高系统效率)
--without-http_limit_conn_module  //ngx_http_limit_conn_module 模块可以按照定义的键限定每个键值的连接数。特别的,可以设定单一 IP 来源的连接数。
--without-http_limit_req_module  //ngx_http_limit_req_module模块(0.7.21)可以通过定义的 键值来限制请求处理的频率。特别的,它可以限制来自单个IP地址的请求处理频率。 限制的方法是通过一种“漏桶”的方法——固定每秒处理的请求数,推迟过多的请求处理。

--without-http_empty_gif_module  //禁用ngx_http_empty_gif_module支持(该模块在内存中常驻了一个1*1的透明GIF图像,可以被非常快速的调用)
--without-http_browser_module  //禁用ngx_http_browser_module支持(该模块用来创建依赖于请求报头的值。如果浏览器为modern ,则$modern_browser等于modern_browser_value指令分配的值;如 果浏览器为old,则$ancient_browser等于 ancient_browser_value指令分配的值;如果浏览器为 MSIE中的任意版本,则 $msie等于1)
--without-http_upstream_hash_module  //禁用upstream哈希模块

--without-http_upstream_ip_hash_module //禁用ngx_http_upstream_ip_hash_module支持(该模块用于简单的负载均衡)
--without-http_upstream_least_conn_module //ngx_http_upstream_module模块是用来定义服务器组,可以引用proxy_pass,fastcgi_pass,uwsgi_pass,scgi_pass,
memcached_pass指令。
--without-http_upstream_keepalive_module //禁止upstream_keepalive此模块,启用keepalive为upstream servers
--without-http_upstream_zone_module //禁用upstream的zone,如:upstream backend {}


--with-http_perl_module //启用ngx_http_perl_module支持(该模块使nginx可以直接使用perl或通过ssi调用perl)
--with-perl_modules_path=PATH //设定perl模块路径
--with-perl=PATH  //设定perl库文件路径

--http-log-path=PATH   //设定access log路径
--http-client-body-temp-path=PATH //设定http客户端请求临时文件路径
--http-proxy-temp-path=PATH  //定义了一个目录来存储临时文件的数据收到代理服务器。到三级子目录层次结构可以使用下面指定的目录。
--http-fastcgi-temp-path=PATH  //设定http fastcgi临时文件路径
--http-uwsgi-temp-path=PATH  //设定http uwsgi临时文件路径
--http-scgi-temp-path=PATH  //设定http scgi临时文件路径

--without-http   //禁用http server功能
--without-http-cache //禁用http cache

--with-mail   //启用POP3/IMAP/SMTP代理支持
--with-mail_ssl_module //启用MAIL安全支持
--without-mail_pop3_module //禁用POP3协议支持
--without-mail_imap_module //禁用IMAP协议支持
--without-mail_smtp_module //禁用SMTP协议支持

--with-stream  //这个模块在1.90版本后将被启用。但是并不会默认安装,需要在编译时通过指定,此模块支持TCP代理
--with-stream_ssl_module  //ngx_stream_ssl_module模块(1.9.0)提供了必要的支持流代理服务器的SSL/TLS协议。这个模块不是建立在默认情况下,
它应该是——with-stream_ssl_module配置参数启用。
--without-stream_limit_conn_module  //禁止ngx_stream_limit_conn_module模块()用来限制连接数/定义的关键,特别是从一个单一的IP地址的连接数量。
--without-stream_access_module  //禁止ngx_stream_access_module模块(1.9.2)允许限制访问某些客户地址。
--without-stream_upstream_hash_module  //禁止ngx_stream_upstream_module模块(1.9.0)是用于定义服务器组,可以引用proxy_pass指令。
--without-stream_upstream_least_conn_module  //禁止指定服务器组应该使用负载平衡方法传递给服务器的连接的活跃连接数最少的,考虑权重的服务器。如果有几个这样的服务器,
他们尝试使用加权循环平衡方法
--without-stream_upstream_zone_module  //

--with-google_perftools_module //google-perftools包含四个工具,分别是:TCMalloc、heap-checker、heap-profiler和cpu-profiler,
TCMalloc是google-perftools的其中一个工具,用于优化内存分配的效率和速度,帮助在高并发的情况下很好的控制内存的使用。
--with-cpp_test_module  //

--add-module=PATH   //增加第三方模块的支持
--add-dynamic-module=PATH  //动态模块的路径

--with-cc=PATH  //指向C编译器的路径
--with-cpp=PATH //指向C预处理器的路径
--with-cc-opt=OPTIONS  //设置C编译器参数
--with-ld-opt=OPTIONS  //设置连接文件参数
--with-cpu-opt=CPU   //指定编译的CPU可用的值为: pentium, pentiumpro, pentium3, pentium4, athlon, opteron, amd64, sparc32, sparc64, ppc64

--without-pcre  //禁用pcre库
--with-pcre     //启用pcre
--with-pcre=DIR  //指向pcre库的目录
--with-pcre-opt=OPTIONS //编译时为pcre库设置附加参数
--with-pcre-jit  //编译PCRE库时增加"实时编译(pcre_jit)"支持。

--with-md5=DIR //指向md5库文件目录(消息摘要算法第五版,用以提供消息的完整性保护)
--with-md5-opt=OPTIONS //在编译时为md5库设置附加参数
--with-md5-asm //使用md5汇编源

--with-sha1=DIR  //指向sha1库目录(数字签名算法,主要用于数字签名)
--with-sha1-opt=OPTIONS   //在编译时为sha1库设置附加参数
--with-sha1-asm  //使用sha1汇编源

--with-zlib=DIR  //指向zlib库目录
--with-zlib-opt=OPTIONS //在编译时为zlib设置附加参数
--with-zlib-asm=CPU //为指定的CPU使用zlib汇编源进行优化,CPU类型为pentium, pentiumpro

--with-libatomic //为原子内存的更新操作的实现提供一个架构
--with-libatomic=DIR //指向libatomic_ops安装目录
--with-openssl=DIR //指向openssl安装目录
--with-openssl-opt=OPTIONS //在编译时为openssl设置附加参数
--with-debug //启用debug日志

3.安装zlib

tar -xf zlib-1.2.8.tar.gz
cd zlib-1.2.8
./configure
make
make insatll

4.安装pcre

tar -xf pcre-8.37.tar.gz
cd pcre-8.37
./configure
make
make install

5.安装openssl

tar -xf openssl-1.0.2.tar.gz
./config --prefix=/usr/local --openssldir=/usr/local/openssl
make
make insatll

6.安装geo

wget 
tar -xf GeoIP.tar.gz 
cd GeoIP-1.4.8
make
make install

7.安装其他依赖

yum -y install perl-devel perl-ExtUtils-Embed libatomic*

8.安装nginx,采用版本是最新的nginx-1.9.14,1.9以后增加很多新功能,比如TCP的代理支持HTTP2等

tar -xf nginx-1.9.14.tar.gz
cd nginx-1.9.14
./configure  \
--prefix=/app/local/nginx \
--pid-path=/app/local/nginx \
--user=nginx \
--group=nginx \
--with-threads \
--with-file-aio \
--with-http_ssl_module \
--with-http_v2_module  \
--with-http_addition_module \
--with-http_geoip_module \
--with-http_sub_module \
--with-http_dav_module \
--with-http_flv_module \
--with-http_mp4_module \
--with-http_perl_module \
--with-mail \
--with-http_gzip_static_module \
--with-http_auth_request_module  \
--with-http_random_index_module \
--with-http_secure_link_module \
--with-http_degradation_module \
--with-http_slice_module \
--with-http_stub_status_module \
--with-http_perl_module \
--with-zlib=/tmp/soft/zlib-1.2.8 \
--with-stream \
--with-stream_ssl_module \
--with-pcre=/tmp/soft/pcre-8.37 \
--with-openssl=/tmp/soft/openssl-1.0.2 \
--with-libatomic
make
make install

启动nginx

/app/local/nginx/sbin/nginx

重启nginx(热加载)

/app/local/nginx/sbin/nginx -s relaod

检查语法错误

/app/local/nginx/sbin/nginx -t

查看版本

/app/local/nginx/sbin/nginx -v