如何源码编译安装并控制nginx
安装nginx
-
注意
Linux操作系统需要2.6及其以上的内核(支持epoll) -
使用nginx的必备软件
gcc编辑器
yum -y install gcc gcc-c++
pcre库(支持正则表达式)
yum install -y pcre pcre-devel
zlib库(支持gzip压缩传输)
yum install -y zlib zlib-devel
OpenSSL开发库(支持SSL协议)
yum install -y openssl openssl-devel -
Linux内核参数优化方案
配置步骤 -
编译安装
# nginx版本下载链接:http://nginx.org/en/download.html
wget http://nginx.org/download/nginx-1.15.7.tar.gz
tar zxvf nginx-1.15.7.tar.gz
cd nginx-1.15.7
./configure --prefix=/data1/server/nginx --sbin-path=/data1/bin/nginx --user=www --group=www --modules-path=/data1/server/nginx/modules --conf-path=/data1/config/nginx/nginx.conf --error-log-path=/data1/logs/nginx/error.log --http-log-path=/data1/logs/nginx/access.log --pid-path=/data1/tmp/nginx/ngix.pid --lock-path=/data1/tmp/nginx/nginx.lock --with-debug
make
make install
控制nginx
- 启动
- 默认方式启动 /usr/local/nginx/sbin/nginx
- 另行指定配置文件启动 /usr/local/nginx/sbin/nginx -c /tmp/nginx.conf
- 另行指定安装目录启动 /usr/local/nginx/sbin/nginx -p /usr/local/nginx
- 另行指定全局配置项启动 /usr/local/nginx/sbin/nginx -g "pid /var/nginx/test.pid"
- 测试配置信息是否有错误
- /usr/local/nginx/sbin/nginx -t
- 在测试配置阶段不输出信息
- /usr/local/nginx/sbin/nginx -t -q
- 显示版本信息
- /usr/local/nginx/sbin/nginx -v
- 显示编译阶段的参数
- /usr/local/nginx/sbin/nginx -V
- 停止服务
- /usr/local/nginx/sbin/nginx -s stop 或者 kill -s SIGTERM <nginx master pid##
- 重载配置文件
- /usr/local/nginx/sbin/nginx -s reload 或者 kill -s SIGHUP <nginx master pid##
- 日志文件回滚
- /usr/local/nginx/sbin/nginx -s reopen 或者 kil -s SIGUSR1 <nginx master pid##
- 平滑升级nginx
- 通知正在运行的旧版本nginx准备升级 kill -s SIGUSR2 <nginx master pid##
- 重新编译nginx
获取新版nginx源码 wget http://nginx.org/download/nginx-1.15.7.tar.gz 解压 tar zxvf nginx-1.15.7.tar.gz 进入解压目录 cd nginx-1.15.7 配置 ./configure [参数] 编译 make (千万不能运行make install,这样会覆盖安装;make完之后在objs目录下就多了个nginx) 备份旧的nginx程序 cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak 覆盖旧的nginx程序 cp -rfp objs/nginx /usr/local/nginx/sbin/nginx
- 显示帮助 nginx -h 或者 nginx -?
nginx编译参数详解
-
路径相关参数
prefix=PATH # nginx安装部署后的根目录,默认为/usr/local/nginx目录
sbin-path=PATH # 可执行文件的放置路径,默认为<prefix##/scgi_temp
modules-path=PATH # 模块放置路径
conf-path=PATH # nginx.conf配置文件放置路径
error-log-path=PATH # 错误日志放置路径
pid-path=PATH # nginx.pid放置路径
lock-path=PATH # nginx.lock放置路径 -
编译相关参数
with-cc=PATH # C编译器的路径
with-cpp=PATH # C预编辑器的路径
with-cc-opt=OPTIONS # 在nginx编译期间指定加入一些编译选项
with-ld-opt=OPTIONS # 用于加入链接时的参数
with-cpu-opt=CPU # 指定CPU处理器架构,只能从以下取值中选择:pentium、pentiumpro、pentium3、pentium4、athlon、opteron、sparc32、sparc64、ppc64 -
依赖软件的相关参数
-
pcre
without-pcre # 配置文件关闭正则表达式匹配
with-pcre # 强制使用PCRE库
with-pcre=DIR # 指定pcre库的源码位置,在编译nginx时会进入该目录编译pcre源码
with-pcre-opt=OPTIONS # 编译pcre源码时希望加入的编译选项
with-pcre-jit # 编译PCRE库支持即时编译 -
OpenSSL
with-openssl=DIR # 指定OpenSSL库的源码位置,在编译nginx时会进入该目录编译OpenSSL源码(可以访问http://www.openssl.org下载)
with-openssl-opt=OPTIONS # 编译OpenSSL源码时希望加入的编译选项 -
原子库
with-libatomic # 强制使用atomic库
with-libatomic=DIR # atomic所在的位置 -
zlib库
with-zlib=DIR # 指定zlib库的源码位置,在编译nginx时会进入该目录编译zlib源码
with-zlib-opt=OPTIONS # 编译zlib源码时加入的编译选项
with-zlib-asm=CPU # 指定对特定的CPU使用zlib库的汇编优化功能,目前仅支持两种架构:pentium和pentiumpro
-
-
模块相关参数
-
事件模块(默认情况下安装epoll)
with-select_module # 使用select module处理事件驱动
without-select_module # 不按照select module
with-poll_module # 使用poll module处理事件驱动
without-poll_module # 不安装poll module -
默认即编译进入nginx的http模块
without-http_charset_module # 不安装http charset module,这个模块可以将服务器发出的http响应重编码
without-http_gzip_module # 不安装http gzip module,在服务器发出的http响应包中,这个模块可以按照配置文件指定的content-type对特定大小的http相应包体执行gzip压缩
without-http_ssi_module # 不安装http ssi module,这个模块可以在向用户返回的http响应包体中加入特定的内容,如html文件中固定的页头和页尾
without-http_userid_module # 不安装http userid module,这个模块可以通过http请求头部信息里的一些字段认证用户信息,以确定请求是否合法
without-http_access_module # 不安装http access module,这个模块可以根据ip地址限制能够访问服务器的客户端
without-http_auth_basic_module # 不安装http auth basic module,这个模块可以提供最简单的用户名/密码认证
without-http_autoindex_module # 不安装http autoindex module,该模块提供简单的目录浏览功能
without-http_geo_module # 不安装http geo module,这个模块可以定义一些变量,这些变量的值将与客户端IP地址关联,这样nginx针对不同的地区的客户端(根据IP地址判断)返回不一样的结果,例如不同地区显示不同语言的网页
without-http_map_module # 不安装http map module,这个模块可以建立一个key/value映射表,不同的key得到相应的value,这样可以针对不同的URL做特殊处理。例如:返回302重定向响应时,URL不同时返回的Location字段也不一样
without-http_split_clients_module # 不安装http split_clients module,这个模块可以根据客户端的信息,例如IP地址、header头、cookie等,来区分处理
without-http_referer_module # 不安装http referer module,这个模块可以根据请求中的referer字段来拒绝请求
without-http_rewrite_module # 不安装http rewrite module, 这个模块提供http请求在nginx服务内部的重定向功能,依赖pcre库
without-http_proxy_module # 不安装http proxy module,这个模块提供基本的http反向代理功能
without-http_fastcgi_module # 不安装http fastcgi module,这个模块提供FastCGI功能
without-http_uwsgi_module # 不安装http uwsgi module,这个模块提供uWSGI功能
without-http_scgi_module # 不安装http scgi module,这个模块提供SCGI功能
without-http_memcached_module # 不安装http memcached module,这个模块可以使得nginx直接由上游的memcached服务读取数据,并简单地适配成HTTP相应返回给客户端
without-http_limit_conn_module # 不安装http limit conn module,这个模块针对某个IP地址限制并发连接数。例如:使nginx对一个IP地址仅允许一个连接
without-http_limit_req_module # 不安装http limit_req module,module,这个模块针对某个IP地址限制并发连接数。
without-http_empty_gif_module # 不安装http empty_gif module,这个模块可以使得nginx在收到无效请求时,立刻返回内存中的1*1像素的GIF图片。这种好处在于,对于明显的无效请求不会去试图浪费服务器资源
without-http_browser_module # 不安装http browser module,这个模块会根据http请求中的user-agent字段(该字段通常由浏览器填写)来识别浏览器
without-http_upstream_hash_module # 不安装http upstream_hash module,在后端集群session共享的情况,这个模块提供当nginx与后端server建立连接时,会根据ip做散列运算来决定与后端哪台server通信,这样可以实现负载均衡
without-http_upstream_ip_hash_module # 不安装http upstream_ip_hash module,这个模块在后端集群session共享时提供当nginx与后端server建立连接时,会根据ip做散列运算来决定与后端哪台server通信,这样可以实现负载均衡 -
默认不会编译进入nginx的http模块
with-http_ssl_module # http ssl module,这个模块使nginx支持ssl协议,提供https服务(确保已配置OpenSSL)
with-http_realip_module # http realip module,这个模块可以从客户端请求里的header信息(如X-real-ip或者X-forwarded-for)中获取真正的客户端ip地址
with-http_addition_module # http addition module,这个模块可以在返回客户端的http包体头部或者尾部增加内容
with-http_xslt_module # http xslt module,这个模块可以使xml格式的数据在发给客户端前加入xsl渲染(确保已安装libxml2和libxslt)
with-http_image_filter_module # http image_filter module,这个模块将符号配置的图片实时压缩为指定大小(width*height)的缩略图再发送给用户,目前支持JPEG、PNG、GIF格式(确保已安装libgd)
with-http_geoip_module # http geoip module,这个模块可以依据MaxMind GeoIP的IP地址数据库对客户端的IP地址得到实际的地理位置信息(确保有MaxMind GeoIP的库文件,访问http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz获取)
with-http_sub_module # http sub module,这个模块可以在nginx返回客户端的http响应包中将指定的字符串替换为自己需要的字符串
with-http_dav_module # http dav module,这个模块可以让nginx支持webdav标准,如支持webdav协议中的PUT、DELETE、COPY、MOVE、MKCOL等请求
with-http_flv_module # http flv module,这个模块可以在向客户端返回响应时,对FLV格式的视频文件在header头做一些处理,使得客户端可以观看、拖动FLV视频
with-http_mp4_module # http mp4 module,这个模块使客户端可以观看、拖动MP4视频
with-http_gzip_static_module # http gzip_static module,这个模块可以在做gzip压缩前,先查看相同位置是否有已经做过gzip压缩的.gz文件,如果有,就直接返回,这样就可以预先在服务器上做好文档的压缩,给CPU减负
with-http_random_index_module # http random_index module,这个模块在客户端访问某个目录时,随机返回该目录下的任意文件
with-http_secure_link_module # http secure_link module,这个模块提供一种验证请求是否有效的机制。例如:它会验证URL中需要加入的token参数是否属于特定客户端发来的,以及检查时间戳是否过期
with-http_stub_status_module # http stub_status module,这个模块可以让运行中的nginx提供性能统计页面,获取相关的并发连接、请求的信息
with-google_perftools_module # google perftools module,这个模块提供google的性能测试工具 -
邮件代理服务器相关的mail模块
with-mail # 安装邮件服务器反向代理模块,使nginx可以反向代理IMAP、POP3、SMTP等协议。该模块默认不安装
with-mail_ssl_module # 安装mail ssl module。该模块可以使IMAP、POP3、SMTP等协议基于SSL/TLS协议之上使用。该模块默认不安装并依赖于openSSL库
without-mail_pop3_module # 不安装 mail pop module。在使用--with-mail参数后,pop3 module是默认安装的,以使nginx支持pop3协议
without-mail_imap_module # 不安装 mail imap module。在使用--with-mail参数后,imap module是默认安装的,以使nginx支持IMAP协议
without-mail_smtp_module # 不安装 mail smtp module。在使用--with-mail参数后,smtp module是默认安装的,以使nginx支持SMTP协议
-
-
其他模块参数
with-debug # 打印debug调试级别日志
add-module=PATH # 当在nginx里加入第三方模块时,通过这个参数指定第三方模块的路径
without-http # 禁用HTTP服务器
without-http-cache # 禁用http服务器里的缓存cache特性
with-file-aio # 启动文件的异步i/o功能来处理磁盘文件,这需要linux内核支持原生的异步i/o
user=USER # 指定nginx worker进程运行时所属的用户
group=GROUP # 指定nginx worker进程运行时所属的组