Nginx技术!
为什么选择Nginx
- 优点 热部署 …
- 优点 高并发连接 …
- 优点 低的内存消耗 …
- 优点 处理响应请求很快 …
- 优点 具有很高的可靠性 …
- 优点 是一个很牛的高性能Web和反向代理服务器 …
- 优点 几乎可以做到7*24不间断运行,即使运行数个月也不需要重新启动 …
安装步骤(只说编译安装).
安装之前不妨先看一些常用的编译选项.
| 参数选项 | 基本解释 |
|---|---|
| –prefix=PATH | Nginx安装部署后的根目录,默认为/usr/local/nginx目录.注意:这个目标的设置会影响其他参数中的相对目录.例如,如果设置了–sbin-path=sbin/nginx,那么实际上可执行文件会被放到/usr/local/nginx/sbin/nginx中. |
| –sbin-path=PATH | 可执行文件的放置路径 |
| –conf-path=PATH | 配置文件放置路径 |
| –error-log-path=PATH | error日志文件的放置路径.error日志用于定位问题,可输出多种级别(包括debug调试级别)的日志.它的配置非常灵活,可以在nginx.conf里配置为不同请求的日志并输出到不同的log文件中.这里是默认的Nginx核心日志路径 |
| –pid-path=PATH | pid文件的存放路径.这个文件里仅以ASCII码存放着Nginx master的进程ID,有了这个进程ID,用命令行(例如nginx -s reload)通过读取master进程ID向master进程发送信号时,才能对运行中的Nginx服务产生作用 |
| –lock-path=PATH | lock文件的放置路径 |
| –user=www | 指定Nginx worker进程运行时所属的用户。注意:不要将启动worker进程的用户设为root,在worker进程出问题时master进程要具备停止/启动worker进程的能力. |
| –group=GROUP | 指定Nginx worker进程运行时所属的组 |
| –build=NAME | configure执行时与编译期间产生的临时文件名称 |
| –builddir=DIR | configure执行时与编译期间产生的临时文件放置的目录,包括产生的Makefile、C源文件、目标文件、可执行文件等 |
| –with-rtsig_module | 使用rtsig module处理事件驱动 默认情况下,Nginx是不安装rtsig module的,即不会把rtsig module编译进最终的Nginx二进制程序中 |
| –with-select_module | 使用select module处理事件驱动 select是Linux提供的一种多路复用机制,在epoll调用没有诞生前,例如在Linux 2.4及其之前的内核中,select用于支持服务器提供高并发连接 默认情况下,Nginx是不安装select module的,但如果没有找到其他更好的事件模块,该模块将会被安装 |
| –without-select_module | 不安装select module |
| –with-poll_module | 使用poll module处理事件驱动 poll的性能与select类似,在大量并发连接下性能都远不如epoll。默认情况下,Nginx是不安装poll |
| –without-poll_module | 不安装poll module |
| –with-file-aio | 使用AIO方式处理事件驱动 (IO异步大幅度提升性能,需要内核 2.6.22 以上的版本) |
| –with-ipv6 | 使能IPV6 |
| –with-https_ssl_module | 安装https ssl module。该模块使Nginx支持SSL协议,提供HTTPS服务。 注意:该模块的安装依赖于OpenSSL开源软件,即首先应确保已经在之前的参数中配置了OpenSSL |
| –with-https_spdy_module | 开启 ngx_https_spdy_module 模块。是Google开发的基于TCP的应用层协议,用以最小化网络延迟,提升网络速度,优化用户的网络使用体验。SPDY并不是一种用于替代HTTP的协议,而是对HTTP协议的增强 |
| –with-https_realip_module | 开启 ngx_https_realip_module 模块 。此模块支持显示真实来源IP地址,主要用于NGINX做前端负载均衡服务器使用。 |
| –with-https_addition_module | 开启 https addtion module。该模块可以在返回客户端的HTTP包体头部或者尾部增加内容。作为一个输出过滤器,支持不完全缓冲,分部分响应请求,游戏服务器不必安装,门户网站可以安装,有利于被搜索引擎收录页面信息。 |
| –with-https_xslt_module | 开启 ngx_https_xslt_module 模块 这个模块可以使XML格式的数据在发给客户端前加入XSL渲染,0.7.8后面版本才可以使用。 |
| –with-https_image_filter_module | 开启 ngx_https_image_filter_module 模块.这个模块将符合配置的图片实时压缩为指定大小(width*height)的缩略图再发送给用户,目前支持JPEG,PNG,GIF格式.注意:这个模块依赖于开源的libgd库,在安装前确保操作系统已经安装了libgd,是nginx提供的集成图片处理模块,支持nginx-0.7.54以后的版本,在网站访问量不是很高磁盘有限不想生成多余的图片文件的前提下可,就可以用它实时缩放图片,旋转图片,验证图片有效性以及获取图片宽高以及图片类型信息,由于是即时计算的结果,所以网站访问量大的话,不建议使用。 |
| –with-https_geoip_module | 开启 ngx_https_geoip_module 模块,这个模块基于客户端的IP地址创建一些ngx_https_geoip_module变量,并与MaxMindGeoIP文件进行匹配,该模块仅用于0.7.63和0.8.6版本之后。 |
| –with-https_sub_module | 开启 ngx_https_sub_module 。该模块可以在Nginx返回客户端的HTTP响应包中将指定的字符串替换为自己需要的字符串 例如,在HTML的返回中,将替换为 |
| –with-https_dav_module | 开启 ngx_https_dav_module 模块。这个模块可以让Nginx支持Webdav标准,如支持Webdav协议中的PUT、DELETE、COPY、MOVE、MKCOL等请求 默认情况下为关闭,需编译开启,如果开启WebDAV扩展动作模块,(可为文件和目录指定权限) |
| –with-https_flv_module | 开启 ngx_https_flv_module 模块 ,这个模块可以在向客户端返回响应时,对FLV格式的视频文件在header头做一些处理,使得客户端可以观看、拖动FLV视频 |
| –with-https_mp4_module | 开启 ngx_https_mp4_module 模块,该模块使客户端可以观看、拖动MP4视频 |
| –with-https_gunzip_module | 开启 ngx_https_gunzip_module 模块,是一个过滤器, 它为不支持“gzip”编码方法的客户端解压具有“Content-Encoding: gzip”头的响应。 当希望存储压缩后的数据以节省空间和减少I/O开销,又不希望对那些不支持gzip压缩的客户端造成不利影响时, 此模块会派上用途。 |
| –with-https_gzip_static_module | 开启 ngx_https_gzip_static_module 模块 ,允许发送以“.gz”作为文件扩展名的预压缩文件,防止文件被重复压缩,以替代发送普通文件。如果采用gzip模块把一些文档进行gzip格式压缩后再返回给客户端,那么对同一个文件每次都会重新压缩,这是比较消耗服务器CPU资源的。 |
| –with-https_auth_request_module | 开启 ngx_https_auth_request_module 模块 |
| –with-https_random_index_module | 开启 ngx_https_random_index_module 模块 ,该模块在客户端访问某个目录时,随机返回该目录下的索引文件 |
| –with-https_secure_link_module | 开启 ngx_https_secure_link_module ,该模块提供一种验证请求是否有效的机制。例如,它会验证URL中需要加入的token参数是否属于特定客户端发来的,以及检查时间戳是否过期计算和检查要求所需的安全链接网址(防盗链) |
| –with-https_degradation_module | 开启 ngx_https_degradation_module 模块,该模块针对一些特殊的系统调用(如sbrk)做一些优化,允许在内存不足的情况下返回204或444码。 |
| –with-https_stub_status_module | 开启 ngx_https_stub_status_module 模块,该模块可以让运行中的Nginx提供性能统计页面,获取相关的并发连接、请求的信息 |
| –without-https_charset_module | 关闭 https charset module。这个模块可以将服务器发出的HTTP响应重编码 |
| –without-https_gzip_module | 关闭 ngx_https_gzip_module模块,在服务器发出的HTTP响应包中,这个模块可以按照配置文件指定的content-type对特定大小的HTTP响应包体执行gzip压缩 |
| –without-https_ssi_module | 关闭 ngx_https_ssi_module模块,该模块可以在向用户返回的HTTP响应包体中加入特定的内容,如HTML文件中固定的页头和页尾 |
| –without-https_userid_module | 关闭 ngx_https_userid_module模块,这个模块可以通过HTTP请求头部信息里的一些字段认证用户信息,以确定请求是否合法 |
| –without-https_access_module | 关闭 访问模块,这个模块可以根据IP地址限制能够访问服务器的客户端 |
| –without-https_auth_basic_module | 禁用基本的认证模块,这个模块可以提供最简单的用户名/密码认证 |
| –without-https_autoindex_module | 禁用自动索引模块,该模块提供简单的目录浏览功能 |
| –without-https_geo_module | 禁用Geo模块,这个模块可以定义一些变量,这些变量的值将与客户端IP地址关联,这样Nginx针对不同的地区的客户端(根据IP地址判断)返回不一样的结果,例如不同地区显示不同语言的网页 |
| –without-https_map_module | 禁用Map模块,这个模块可以建立一个key/value映射表,不同的key得到相应的value,这样可以针对不同的URL做特殊处理。例如,返回302重定向响应时,可以期望URL不同时返回的Location字段也不一样 |
| –without-https_split_clients_module | 切割客户端IP,该模块会根据客户端的信息,例如IP地址、header头、cookie等,来区分处理,nginx 的 Split Clients(切割客户端IP)的作用是使用 MurmurHash2 哈希算法对客户端的IP进行运算,得到一个32位的整数,这个数值范围从 0~4294967296,匹配不同的区间位置,得到不同的值赋予某个变量。最后根据这变量的不同,作不同的逻辑处理。 |
| –without-https_referer_module | 该模块可以根据请求中的referer字段来拒绝请求 |
| –without-https_rewrite_module | 禁用Rewrite模块,该模块提供HTTP请求在Nginx服务内部的重定向功能,依赖PCRE库 |
| –without-https_proxy_module | 禁用代理模块。该模块提供基本的HTTP反向代理功能 |
| –without-https_fastcgi_module | 禁用FastCGI模块。该模块提供FastCGI功能 |
| –without-https_uwsgi_module | 禁用uwsgi模块。该模块提供uWSGI功能 |
| –without-https_scgi_module | 禁用scqi模块。该模块提供SCGI功能 |
| –without-https_memcached_module | 禁用Memcached模块。该模块可以使得Nginx直接由上游的memcached服务读取数据,并简单地适配成HTTP响应返回给客户端 |
| –without-https_limit_conn_module | 禁用limit_conn_zone模块,该模块针对某个IP地址限制并发连接数。例如,使Nginx对一个IP地址仅允许一个连接。 |
| –without-https_limit_req_module | 禁用Limit Requests模块。该模块针对某个IP地址限制并发请求数 |
| –without-https_empty_gif_module | 禁用Empty Gif模块。该模块可以使得Nginx在收到无效请求时,立刻返回内存中的1×1像素的GIF图片。这种好处在于,对于明显的无效请求不会去试图浪费服务器资源 |
| –without-https_browser_module | 禁用Browser 模块。该模块会根据HTTP请求中的user-agent字段(该字段通常由浏览器填写)来识别浏览器 |
| –without-https_upstream_hash_module | 禁用Upstream模块。该模块用于配置负载均衡结构 |
| –without-https_upstream_ip_hash_module | 禁用Upstream模块 该模块提供当Nginx与后端server建立连接时,会根据IP做散列运算来决定与后端哪台server通信,这样可以实现负载均衡 |
| –without-https_upstream_least_conn_module | 禁用Upstream模块 中的 least 负载均衡算法 |
| –without-https_upstream_keepalive_module | 禁用Upstream模块 中的 keepalive 负载均衡算法 |
| ––with-https_perl_module | 需要安装 perl |
| ––with-perl_modules_path=PATH | perl module放置的路径。只有使用了第三方的perl module,才需要配置这个路径 |
| ––with-perl=PATH | perl binary放置的路径。如果配置的Nginx会执行Perl脚本,那么就必须要设置此路径 |
| ––https-log-path=PATH | access日志放置的位置。每个HTTP请求到结束时都会记录 |
| –https-client-body-temp-path=PATH | 处理HTTP请求时如果请求的包体需要暂时存放到临时磁盘文件中,则把这样的临时文件放置到该路径下 |
| ––https-proxy-temp-path=PATH | Nginx作为HTTP反向代理服务器时,上游服务器产生的HTTP包体在需要临时存放到磁盘文件时,这样的临时文件将放到该路径下 |
| ––https-fastcgi-temp-path=PATH | Fastcgi所使用临时文件的放置目录 |
| –https-uwsgi-temp-path=PATH | uWSGI所使用临时文件的放置目录 |
| –https-scgi-temp-path=PATH | SCGI所使用临时文件的放置目录 |
| –without-https | 禁用HTTP服务 |
| –without-https-cache | 禁用HTTP 缓冲功能 |
| –with-mail | 开启邮件服务代理(mail server proxy)模块,支 持POP3, IMAP4和SMTP。该功能默认禁用 |
| –with-mail_ssl_module | 开启邮件代理服务对SSL的支持。该功能默认禁用 |
| –without-mail_pop3_module | 在邮件代理下禁用POP3功能。在开启邮件代理模块后该功能默认启用 |
| –without-mail_imap_module | 对邮件代理服务器禁用IMAP4模块,在开启邮件代理模块后该功能默认启用 |
| –without-mail_smtp_module | 对于邮件代理服务器禁用SMTP模块,在开启邮件代理模块后该功能默认启用 |
| –with-google_perftools_module | Google的针对nginx性能调优的工具,需要安装:yum install gperftools gperftools-devel |
| –with-cpp_test_module | C预编译器测试模块 |
| –add-module=PATH | 当在Nginx里加入第三方模块时,通过这个参数指定第三方模块的路径 |
| –with-cc=PATH | C编译器的路径 |
| –with-cpp=PATH | C预编译器的路径 |
| –with-cc-opt=OPTIONS | 如果希望在Nginx编译期间指定加入一些编译选项,如指定宏或者使用-I加入某些需要包含的目录,这时可以使用该参数达成目的 |
| –with-ld-opt=OPTIONS | 最终的二进制可执行文件是由编译后生成的目标文件与一些第三方库链接生成的,在执行链接操作时可能会需要指定链接参数,–with-ld-opt就是用于加入链接时的参数。例如,如果我们希望将某个库链接到Nginx程序中,需要在这里加入–with-ld-opt=-llibraryName -LlibraryPath,其中libraryName是目标库的名称,libraryPath则是目标库所在的路径 |
| ––with-cpu-opt=CPU | 指定CPU处理器架构,只能从以下取值中选择:pentium、pentiumpro、pentium3、pentium4、athlon、opteron、sparc32、sparc64、ppc64 |
| –without-pcre | 如果确认Nginx不用解析正则表达式,也就是说,nginx.conf配置文件中不会出现正则表达式,那么可以使用这个参数 |
| ––with-pcre | 强制使用PCRE库 |
| ––with-pcre=DIR | 指定PCRE库的源码位置,在编译Nginx时会进入该目录编译PCRE源码 |
| –with-pcre-opt=OPTIONS | 编译PCRE源码时希望加入的编译选项 |
| –with-pcre-jit | 编译PCRE库支持及时编译 |
| –with-md5=DIR | 指定SHA1库的源码位置,在编译Nginx时会进入该目录编译SHA1源码。 注意:OpenSSL中已经有了SHA1算法的实现。如果已经安装了OpenSSL,那么完全可以使用OpenSSL实现的SHA1算法 |
| –with-md5-opt=OPTIONS | 编译MD5源码时希望加入的编译选项 |
| –with-md5-asm | 使用MD5的汇编源码 |
| –with-sha1=DIR | 指定SHA1库的源码位置,在编译Nginx时会进入该目录编译SHA1源码。 注意:OpenSSL中已经有了SHA1算法的实现。如果已经安装了OpenSSL,那么完全可以使用OpenSSL实现的SHA1算法 |
| –with-sha1-opt=OPTIONS | 编译SHA1源码时希望加入的编译选项 |
| –with-sha1-asm | 使用SHA1的汇编源码 |
| –with-zlib=DIR | 指定zlib库的源码位置,在编译Nginx时会进入该目录编译zlib源码。如果使用了gzip压缩功能,就需要zlib库的支持 |
| –with-zlib-opt=OPTIONS | 编译zlib源码时希望加入的编译选项 |
| –with-zlib-asm=CPU | 指定对特定的CPU使用zlib库的汇编优化功能,目前仅支持两种架构:pentium和pentiumpro |
| –with-libatomic | 强制使用atomic库。atomic库是CPU架构独立的一种原子操作的实现。它支持以下体系架构:x86(包括i386和x86_64)、PPC64、Sparc64(v9或更高版本)或者安装了GCC 4.1.0及更高版本的架构。 |
| –with-libatomic=DIR | atomic库所在的位置 |
| –with-openssl=DIR | 指定OpenSSL库的源码位置,在编译Nginx时会进入该目录编译OpenSSL源码。注意:如果Web服务器支持HTTPS,也就是SSL协议,Nginx要求必须使用OpenSSL。 |
| –with-openssl-opt=OPTIONS | 编译OpenSSL源码时希望加入的编译选项 |
| –with-debug | 将Nginx需要打印debug调试级别日志的代码编译进Nginx。这样可以在Nginx运行时通过修改配置文件来使其打印调试日志,这对于研究、定位Nginx问题非常有帮助 |
搭建lua环境;
wget http://luajit.org/download/LuaJIT-2.0.5.tar.gz
tar -xvf *tar.gz
make install PREFIX=/usr/local/luajit #编译安装lua;
#--添加lua库到系统环境变量;
cat >/etc/ld.so.conf.d/luajit.conf<<EOF
/usr/local/luajit/lib
EOF
case $(uname -m) in
'x86_64')
ln -sf /usr/local/luajit/lib/libluajit-5.1.so.2 /lib64/libluajit-5.1.so.2
;;
*)
ln -sf /usr/local/luajit/lib/libluajit-5.1.so.2 /usr/lib/libluajit-5.1.so.2
;;
esac
ldconfig
#--添加lua环境变量;
cat >/etc/profile.d/luajit.sh<<EOF
export LUAJIT_LIB=/usr/local/luajit/lib
export LUAJIT_INC=/usr/local/luajit/include/luajit-2.1
EOF
source /etc/profile.d/luajit.sh日常编译配置,嵌入Lua;
./configure \
--user=www --group=www \
--prefix=/usr/local/nginx \
--pid-path=/usr/local/nginx/logs/nginx.pid \
--with-pcre=../pcre-8.42 \
--with-zlib=../zlib-1.2.11 \
--with-openssl=../openssl-1.1.1g \
--with-openssl-opt='enable-weak-ssl-ciphers' \
--with-http_gzip_static_module \
--with-http_ssl_module \
--with-http_stub_status_module \
--with-http_v2_module \
--with-http_sub_module \
--with-stream \
--with-stream_ssl_module \
--with-file-aio \
--with-ipv6 \
--with-ld-opt=-Wl,-rpath,/usr/local/luajit/lib \
--add-module=../lua-nginx-module-0.10.14 \
--add-module=../ngx_devel_kit-0.3.1 && \
make V=99 -j $(nproc) && make install > install.log配置Systemd;
#--systemd构建;
cat >/etc/systemd/system/nginx.service<<EOF
[Unit]
Description=The NGINX HTTP and reverse proxy server
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/bin/kill -s QUIT \$MAINPID
PrivateTmp=false
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload

