一、安装Nginx依赖
1)安装依赖pcre库
PCRE(Perl Compatible Regular Expressions,Perl 兼容正则表达式) 是一个函数库,目前为很多软件所使用,该库支持正则表达式。它由RegEx演化而来,实际上,Perl 正则表达式也是源自于RegEx。如果我们在配置文件nginx.conf里使用了正则表达式, 那么在编译Nginx时就必须把PCRE库编译进Nginx,因为Nginx的HTTP模块要靠它来解析正则表达式。当然,如果你确认不会使用正则表达式,就不必安装它。其yum安装方式如下:
1 |
$ yum install -y pcre pcre-devel |
pcre-devel是使用PCRE做二次开发时所需要的开发库,包括头文件等,这也是编译Nginx所必须使用的。
2)安装zlib库
zlib库用于对HTTP包的内容做gzip格式的压缩,如果我们在nginx.conf里配置了gzip on,并指定对于某些类型(content-type)的HTTP响应使用gzip来进行压缩以减少网络传输量,那么,在编译时就必须把zlib编译进Nginx。其yum安装方式如下:
1 |
$ yum install -y zlib zlib-devel |
3)openSSL开发库
如果我们的服务器不只是要支持HTTP,还需要在更安全的SSL协议上传输HTTP,那么就需要拥有OpenSSL了。另外, 如果我们想使用MD5、SHA1等散列函数,那么也需要安装它。其yum安装方式如下:
1 |
$ yum install -y openssl-devel openssl |
4)安装编译工具
会安装GCC编译器,GCC(GNU Compiler Collection)可用来编译C语言程序,Nginx是C语言写的,需要使用编译器进行编译。
1 |
$ yum groupinstall "Development tools" |
上面所列的4个库只是完成Web服务器最基本功能所必需的。
Nginx是高度自由化的Web服务器,它的功能是由许多模块来支持的。 而这些模块可根据我们的使用需求来定制, 如果某些模块不需要使用则完全不必理会它。同样,如果使用了某个模块,而这个模块使用了一些类似zlib或OpenSSL等的第三方库,那么就必须先安装这些软件。
二、编译安装Nginx
创建Ningx用户
1 2 |
$ groupadd -r nginx $ useradd -r -g nginx nginx |
安装Nginx
1 2 |
$ tar xvf nginx-1.9.14.tar.gz -C /src/ $ cd /src/nginx-1.9.14 |
开始编译Nginx,编译选项的说明后面介绍,下面使用的编译选项基本是官方使用的编译选项,Nginx编译选项
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
./configure \ --prefix=/usr/local/nginx \ --sbin-path=/usr/sbin/nginx \ --conf-path=/etc/nginx/nginx.conf \ --error-log-path=/var/log/nginx/error.log \ --http-log-path=/var/log/nginx/access.log \ --pid-path=/var/run/nginx/nginx.pid \ --lock-path=/var/lock/nginx.lock \ --user=nginx \ --group=nginx \ --with-file-aio \ --with-http_ssl_module \ --with-http_flv_module \ --with-http_mp4_module \ --with-http_stub_status_module \ --with-http_gzip_static_module \ --with-http_realip_module \ --with-http_addition_module \ --with-http_sub_module \ --with-http_dav_module \ --with-http_gunzip_module \ --with-http_random_index_module \ --with-http_secure_link_module \ --with-http_auth_request_module \ --http-client-body-temp-path=/var/tmp/nginx/client/ \ --http-proxy-temp-path=/var/tmp/nginx/proxy/ \ --http-fastcgi-temp-path=/var/tmp/nginx/fcgi/ \ --http-uwsgi-temp-path=/var/tmp/nginx/uwsgi \ --http-scgi-temp-path=/var/tmp/nginx/scgi \ --with-pcre |
1 2 3 |
$ make $ make install $ mkdir -p /var/tmp/nginx/client/ |
三、启动,停止和重新加载配置
安装完成后就可以直接启动Nginx服务了,要启动nginx的,运行可执行文件即可。
1 |
$ /usr/sbin/nginx |
1 2 |
$ netstat -nplt | grep 80 tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 113924/nginx |
接下来可以往nginx的默认数据根目录添加一个数据,然后访问试试看;
1 |
$ echo "nginx" > /usr/local/nginx/html/index.html |
1 2 |
[root@localhost html]# curl "http://127.0.0.1" nginx |
访问是没有问题的,证明我们的nginx已经可以正常工作了。一旦nginx的启动后,你就可以访问nginx服务器的地址了。它可以通过调用可执行控制参数“-s”来关闭、重载配置文件,使用以下语法:
快速关闭服务,使用-s接收stop信号
1 |
$ /usr/sbin/nginx -s stop |
正常关闭服务,使用-s接收quit信号
1 |
$ /usr/sbin/nginx -s quit |
重载配置文件,使用-s接收reload信号,一旦master进程接收到的reload信号会重新加载配置,它会检查新的配置文件的语法的正确性,并尝试应用新的配置。如果没有错误,master进程开始新的worker进程,并将消息发送到老的worker进程,要求它们关闭。否则,master进程将回滚更改过的配置,并继续与旧的配置一起工作。旧的工作进程,在接收到关闭、停止命令之前,会继续接收新的连接,并继续服务于当前请求。
1 |
$ /usr/sbin/nginx -s reload |
有关发送信号到nginx的更多信息,请参阅官方控制Nginx。
四、Nginx常用编译选项说明
Nginx 模块必须在编译时就进行选择,目前不支持在运行时进行模块选择。在编译时,可以使用./configure –help查看编译帮助,会提供相关的编译选项。需要注意的一点就是大部分编译选项都有默认值,可以指定也可以不指定。另外编译选项一般以–with开头的都是默认不会编译的,你需要用到什么功能就可以指定其编译选项;另外以–without开头的选项表示这些模块都是默认会编译的,如果手动指定使用以–without开头的选项表示你将会关闭此功能模块,慎用。
1)Nginx在编译时,运行期间与路径相关的各种参数
1 2 3 4 5 6 7 8 9 10 11 12 13 |
--prefix=PATH #指向安装目录 --sbin-path=PATH #指向(执行)程序文件(nginx) --conf-path=PATH #指向配置文件(nginx.conf) --error-log-path=PATH #指向错误日志目录 --http-log-path=PATH #指定访问复制目录 --pid-path=PATH #指向pid文件(nginx.pid) --lock-path=PATH #指向lock文件(nginx.lock)(安装文件锁定,防止安装文件被别人利用,或自己误操作。) --builddir=PATH #指向编译目录 --http-client-body-temp-path=PATH #设定http客户端请求临时文件路径 --http-proxy-temp-path=PATH #设定http代理临时文件路径 --http-fastcgi-temp-path=PATH #设定http fastcgi临时文件路径 --http-uwsgi-temp-path=PATH #设定http uwsgi临时文件路径 --http-scgi-temp-path=PATH #设定http scgi临时文件路径 |
2)一些权限、http、mail及依赖库模块
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
--user=USER #指定程序运行时的非特权用户 --group=USER #指定程序运行时的非特权用户组 --with-rtsig_module #启用rtsig模块支持(实时信号) --with-file-aio #启用file aio支持(一种APL文件传输格式) --with-ipv6 #启用ipv6支持 --with-select_module #启用select模块支持(一种轮询模式,不推荐在高载环境下使用)禁用:--without-select_module --with-poll_module #启用poll模块支持(功能与select相同,与select特性相同,为一种轮询模式,不推荐在高载环境下使用) --with-http_ssl_module #启用支持https请求,需已安装openssl --with-http_realip_module #启用ngx_http_realip_module支持(这个模块允许从请求标头更改客户端的IP地址值,默认为关) --with-http_addition_module #启用ngx_http_addition_module支持(作为一个输出过滤器,支持不完全缓冲,分部分响应请求) --with-http_xslt_module #启用ngx_http_xslt_module支持(过滤转换XML请求) --with-http_image_filter_module #启用支持传输JPEG/GIF/PNG 图片过滤,默认为不启用,gd库要用到 --with-http_sub_module #启用ngx_http_sub_module支持(允许用一些其他文本替换nginx响应中的一些文本) --with-http_dav_module #启用ngx_http_dav_module支持(增加PUT,DELETE,MKCOL:创建集合,COPY和MOVE方法) --with-http_flv_module #启用ngx_http_flv_module支持(提供寻求内存使用基于时间的偏移量文件) --with-http_gzip_static_module #启用ngx_http_gzip_static_module支持(在线实时压缩输出数据流) --with-http_random_index_module #启用ngx_http_random_index_module支持(从目录中随机挑选一个目录索引) --with-http_secure_link_module #启用ngx_http_secure_link_module支持(计算和检查要求所需的安全链接网址) --with-http_degradation_module #启用ngx_http_degradation_module支持(允许在内存不足的情况下返回204或444码) --with-http_stub_status_module #启用ngx_http_stub_status_module支持(获取nginx自上次启动以来的工作状态) --with-http_perl_module #启用ngx_http_perl_module支持(该模块使nginx可以直接使用perl或通过ssi调用perl) --with-mail #启用POP3/IMAP4/SMTP代理模块支持 --with-mail_ssl_module #启用ngx_mail_ssl_module支持 --add-module= #启用外部模块支持 --with-cpu-opt= #指定编译的CPU,可用的值为: pentium,opteron, amd64, sparc32, sparc64, ppc64等 --with-pcre #启用pcre库(默认会自动去找rpm包安装的pcre库文件以及模块) --with-pcre= #指向pcre库文件目录(如果是源码安装就需要指定,rpm包安装就不需要指定了) --with-pcre-opt= #在编译时为pcre库设置附加参数 --with-perl_modules_path= ##设定perl模块路径 --with-perl= #设定perl库文件路径 --with-debug #启用debug日志 |
五、默认启用的选项(等同于默认启用的模块)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
--without-http #该模块用于http server功能 --without-http-cache #该模块用于http cache功能 --without-http_charset_module #该模块用于重新编码web页面,但只能是一个方向--服务器端到客户端,并且只有一个字节的编码可以被重新编码 --without-http_gzip_module #该模块同-with-http_gzip_static_module功能一样 --without-http_ssi_module #该模块提供了一个在输入端处理处理服务器包含文件(SSI)的过滤器,目前支持SSI命令的列表是不完整的 --without-http_userid_module #该模块用来处理用来确定客户端后续请求的cookies --without-http_access_module #该模块提供了一个简单的基于主机的访问控制。允许/拒绝基于ip地址 --without-http_auth_basic_module #该模块是可以使用用户名和密码基于http基本认证方法来保护你的站点或其部分内容 --without-http_autoindex_module #该模块用于自动生成目录列表,只在ngx_http_index_module模块未找到索引文件时发出请求 --without-http_geo_module #该模块用于创建一些变量,其值依赖于客户端的IP地址 --without-http_map_module #该模块用于使用任意的键/值对设置配置变量 --without-http_referer_module #该模块用来过滤请求,拒绝报头中Referer值不正确的请求 --without-http_rewrite_module #该模块允许使用正则表达式改变URI --without-http_proxy_module #该模块用于代理服务器 --without-http_fastcgi_module #该模块允许Nginx与FastCGI进程交互,并通过传递参数来控制FastCGI进程工作,FastCGI一个常驻型的公共网关接口 --without-http_uwsgi_module #该模块启用uwsgi协议,uWSGI服务器相关 --without-http_scgi_module #该模块用来启用SCGI协议支持,SCGI协议是CGI协议的替代,它是一种应用程序与HTTP服务接口标准 --without-http_memcached_module #该模块用来提供简单的缓存,以提高系统效率 --without-http_limit_zone_module #该模块可以针对条件,进行会话的并发连接数控制 --without-http_limit_req_module #该模块允许你对于一个地址进行请求数量的限制用一个给定的session或一个特定的事件 --without-http_empty_gif_module #该模块在内存中常驻了一个1*1的透明GIF图像,可以被非常快速的调用) --without-http_browser_module #该模块用来创建依赖于请求报头的值 --without-http_split_clients_module #该模块用来基于某些条件划分用户。条件如:ip地址、报头、cookies等等 --without-http_upstream_ip_hash_module #该模块用于负载均衡 --without-mail_pop3_module #该模块用于pop3协议,邮局协议 --without-mail_imap_module #该模块用于邮件的imap协议,邮件接收协议 --without-mail_smtp_module #该模块用于smtp协议,邮件发送协议 |
待续。。。