轻量型HTTP服务器Nginx(高性能Linux服务器构建)
1.1 什么是Nginx
Nginx是一款高性能HTTP和方向代理服务器软件,还是个IMAP/POP3/SMTP代理服务器。
1.2为什么要选择Nginx
1.2.1Nginx与Apache的异同
1.2.2Nginx的优势所在
1)作为WEB服务器,Nginx处理静态文件,索引文件,自动索引的效率非常高。
2)作为代理服务器,Nginx可以实现无缓存的反向代理加速,提高网站的速度
3)作为负载均衡服务器,Nginx可以在内部支持Rails和PHP也可以支持HTTP代理服务器对外进行服务,同时还支持简单的容错和利用算法进行负载均衡.
4)在性能方面,Nginx是专门为性能优化而开发的,在实现上非常注重效率.采用内核Poll模型,可以支持更多的并发,最大可以支持对50000个并发连接数的影响,而且只占用很低的内存资源.
5)稳定性方面, Nginx采用了分阶段资源分配技术,使CPU与内存占用率非常低Nginx官方表示,Nginx保持10000个没有活动的连接,而这些连接只占用2.5M内存,因此DOS这样的***对Nginx来说基本没有任何作用的。
6)在高可用性方面,Nginx支持热部署,启动速度特别迅速,因此可以在不间断服务的情况下,对软件版本或者配置进行升级,即使运行数月也无需重新启动,几乎可以做到7X24小时不间断运行.
1.3Nginx的模版与工作原理
1)原理:用户通过URL访问网站,Nginx通过查找配置文件将客户端请求映射到一个location block中进行匹配,而在这个location中所配置的每个指令将会启动不懂的模块去完成相应的工作.
2)Nginx的模块从功能上分如下三类
1.Handlers(处理器模块).此模块直接处理请求,并且输出内容和修改headers信息等操作.Handlers处理器模块一般只能有一个.
2.Filters(过滤器模块).此类模块主要对其他处理器模块输出内容进行修改操作,最后由Nginx输出.
3.Proxies(代理类模块).此类模块是Nginx的HTTP Uprstream之类的模块,这些模块主要与后端一些服务比如FastCGI等进行交互,实现服务代理和负载均衡的功能.
Nginx分为单工作进程和多工作进程两种工作模式.在单工作进程模式下除主要进程外,还有一个工作进程,工作进程是单线程的;在多工作进程下模式下,每个工作进进程包含多个 线程.Nginx默认为单工作进程.
1.4Nginx的安装与配置
Nginx官方网站是: http://sysoev.ru/nginx/
Nginx英文主页是:http://nginx.net
Nginx三个版本:稳定版丶开发板丶和历史稳定版
Nginx依赖包 gcc openssl-devel pcre-devel zlib-devel三个软件包
Nginx安装
1)编译参数
--prefix=<path>安装路径,如果没有制定,默认为/usr/local/nginx
--sbin-path=<path>
--conf-path=<path>默认是<perfix>/conf/nginx.conf
--pid-path=<path>nginx.pid 的路径,如果没在nginx.conf制定默认为<perfix>/logs/nginx.pid
--lock-path=<path>-nginx.lock文件路径,默认路径<prefix>/logs/nginx.lock
--error-log-path=<path>当没有在nginx.conf中使用”access_log”指令制定时的访问日志位置,默认<prefix>/logs/access.log
--http-log-path=<path>当没有nginx.conf中使用”access_log”指令时访问日志位置默认<prefix>/logs/access.log
--user=<user>当没有在nginx.conf中使用”user”指令时制定nginx运行的用户如果没有制定默认为”nobody”
--group=<group>当没有在nginx.conf中使用”group”指令时制定nginx运行的用户如果没有制定默认为”nobody”
--builddir=DIR-设置构建目录
--with-rtsig_module-启用rtsig模块
--with-select_module –without_select_module如果在configure的时候没有发现kqueue,epoll,rtsig或/dev/poll其中之一,select模块始终为启用状态
--with-poll_module –without-poll_module如果在configure的时候没有发现kqueue,epoll,rtsig或者/dev/poll/其中之一,poll模块始终为启用状态
--with-http_ssl_module 启用ngx_http_ssl_module,启用SSL支持并且能够处理HTTPS请求.需要OpenSSL,在Debian系统中,对应包为libssl_dev
--with-http_realip_module – 启用ngx_http_realip_module
--with-http_addition_module – 启用ngx_http_addition_module
--with-http_sub_module – 启用ngx_http_sub_module
--with-http_dav_module – 启用ngx_http_dav_module
--with-http_flv_module – 启用ngx_http_flv_module
--with-http_stub_status_module – 启用”server status”(服务状态)页
--without-http_charset_module – 禁用ngx_http_charset_module
--without-http_gzip_module – 禁用ngx_http_gzip_module,如果启用,需要zlib包。
--without-http_ssi_module – 禁用ngx_http_ssi_module
--without-http_userid_module – 禁用ngx_http_userid_module
--without-http_access_module – 禁用ngx_http_access_module
--without-http_auth_basic_module – 禁用ngx_http_auth_basic_module
--without-http_autoindex_module – 禁用ngx_http_autoindex_module
--without-http_geo_module – 禁用ngx_http_geo_module
--without-http_map_module – 禁用ngx_http_map_module
--without-http_referer_module – 禁用ngx_http_referer_module
--without-http_rewrite_module – 禁用ngx_http_rewrite_module。如果启用,需要PCRE包。
--without-http_proxy_module – 禁用ngx_http_proxy_module
--without-http_fastcgi_module – 禁用ngx_http_fastcgi_module
--without-http_memcached_module – 禁用ngx_http_memcached_module
--without-http_limit_zone_module – 禁用ngx_http_limit_zone_module
--without-http_empty_gif_module – 禁用ngx_http_empty_gif_module
--without-http_browser_module – 禁用ngx_http_browser_module
--without-http_upstream_ip_hash_module – 禁用ngx_http_upstream_ip_hash_module
--with-http_perl_module – 启用ngx_http_perl_module
--with-perl_modules_path=PATH – 为perl模块设置路径
--with-perl=PATH – 为perl库设置路径
--http-client-body-temp-path=PATH – 为http连接的请求实体临时文件设置路径,如果没有指定,默认为<prefix>/client_body_temp
--http-proxy-temp-path=PATH – 为http代理临时文件设置路径,如果没有指定,默认为<prefix>/proxy_temp
--http-fastcgi-temp-path=PATH - 为http fastcgi临时文件设置路径,如果没有指定,默认为<prefix>/fastcgi_temp
--without-http – 禁用HTTP服务
--with-mail – 启用IMAP4/ POP3/SMTP代理模块
--with-mail_ssl_module – 启用ngx_mail_ssl_module
--with-cc=PATH – 设置C编译器路径
--with-cpp=PATH – 设置C预处理器路径
--with-cc-opt=OPTIONS – 变量CFLAGS中附加的参数,用于FreeBSD中的PCRE库,同样需要指定
--with-cc-opt=”-I /usr/local/include”,如果我们使用select()函数则需要同时增加文件描述符数量,可以通过–with-cc-opt=”-D FD_SETSIZE=2048”指定。
--with-ld-opt=OPTIONS – 通过连接器的附加参数,用于FreeBSD中的PCRE库,同样需要指定
--with-ld-opt=”-L /usr/local/lib”。
--with-cpu-opt=CPU – 指定编译的CPU,可用的值为: pentium, pentiumpro, pentium3, pentium4, athlon, opteron, amd64, sparc32, sparc64, ppc64
--without-pcre – 禁用PCRE库文件,同时将禁用HTTP rewrite 模块,如果要在”location”指令中使用正则表达式,同样需要PCRE库。
--with-pcre=DIR – 设置PCRE库源文件路径。
--with-pcre-opt=OPTIONS – 在编译时为PCRE设置附加参数。
--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汇编源进行优化,可用值为: pentium, pentiumpro。
--with-openssl=DIR – 设置openssl库源文件路径。
--with-openssl-opt=OPTIONS – 在编译时为openssl设置附加参数。
--with-debug – 启用debug记录。
--add-module=PATH – 增加一个在PATH中的第三方模块。
转载于:https://blog.51cto.com/brotherxing/1172815