0x01 Nginx有哪些优点
这表现在两个方面:一方面,在正常情况下,单次请求会得到更快的响应; 另一方在高峰期(如有数以万计的并发请求),Nginx可以比其他Web服务器更快地响应请
Nginx的设计极具扩展性,它完全是由多个不同功能、不同层次、不同类型且耦合度极
低的模块组成。因此,当对某一个模块修复Bug或进行升级时,可以专注于模块自身,无须
在意其他。
Nginx的高可靠性来自于其核心框架代码
的优秀设计、模块设计的简单性;官方提供的常用模块都非常稳定,每个worker进程
相对独立,master进程在1个worker进程出错时可以快速“拉起”新的worker子进程提供服务。
一般情况下,10000个非活跃的HTTP Keep-Alive连接在Nginx中仅消耗2.5MB的内存,
理论上,Nginx支持的并发连接上限取决于内存,10万远未封顶。
master管理进程与worker工作进程的分离设计,使得Nginx能够提供热部署功能,即可以
在7×24小时不间断服务的前提下,升级Nginx的可执行文件。并且也支持不停止服务就
更新配置项、更换日志文件等功能
linux系统内核需要2.6及以上版本才能使用epoll模型.
而在Linux上使用select或poll来解决事件的多路复用,是无法解决高并发压力问题
的
#查看系统内核版本
[root@localhost xiaoqi]# uname -r
3.10.0-327.el7.x86_64
0x02 安装GCC与dev库
- GCC编译器:
yum install gcc gcc-c++
- 正则表达式PCRE库:
yum install -y pcre pcre-devel
- zlib压缩库:
yum install -y zlib zlib-devel
- OpenSSL开发库:
yum install -y openssl openssl-devel
0x03 安装目录及参数规划
- nginx安装目录:
/etc/nginx
- nginx配置文件目录:
/usr/local/nginx/nginx.conf
- nginx虚拟服务器配置目录:
/usr/local/nginx/vhost/
- log日志目录:
/var/log/nginx/
- pid文件目录:
/var/run/nginx.pid
- lock锁目录:
/var/run/nginx.lock
- 临时缓存目录:
/var/cache/nginx
- 站点目录:
/www/wwwroot/
- nginx运行用户名:
nginx
- nginx运行用户组:
nginx
0x04 configure的命令参数
- 列出configure包含的参数:
./configure --help
通用配置选项解释
选项 | 解释 |
---|
--prefix=PATH | Ngi口x 安装的根路径,所有其他的安装路径都要依赖于该选项 |
--sbin-path=PATH | 指定口ginx 二进制文件的路径。如果没有指定,那么这个路径会 依赖于 prefix 选项 |
--conf-path=PATH | 如果在命令行没有指定配置文件,那么将会通过这里指定的路径,nginx 将会去那里查找它的配置文件 |
--error-log-path=PATH | 指定错误文件的路径,nginx 将会往其中写入错误日志文件,除非有其他的配置 |
--pid-path=PATH | 指定的文件将会写入nginx master进程的pid通常卸载/var/run/目录下 |
--lock-path=PATH | 共享储存器互斥锁文件的路径 |
--user=USER | worker进程运行的用户 |
--group=GROUP | worker进程运行的用户组 |
--with-file-aio | 为FreeBSD 4.3+和linux 2.6.22+系统启用异步I/O |
--with-debug | 这个选项用于调试日志,在生产环境的系统中不推荐使用该选项 |
临时路径配置选项
选项 | 解释 |
---|
--error-log-path=PATH | 错误日志的默认路径 |
--http-log-path=PATH | http 访问日志的默认路径 |
--http-client-body-temp-path=PATH | 从客户端收到请求后,该选项设置的目录用于作为请求体 临时存放的目录。如果 WebDAV 模块启用,那么推荐设置 该路径为同 一文件系统上的目录作为最终的目的地 |
--http-proxy-temp-path=PATH | 在使用代理后,通过该选项设置存放临时文件路径 |
--http-fastcgi-temp-path=PATH | 设置 FastCGI 临时文件的目录 |
--http-uwsgi-temp-path=PATH | 设置 uWSG工临时文件的目录 |
--http-scgi-temp-path=PATH | 设置 SCGII临时文件的目录 |
PCRE的配置参数
选项 | 解释 |
---|
--without-pcre | 如果确定Nginx不用解析正则表达式,那么可以使用这个参数 |
--with-pcre | 强制使用PCRE库 |
--with-pcre=DIR | 指定PCRE库的源码位置,在编译nginx时会进入该目录编译PCRE源码 |
--with-pcre-opt=OPTIONS | 编译PCRE源码是希望加入的编译选项 |
OpenSSL的配置参数
选项 | 解释 |
---|
--with-openssl=DIR | 指定OpenSSL库的源码位置,在编译nginx时会进入该目录编译OpenSSL.如果web服务器需要使用HTTPS,那么Nginx要求必须使用OpenSSL |
--with-openssl-opt=OPTIONS | 编译OpenSSL源码时希望加入的编译选项 |
zlib的配置参数
选项 | 解释 |
---|
--with-zlib=DIR | 指定zlib库的源码位置,在编译nginx时会进入该目录编译zlib.如果需要使用gzip压缩就必须要zlib库的支持 |
--with-zlib-opt=OPTIONS | 编译zlib源码时希望加入的编译选项 |
--with-zlib-asm=CPU | 指定对特定的CPU使用zlib库的汇编优化功能,目前支持两种架构:pentium和pentiumpro. |
下列是ngx模块的解释和不常用的参数介绍
--build=NAME set build name
--builddir=DIR set build directory
--with-select_module enable select module
--without-select_module disable select module
--with-poll_module enable poll module
--without-poll_module disable poll module
--with-threads enable thread pool support
--with-file-aio enable file AIO support
--with-http_ssl_module enable ngx_http_ssl_module
--with-http_v2_module enable ngx_http_v2_module
--with-http_realip_module enable ngx_http_realip_module
--with-http_addition_module enable ngx_http_addition_module
--with-http_xslt_module enable ngx_http_xslt_module
--with-http_xslt_module=dynamic enable dynamic ngx_http_xslt_module
--with-http_image_filter_module enable ngx_http_image_filter_module
--with-http_image_filter_module=dynamic
enable dynamic ngx_http_image_filter_module
--with-http_geoip_module enable ngx_http_geoip_module
--with-http_geoip_module=dynamic enable dynamic ngx_http_geoip_module
--with-http_sub_module enable ngx_http_sub_module
--with-http_dav_module enable ngx_http_dav_module
--with-http_flv_module enable ngx_http_flv_module
--with-http_mp4_module enable ngx_http_mp4_module
--with-http_gunzip_module enable ngx_http_gunzip_module
--with-http_gzip_static_module enable ngx_http_gzip_static_module
--with-http_auth_request_module enable ngx_http_auth_request_module
--with-http_random_index_module enable ngx_http_random_index_module
--with-http_secure_link_module enable ngx_http_secure_link_module
--with-http_degradation_module enable ngx_http_degradation_module
--with-http_slice_module enable ngx_http_slice_module
--with-http_stub_status_module enable ngx_http_stub_status_module
--without-http_charset_module disable ngx_http_charset_module
--without-http_gzip_module disable ngx_http_gzip_module
--without-http_ssi_module disable ngx_http_ssi_module
--without-http_userid_module disable ngx_http_userid_module
--without-http_access_module disable ngx_http_access_module
--without-http_auth_basic_module disable ngx_http_auth_basic_module
--without-http_mirror_module disable ngx_http_mirror_module
--without-http_autoindex_module disable ngx_http_autoindex_module
--without-http_geo_module disable ngx_http_geo_module
--without-http_map_module disable ngx_http_map_module
--without-http_split_clients_module disable ngx_http_split_clients_module
--without-http_referer_module disable ngx_http_referer_module
--without-http_rewrite_module disable ngx_http_rewrite_module
--without-http_proxy_module disable ngx_http_proxy_module
--without-http_fastcgi_module disable ngx_http_fastcgi_module
--without-http_uwsgi_module disable ngx_http_uwsgi_module
--without-http_scgi_module disable ngx_http_scgi_module
--without-http_grpc_module disable ngx_http_grpc_module
--without-http_memcached_module disable ngx_http_memcached_module
--without-http_limit_conn_module disable ngx_http_limit_conn_module
--without-http_limit_req_module disable ngx_http_limit_req_module
--without-http_empty_gif_module disable ngx_http_empty_gif_module
--without-http_browser_module disable ngx_http_browser_module
--without-http_upstream_hash_module
disable ngx_http_upstream_hash_module
--without-http_upstream_ip_hash_module
disable ngx_http_upstream_ip_hash_module
--without-http_upstream_least_conn_module
disable ngx_http_upstream_least_conn_module
--without-http_upstream_random_module
disable ngx_http_upstream_random_module
--without-http_upstream_keepalive_module
disable ngx_http_upstream_keepalive_module
--without-http_upstream_zone_module
disable ngx_http_upstream_zone_module
--with-http_perl_module enable ngx_http_perl_module
--with-http_perl_module=dynamic enable dynamic ngx_http_perl_module
--with-perl_modules_path=PATH set Perl modules path
--with-perl=PATH set perl binary pathname
--without-http disable HTTP server
--without-http-cache disable HTTP cache
--with-mail enable POP3/IMAP4/SMTP proxy module
--with-mail=dynamic enable dynamic POP3/IMAP4/SMTP proxy module
--with-mail_ssl_module enable ngx_mail_ssl_module
--without-mail_pop3_module disable ngx_mail_pop3_module
--without-mail_imap_module disable ngx_mail_imap_module
--without-mail_smtp_module disable ngx_mail_smtp_module
--with-stream enable TCP/UDP proxy module
--with-stream=dynamic enable dynamic TCP/UDP proxy module
--with-stream_ssl_module enable ngx_stream_ssl_module
--with-stream_realip_module enable ngx_stream_realip_module
--with-stream_geoip_module enable ngx_stream_geoip_module
--with-stream_geoip_module=dynamic enable dynamic ngx_stream_geoip_module
--with-stream_ssl_preread_module enable ngx_stream_ssl_preread_module
--without-stream_limit_conn_module disable ngx_stream_limit_conn_module
--without-stream_access_module disable ngx_stream_access_module
--without-stream_geo_module disable ngx_stream_geo_module
--without-stream_map_module disable ngx_stream_map_module
--without-stream_split_clients_module
disable ngx_stream_split_clients_module
--without-stream_return_module disable ngx_stream_return_module
--without-stream_upstream_hash_module
disable ngx_stream_upstream_hash_module
--without-stream_upstream_least_conn_module
disable ngx_stream_upstream_least_conn_module
--without-stream_upstream_random_module
disable ngx_stream_upstream_random_module
--without-stream_upstream_zone_module
disable ngx_stream_upstream_zone_module
--with-google_perftools_module enable ngx_google_perftools_module
--with-cpp_test_module enable ngx_cpp_test_module
--add-module=PATH enable external module
--add-dynamic-module=PATH enable dynamic external module
--with-compat dynamic modules compatibility
--with-cc=PATH set C compiler pathname
--with-cpp=PATH set C preprocessor pathname
--with-cc-opt=OPTIONS set additional C compiler options
--with-ld-opt=OPTIONS set additional linker options
--with-cpu-opt=CPU build for the specified CPU, valid values:
pentium, pentiumpro, pentium3, pentium4,
athlon, opteron, sparc32, sparc64, ppc64
--with-libatomic force libatomic_ops library usage
--with-libatomic=DIR set path to libatomic_ops library sources
0x05 Nginx编译步骤
#创建nginx用户与用户组
groupaddd nginx
useradd -g nginx nginx
#解压nginx源码包并进入nginx源码根目录
[root@localhost ~]# tar -axv -f nginx-1.17.0.tar.gz && cd nginx-1.17.0
#生成makefile文件
./configure \
--prefix=/etc/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.pid \
--lock-path=/var/run/nginx.lock \
--http-client-body-temp-path=/var/cache/nginx/client_temp \
--http-proxy-temp-path=/var/cache/nginx/proxy_temp \
--http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp \
--http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp \
--http-scgi-temp-path=/var/cache/nginx/scgi_temp \
--user=nginx \
--group=nginx \
--with-file-aio \
--with-threads \
--with-http_addition_module \
--with-http_auth_request_module \
--with-http_dav_module \
--with-http_flv_module \
--with-http_gunzip_module \
--with-http_gzip_static_module \
--with-http_mp4_module \
--with-http_random_index_module \
--with-http_realip_module \
--with-http_secure_link_module \
--with-http_slice_module \
--with-http_ssl_module \
--with-http_stub_status_module \
--with-http_sub_module \
--with-http_v2_module \
--with-mail \
--with-mail_ssl_module \
--with-stream \
--with-stream_realip_module \
--with-stream_ssl_module \
--with-stream_ssl_preread_module
Configuration summary
+ using threads
+ using system PCRE library
+ using system OpenSSL library
+ using system zlib library
nginx path prefix: "/etc/nginx"
nginx binary file: "/usr/sbin/nginx"
nginx modules path: "/etc/nginx/modules"
nginx configuration prefix: "/etc/nginx"
nginx configuration file: "/etc/nginx/nginx.conf"
nginx pid file: "/var/run/nginx.pid"
nginx error log file: "/var/log/nginx/error.log"
nginx http access log file: "/var/log/nginx/access.log"
nginx http client request body temporary files: "/var/cache/nginx/client_temp"
nginx http proxy temporary files: "/var/cache/nginx/proxy_temp"
nginx http fastcgi temporary files: "/var/cache/nginx/fastcgi_temp"
nginx http uwsgi temporary files: "/var/cache/nginx/uwsgi_temp"
nginx http scgi temporary files: "/var/cache/nginx/scgi_temp"
make && make install
#安装成功执行以下命令查看nginx版本号
[root@localhost nginx]# nginx -v
nginx version: nginx/1.17.0
0x06 Nginx编译时编译Lua如下
编译步骤
#安装过程如下:
[root@localhost ~]# wget http://luajit.org/download/LuaJIT-2.0.2.tar.gz
[root@localhost ~]# tar -axv -f LuaJIT-2.0.2.tar.gz
[root@localhost ~]# cd LuaJIT-2.0.2
[root@localhost LuaJIT-2.0.2]# make install PREFIX=/etc/LuaJIT
#添加环境变量
[root@localhost ~]# export LUAJIT_LIB=/etc/LuaJIT/lib
[root@localhost ~]# export LUAJIT_INC=/etc/LuaJIT/include/luajit-2.0
nginx编译加入lua步骤
[root@localhost ~]# wget https://github.com/simplresty/ngx_devel_kit/archive/v0.3.1rc1.zip
[root@localhost ~]# wget https://github.com/openresty/lua-nginx-module/archive/v0.10.9rc7.tar.gz
[root@localhost ~]# tar -axf v0.3.1rc1.tar.gz && tar -zxf v0.10.9rc7.tar.gz
[root@localhost ~]# mv lua-nginx-module-0.10.9rc7/ lua-nginx-module && mv ngx_devel_kit-0.3.1rc1/ ngx_devel_kit
#重新生成makefile加入lua-module和lua-devel
./configure \
--prefix=/etc/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.pid \
--lock-path=/var/run/nginx.lock \
--http-client-body-temp-path=/var/cache/nginx/client_temp \
--http-proxy-temp-path=/var/cache/nginx/proxy_temp \
--http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp \
--http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp \
--http-scgi-temp-path=/var/cache/nginx/scgi_temp \
--user=nginx \
--group=nginx \
--with-compat \
--with-file-aio \
--with-threads \
--with-http_addition_module \
--with-http_auth_request_module \
--with-http_dav_module \
--with-http_flv_module \
--with-http_gunzip_module \
--with-http_gzip_static_module \
--with-http_mp4_module \
--with-http_random_index_module \
--with-http_realip_module \
--with-http_secure_link_module \
--with-http_slice_module \
--with-http_ssl_module \
--with-http_stub_status_module \
--with-http_sub_module \
--with-http_v2_module \
--with-mail \
--with-mail_ssl_module \
--with-stream \
--with-stream_realip_module \
--with-stream_ssl_module \
--with-stream_ssl_preread_module \
--add-module=/root/ngx_devel_kit \
--add-module=/root/lua-nginx-module \
--with-ld-opt="-Wl,-rpath,$LUAJIT_LIB"
#编译安装
[root@localhost nginx-1.17.0]# make -j2 && make install
[root@localhost nginx-1.17.0]# nginx -V
nginx version: nginx/1.17.0
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-36) (GCC)
built with OpenSSL 1.0.2k-fips 26 Jan 2017
TLS SNI support enabled
configure arguments: --prefix=/etc/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.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp
--http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp
--http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-compat --with-file-aio --with-threads --with-http_addition_module
--with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module
--with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module
--with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module
--with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module
--add-module=/root/ngx_devel_kit --add-module=/root/lua-nginx-module --with-ld-opt=-Wl,-rpath,/etc/LuaJIT/lib
nginx -V
出来能看到--add-module=/root/ngx_devel_kit --add-module=/root/lua-nginx-module
说明lua模块编译安装成功了.
版权属于:龙之介大人
本文链接:https://i7dom.cn/142/2019/29/make-nginx-lua.html
本站所有原创文章采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。 您可以自由的转载和修改,但请务必注明文章来源和作者署名并说明文章非原创且不可用于商业目的。