Nginx (engine x) 是一个高性能的 和 服务器,也是一个IMAP/POP3/SMTP 。Nginx是由伊戈尔·赛索耶夫为 访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。
其将 以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而 。2011年6月1日,nginx 1.0.4发布。
Nginx是一款 的 服务器/ 服务器及 (IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。其特点是占有内存少, 能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、 、 、 、 、 等。
特点:
web服务器:高性能的web服务器软件,与Apache相比,它支持更多的并发连接且占用资源少,效率高。
反向代理或负载均衡服务器:作为负载均衡服务器,它可以作为HTTP SERVER或DB等服务的代理服务器,类似Haproxy代理软件的功能,Nginx的代理功能相对简单,效率也不及Haproxy,同时它也是一个优秀的邮件代理服务软件。
缓存服务器:Nginx还可以作为缓存服务器,类似于专业的缓存软件功能。
优点:
(1)高并发:能支持1-2万甚至更多的并发连接(静态小文件)
(2)内存消耗少
(3)可以做HTTP反向代理----负载均衡的功能
(4)内置对集群节点服务器的健康性查功能,不过功能较弱
(5)通过cache插件可以实现缓存软件能够实现的功能
系统环境查看:
[root@cairui ~]# cat /etc/redhat-release CentOS release 6.8 (Final)[root@cairui ~]# uname -r2.6.32-696.6.3.el6.x86_64
安装Nginx所需的pcre库:(去Nginx官网查看,能够使用的版本)
[root@cairui pcre2-10.21]# yum install gcc* openssl* -y[root@cairui pcre2-10.21]# ./configure [root@cairui pcre2-10.21]# make & make install
安装与配置Nginx:
[root@cairui pcre2-10.21]# useradd nginx -s /sbin/nologin -M[root@cairui software]# wget http://nginx.org/download/nginx-1.13.9.tar.gz[root@cairui software]# tar zxf nginx-1.13.9.tar.gz [root@cairui nginx-1.13.9]# lsauto CHANGES CHANGES.ru conf configure contrib html LICENSE man README src
[root@cairui nginx-1.13.9]# ./configure --help --help print this message --prefix=PATH set installation prefix --sbin-path=PATH set nginx binary pathname --modules-path=PATH set modules path --conf-path=PATH set nginx.conf pathname --error-log-path=PATH set error log pathname --pid-path=PATH set nginx.pid pathname --lock-path=PATH set nginx.lock pathname --user=USER set non-privileged user for worker processes --group=GROUP set non-privileged group for worker processes --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 #激活ssl功能模块 --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_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_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 --http-log-path=PATH set http access log pathname --http-client-body-temp-path=PATH set path to store http client request body temporary files --http-proxy-temp-path=PATH set path to store http proxy temporary files --http-fastcgi-temp-path=PATH set path to store http fastcgi temporary files --http-uwsgi-temp-path=PATH set path to store http uwsgi temporary files --http-scgi-temp-path=PATH set path to store http scgi temporary files --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_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 --without-pcre disable PCRE library usage --with-pcre force PCRE library usage --with-pcre=DIR set path to PCRE library sources --with-pcre-opt=OPTIONS set additional build options for PCRE --with-pcre-jit build PCRE with JIT compilation support --with-zlib=DIR set path to zlib library sources --with-zlib-opt=OPTIONS set additional build options for zlib --with-zlib-asm=CPU use zlib assembler sources optimized for the specified CPU, valid values: pentium, pentiumpro --with-libatomic force libatomic_ops library usage --with-libatomic=DIR set path to libatomic_ops library sources --with-openssl=DIR set path to OpenSSL library sources --with-openssl-opt=OPTIONS set additional build options for OpenSSL --with-debug enable debug logging
[root@cairui nginx-1.13.9]# ./configure --prefix=/opt/nginx1.13.9 --user=nginx --group=ngnix --with-http_stub_status_module --with-http_ssl_module
从源代码构建nginx该构建使用该configure命令进行配置。它定义了系统的各个方面,包括允许nginx用于连接处理的方法。最后它创建一个Makefile。该configure命令支持以下参数:--prefix=path - 定义一个将保留服务器文件的目录。这个相同的目录也将被用于由configure(由库源创建的路径除外)和nginx.conf配置文件中设置的所有相对路径 。它/usr/local/nginx默认设置为目录。--sbin-path=path - 设置nginx可执行文件的名称。该名称仅在安装期间使用。默认情况下该文件被命名 prefix/sbin/nginx。--conf-path=path - 设置nginx.conf配置文件的名称。如果需要,通过在命令行参数中指定nginx,nginx始终可以使用不同的配置文件启动 。默认情况下该文件被命名 。 -c fileprefix/conf/nginx.conf--pid-path=path - 设置将存储主进程的进程ID的nginx.pid文件的名称。安装后,可以nginx.conf使用pid指令随时在配置文件中 更改文件名 。默认情况下该文件被命名 prefix/logs/nginx.pid。--error-log-path=path - 设置主要错误的名称,警告和诊断文件。安装完成后,可以nginx.conf使用error_log指令在配置文件中 始终更改文件名 。默认情况下该文件被命名 prefix/logs/error.log。--http-log-path=path - 设置HTTP服务器的主要请求日志文件的名称。安装完成后,可以nginx.conf使用access_log指令随时在配置文件中 更改文件名 。默认情况下该文件被命名 prefix/logs/access.log。--build=name - 设置一个可选的nginx构建名称。--user=name - 设置其凭据将由工作进程使用的非特权用户的名称。安装后,可以nginx.conf使用user指令始终在配置文件中 更改名称 。默认的用户名是nobody。--group=name - 设置将由工作进程使用凭据的组的名称。安装后,可以nginx.conf使用user指令始终在配置文件中 更改名称 。默认情况下,组名称设置为非特权用户的名称。--with-select_module--without-select_module - 启用或禁用构建允许服务器使用该select()方法的模块 。如果平台看起来不支持更合适的方法,例如kqueue,epoll或/ dev / poll,则会自动构建此模块。--with-poll_module--without-poll_module - 启用或禁用构建允许服务器使用该poll()方法的模块 。如果平台看起来不支持更合适的方法,例如kqueue,epoll或/ dev / poll,则会自动构建此模块。--without-http_gzip_module - 禁用构建压缩 HTTP服务器响应的模块。需要zlib库来构建和运行此模块。--without-http_rewrite_module - 禁止构建允许HTTP服务器 重定向请求并更改请求URI的模块。PCRE库需要构建和运行该模块。--without-http_proxy_module - 禁用构建HTTP服务器代理模块。--with-http_ssl_module - 可以构建一个模块,将HTTPS协议支持添加到HTTP服务器。该模块不是默认生成的。OpenSSL库是构建和运行该模块所必需的。--with-pcre=path - 设置PCRE库源的路径。图书馆发行版(版本4.4 - 8.41)需要从PCRE网站下载 并提取。其余的由nginx的./configure和 make。该库是位置指令和 ngx_http_rewrite_module 模块支持正则表达式所必需的 。--with-pcre-jit - 用“即时编译”支持(1.1.12,pcre_jit指令)构建PCRE库 。--with-zlib=path - 设置zlib库源的路径。库分发(版本1.1.3 - 1.2.11)需要从zlib站点下载 并解压缩。其余的由nginx的./configure和 make。该库是ngx_http_gzip_module模块所必需的 。--with-cc-opt=parameters - 设置将被添加到CFLAGS变量的附加参数。在FreeBSD下使用系统PCRE库时, --with-cc-opt="-I /usr/local/include" 应该指定。如果select()需要增加支持的文件数量,也可以在这里指定如下: --with-cc-opt="-D FD_SETSIZE=2048"。--with-ld-opt=parameters - 设置将在链接期间使用的其他参数。在FreeBSD下使用系统PCRE库时, --with-ld-opt="-L /usr/local/lib" 应该指定。参数使用示例(所有这些都需要输入一行):。/配置 --sbin路径= / USR /本地/ nginx的/ nginx的 --conf路径= / USR /本地/ nginx的/ nginx.conf --pid路径= / USR /本地/ nginx的/ nginx.pid --with-http_ssl_module --with-PCRE = .. / PCRE-8.41 --with-ZLIB = .. / ZLIB-1.2.11配置完成后,nginx被编译并使用安装make。
[root@cairui nginx-1.13.9]# ln -s /opt/nginx1.13.9 /opt/nginx[root@cairui nginx-1.13.9]# cd /opt/[root@cairui opt]# lsnginx nginx1.13.9[root@cairui opt]# lltotal 4lrwxrwxrwx 1 root root 16 Mar 4 17:10 nginx -> /opt/nginx1.13.9drwxr-xr-x 6 root root 4096 Mar 4 17:08 nginx1.13.9[root@cairui opt]# cp /opt/nginx/sbin/nginx /etc/init.d/[root@cairui opt]# echo /etc/init.d/nginx >>/etc/rc.local [root@cairui opt]# tail -1 /etc/rc.local /etc/init.d/nginx
[root@cairui opt]# /opt/nginx/sbin/nginx -t/opt/nginx/sbin/nginx: error while loading shared libraries: libpcre.so.1: cannot open shared object file: No such file or directory出现错误提示提示说明无法打开 libpcre.so.1 这个文件,没有这个文件或目录,出现这个提示的原因是因为在系统的/etc/ld.so.conf 这个文件里没有 libpcre.so.1 的路径配置解决方法如下:[root@localhost nginx-1.10.1]# find / -name libpcre.so.1/download/tools/pcre-8.38/.libs/libpcre.so.1/usr/local/lib/libpcre.so.1[root@localhost nginx-1.10.1]# vi /etc/ld.so.confinclude ld.so.conf.d/*.conf/usr/local/lib #添加此路径即可[root@localhost nginx-1.10.1]# ldconfig #生效配置
[root@cairui opt]# /opt/nginx/sbin/nginx -tnginx: the configuration file /opt/nginx1.13.9/conf/nginx.conf syntax is oknginx: [emerg] getgrnam("ngnix") failednginx: configuration file /opt/nginx1.13.9/conf/nginx.conf test failed说明配置文件的用户有问题[root@cairui opt]# vim /opt/nginx/conf/nginx.conf将开头的user改为nginx[root@cairui opt]# /opt/nginx/sbin/nginx -tnginx: the configuration file /opt/nginx1.13.9/conf/nginx.conf syntax is oknginx: configuration file /opt/nginx1.13.9/conf/nginx.conf test is successful
启动服务:
[root@cairui opt]# /opt/nginx/sbin/nginx[root@cairui opt]# lsof -i:80COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAMEAliYunDun 1462 root 18u IPv4 8797 0t0 TCP 120.25.255.87:46758->140.205.140.205:http (CLOSE_WAIT)AliYunDun 1709 root 18u IPv4 8797 0t0 TCP 120.25.255.87:46758->140.205.140.205:http (CLOSE_WAIT)AliYunDun 1709 root 20u IPv4 10599 0t0 TCP 120.25.255.87:46778->140.205.140.205:http (ESTABLISHED)nginx 14980 root 6u IPv4 49684 0t0 TCP *:http (LISTEN)nginx 14981 nginx 6u IPv4 49684 0t0 TCP *:http (LISTEN)[root@cairui opt]# ps -ef | grep nginxroot 14980 1 0 17:23 ? 00:00:00 nginx: master process /opt/nginx/sbin/nginxnginx 14981 14980 0 17:23 ? 00:00:00 nginx: worker processroot 14987 7590 0 17:24 pts/0 00:00:00 grep nginx[root@cairui opt]# netstat -lntup| grep nginxtcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 14980/nginx
组建一个简单的web站点:
[root@cairui opt]# grep html /opt/nginx/conf/nginx.conf root html; #默认站点目录 index index.html index.htm; 默认的站点首页文件 #error_page 404 /404.html; # redirect server error pages to the static page /50x.html error_page 500 502 503 504 /50x.html; location = /50x.html { root html; # root html; # root html; # index index.html index.htm; # root html; # index index.html index.htm;
[root@cairui html]# cat test.htmlThis is cairui nginx cairui nginx
If you see this page, the nginx web server is successfully installed andworking. Further configuration is required.
For online documentation and support please refer tonginx.org.
Commercial support is available atnginx.com.Thank you for using nginx.
[root@cairui nginx]# lltotal 36drwx------ 2 nginx root 4096 Mar 4 17:21 client_body_tempdrwxr-xr-x 2 root root 4096 Mar 4 17:27 confdrwx------ 2 nginx root 4096 Mar 4 17:21 fastcgi_tempdrwxr-xr-x 2 root root 4096 Mar 4 17:32 htmldrwxr-xr-x 2 root root 4096 Mar 4 17:21 logsdrwx------ 2 nginx root 4096 Mar 4 17:21 proxy_tempdrwxr-xr-x 2 root root 4096 Mar 4 17:08 sbindrwx------ 2 nginx root 4096 Mar 4 17:21 scgi_tempdrwx------ 2 nginx root 4096 Mar 4 17:21 uwsgi_temp[root@cairui nginx]# tree.├── client_body_temp├── conf│?? ├── fastcgi.conf│?? ├── fastcgi.conf.default│?? ├── fastcgi_params│?? ├── fastcgi_params.default│?? ├── koi-utf│?? ├── koi-win│?? ├── mime.types│?? ├── mime.types.default│?? ├── nginx.conf│?? ├── nginx.conf.default│?? ├── scgi_params│?? ├── scgi_params.default│?? ├── uwsgi_params│?? ├── uwsgi_params.default│?? └── win-utf├── fastcgi_temp├── html│?? ├── 50x.html│?? ├── index.html│?? └── test.html├── logs│?? ├── access.log│?? ├── error.log│?? └── nginx.pid├── proxy_temp├── sbin│?? └── nginx├── scgi_temp└── uwsgi_temp9 directories, 22 files
[root@cairui nginx]# egrep -v "#|^$" conf/nginx.confuser nginx; 用户,nginxworker_processes 1; 工作进程events { 事件 worker_connections 1024; 并发数,单位时间的最大连接数}http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; server { 相当于apache的虚拟主机标签 listen 80; server_name localhost; 主机名 location / { root html; 默认站点目录 index index.html index.htm; 默认首页文件 } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } }}
控制NGINX要重新加载配置,您可以停止或重新启动NGINX,或将信号发送到主进程。通过运行该nginx命令(调用NGINX可执行文件)和-s参数可以发送一个信号。nginx -s哪里 可以是以下之一:quit - 优雅地关闭reload - 重新加载配置文件reopen - 重新打开日志文件stop - 立即关闭(快速关机)该kill实用程序还可用于直接向主进程发送信号。主进程的进程ID默认写入nginx.pid文件,该文件位于/ usr / local / nginx / logs或/ var / run目录中。
Nginx服务的配置查看
[root@cairui nginx]# sbin/nginx -hnginx version: nginx/1.13.9Usage: nginx [-?hvVtTq] [-s signal] [-c filename] [-p prefix] [-g directives]Options: -?,-h : this help -v : show version and exit -V : show version and configure options then exit -t : test configuration and exit -T : test configuration, dump it and exit -q : suppress non-error messages during configuration testing -s signal : send signal to a master process: stop, quit, reopen, reload -p prefix : set prefix path (default: /opt/nginx1.13.9/) -c filename : set configuration file (default: conf/nginx.conf) -g directives : set global directives out of configuration file
[root@cairui nginx]# sbin/nginx -vnginx version: nginx/1.13.9[root@cairui nginx]# sbin/nginx -Vnginx version: nginx/1.13.9built by gcc 4.4.7 20120313 (Red Hat 4.4.7-18) (GCC) built with OpenSSL 1.0.1e-fips 11 Feb 2013TLS SNI support enabledconfigure arguments: --prefix=/opt/nginx1.13.9 --user=nginx --group=ngnix --with-http_stub_status_module --with-http_ssl_module