龙之介大人

linux下编译安装nginx完整版
0x01 Nginx有哪些优点更快这表现在两个方面:一方面,在正常情况下,单次请求会得到更快的响应; 另一方在高...
扫描右侧二维码阅读全文
29
2019/05

linux下编译安装nginx完整版

0x01 Nginx有哪些优点

  • 更快
这表现在两个方面:一方面,在正常情况下,单次请求会得到更快的响应; 另一方在高峰期(如有数以万计的并发请求),Nginx可以比其他Web服务器更快地响应请
  • 高扩展性
Nginx的设计极具扩展性,它完全是由多个不同功能、不同层次、不同类型且耦合度极
低的模块组成。因此,当对某一个模块修复Bug或进行升级时,可以专注于模块自身,无须
在意其他。
  • 高可靠性
Nginx的高可靠性来自于其核心框架代码
的优秀设计、模块设计的简单性;官方提供的常用模块都非常稳定,每个worker进程
相对独立,master进程在1个worker进程出错时可以快速“拉起”新的worker子进程提供服务。
  • 低内存消耗
一般情况下,10000个非活跃的HTTP Keep-Alive连接在Nginx中仅消耗2.5MB的内存,
  • 单机支持10万以上的并发连接
理论上,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=PATHNgi口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=USERworker进程运行的用户
--group=GROUPworker进程运行的用户组
--with-file-aio为FreeBSD 4.3+和linux 2.6.22+系统启用异步I/O
--with-debug这个选项用于调试日志,在生产环境的系统中不推荐使用该选项

临时路径配置选项

选项解释
--error-log-path=PATH错误日志的默认路径
--http-log-path=PATHhttp 访问日志的默认路径
--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模块编译安装成功了.
最后修改:2019 年 05 月 29 日 01 : 35 PM

发表评论