Nginx:engine X ,2002年,开源,商业版 Nginx是免费的、开源的、高性能的HTTP和反向代理服务器、邮件代理服务器、以及TCP/UDP代理服务器 解决C10K问题(10K Connections),http://www.ideawu.net/blog/archives/740.html Nginx官网:http://nginx.org nginx的其它的二次发行版: Tengine:由淘宝网发起的Web服务器项目。它在Nginx的基础上,针对大访问量网站的需求,添加了不少高级功能和特性。Tengine的性能和稳定性已经在大型的网站如淘宝网,天猫商城等获得了很好的检验。它的最终目标是打造一个高效、稳定、安全、易用的Web平台。从2011年12月开始,Tengine成为一个开源项目,官网 http://tengine.taobao.org/ OpenResty:基于Nginx 与 Lua 语言的高性能 Web 平台, 章亦春团队开发,官网:http://openresty.org/cn/php
Nginx是多进程组织模型,并且是一个由Master主进程和Worker工做进程组成。html
是 Nginx 服务器正常运行 必不可少 的模块,提供 错误日志记录 、 配置文件解析 、 事件驱动机制 、进程管理 等核心功能java
标准HTTP模块:提供 HTTP 协议解析相关的功能,好比: 端口配置 、 网页编码设置 、HTTP响应头设置 等等 python
主要用于扩展标准的 HTTP 功能,让 Nginx 能处理一些特殊的服务,好比: Flash 多媒体传输 、解析 GeoIP 请求、 网络传输压缩 、 安全协议 SSL 支持等 nginx
主要用于支持Nginx 的邮件服务 ,包括对 POP3 协议、 IMAP 协议和 SMTP协议的支持 c++
是为了扩展 Nginx 服务器应用,完成开发者自定义功能,好比: Json 支持、 Lua 支持等web
Nginx的安装版本分为开发版、稳定版和过时版, Nginx安装可使用yum或源码安装,可是推荐使用源码,一是yum的版本比较旧,二是编译安装能够更方便自定义相关路径,三是使用源码编译能够自定义相关功能,更方便业务的上的使用,源码安装须要提早准备标准的编译器,GCC的全称是(GNU Compiler collection),其有GNU开发,并以GPL即LGPL许可,是自由的类UNIX即苹果电脑Mac OS X操做系统的标准编译器,由于GCC本来只能处理C语言,因此原名为GNU C语言编译器,后来获得快速发展,能够处理C++,Fortran,pascal,objective-C,java以及Ada等其余语言,此外还须要Automake工具,以完成自动建立Makefile的工做,Nginx的一些模块须要依赖第三方库,好比pcre(支持rewrite),zlib(支持gzip模块)和openssl(支持ssl模块)等。正则表达式
安装前须要提早配置好epel源vim
[root@CentOS7 ~]#yum install -y nginx
准备编译安装的基础环境后端
[root@CentOS7 ~]#yum install -y vim lrzsz tree screen psmisc lsof tcpdump wget ntpdate gcc gcc-c++ glibc glibc-devel pcre pcre-devel openssl openssl-devel systemd-devel net-tools iotop bc zip unzip zlib-devel bash-completion nfs-utils automake libxml2 libxml2-devel libxslt libxslt-devel perl perl-ExtUtils-Embed gcc为GNU Compiler Collection的缩写,能够编译C和C++源代码等,它是GNU开发的C和C++以及其余不少种语言的编译器(最先的时候只能编译C,后来很快进化成一个编译多种语言的集合,如Fortran、Pascal、Objective-C、Java、Ada、 Go等。) gcc 在编译C++源代码的阶段,只能编译 C++ 源文件,而不能自动和 C++ 程序使用的库连接(编译过程分为编译、连接两个阶段,注意不要和可执行文件这个概念搞混,相对可执行文件来讲有三个重要的概念:编译(compile)、连接(link)、加载(load)。源程序文件被编译成目标文件,多个目标文件连同库被连接成一个最终的可执行文件,可执行文件被加载到内存中运行)。所以,一般使用 g++ 命令来完成 C++ 程序的编译和链接,该程序会自动调用 gcc 实现编译。 gcc-c++也能编译C源代码,只不过把会把它当成C++源代码,后缀为.c的,gcc把它看成是C程序,而g++看成是c++程序;后缀为.cpp的,二者都会认为是c++程序,注意,虽然c++是c的超集,可是二者对语法的要求是有区别的。 automake是一个从Makefile.am文件自动生成Makefile.in的工具。为了生成Makefile.in,automake还需用到perl,因为automake建立的发布彻底遵循GNU标准,因此在建立中不须要perl。libtool是一款方便生成各类程序库的工具。 pcre pcre-devel:在Nginx编译须要 PCRE(Perl Compatible Regular Expression),由于Nginx的Rewrite模块和HTTP 核心模块会使用到PCRE正则表达式语法。 zlip zlib-devel:nginx启用压缩功能的时候,须要此模块的支持。 openssl openssl-devel:开启SSL的时候须要此模块的支持。
下载源码包,解压
[root@CentOS7 ~]# cd /usr/local/src/ [root@CentOS7 src]# wget https://nginx.org/download/nginx-1.14.2.tar.gz [root@CentOS7 src]# tar xf nginx-1.14.2.tar.gz [root@CentOS7 src]# cd nginx-1.14.2/
编译安装
[root@CentOS7 nginx-1.14.2]#./configure --prefix=/apps/nginx \ --user=nginx \ --group=nginx \ --with-http_ssl_module \ --with-http_v2_module \ --with-http_realip_module \ --with-http_stub_status_module \ --with-http_gzip_static_module \ --with-pcre \ --with-stream \ --with-stream_ssl_module \ --with-stream_realip_module [root@CentOS7 nginx-1.14.2]# make # 编译步骤,根据Makefile文件生成相应的模块 [root@CentOS7 nginx-1.14.2]# make install # 建立目录,并将生成的模块和文件复制到相应的目录 Nginx安装完成以后会生成四个主要目录: 一、conf:保存nginx全部的配置文件,其中nginx.conf是nginx服务器的最核心最主要的配置文件,其余的.conf则是用来配置nginx相关的功能的,例如fastcgi功能使用的是fastcgi.conf和fastcgi_params两个文件,配置文件通常都有个样板配置文件,是文件名.default结尾,使用的使用将其复制为并将default去掉便可。 二、html目录中保存了nginx服务器的web文件,可是能够更改成其余目录保存web文件,另外还有一个50x的web文件是默认的错误页面提示页面。 三、logs:用来保存nginx服务器的访问日志错误日志等日志,logs目录能够放在其余路径,好比/var/logs/nginx里面。 四、sbin:保存nginx二进制启动脚本,能够接受不一样的参数以实现不一样的功能。
建立nginx用户
[root@CentOS7 nginx-1.14.2]# useradd nginx -s /sbin/nologin -u 2000
对安装目录受权
[root@CentOS7 nginx-1.14.2]# chown nginx.nginx -R /apps/nginx/
验证版本即编译参数
[root@CentOS7 ~]#/apps/nginx/sbin/nginx -V nginx version: nginx/1.14.2 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=/apps/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_stub_status_module --with-http_gzip_static_module --with-pcre --with-stream --with-stream_ssl_module --with-stream_realip_module
启动nginx
[root@CentOS ~]#/apps/nginx/sbin/nginx [root@CentOS ~]#ss -ntl | grep 80 LISTEN 0 128 *:80 *:*
Nginx测试页访问
[root@CentOS-Test ~]#cat /apps/nginx/conf/nginx.conf user nginx nginx; #启动Nginx工做进程的用户和组 worker_processes 1; #启动Nginx工做进程的数量 #错误日志记录配置 #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; pid logs/nginx.pid; #pid文件保存路径 events { #events设置快,主要影响nginx服务器与用户的网络链接,好比是否容许同时接受多个网络链接,使用哪一种事件驱动模型处理请求,每一个工做进程能够同时支持的最大链接数,是否开启对多工做进程下的网络链接进行序列化等。 worker_connections 1024; #设置单个nginx工做进程能够接受的最大并发,做为web服务器的时候最大并发数为worker_connections * worker_processes,做为反向代理的时候为(worker_connections * worker_processes)/2 } http { #http块是Nginx服务器配置中的重要部分,缓存、代理和日志格式定义等绝大多数功能和第三方模块均可以在这设置,http块能够包含多个server块,而一个server块中又能够包含多个location块,server块能够配置文件引入、MIME-Type定义、日志自定义、是否启用sendfile、链接超时时间和单个连接的请求上限等。 include mime.types; default_type application/octet-stream; # 经过变量设置日志文件内容格式 #log_format main '$remote_addr - $remote_user [$time_local] "$request" ' # '$status $body_bytes_sent "$http_referer" ' # '"$http_user_agent" "$http_x_forwarded_for"'; #access_log logs/access.log main; # 引用日志文件格式 sendfile on; # 做为web服务器的时候打开sendfile加快静态文件传输,指定是否使用sendfile系统调用来传输文件,sendfile系统调用在两个文件描述符之间直接传递数据(彻底在内核中操做),从而避免了数据在内核缓冲区和用户缓冲区之间的拷贝,操做效率很高,被称之为零拷贝,硬盘 >> kernel buffer (快速拷贝到kernelsocket buffer) >>协议栈。 #tcp_nopush on; # 在开启了sendfile的状况下,合并请求后统一发送给客户端。 #keepalive_timeout 0; keepalive_timeout 65; # 长链接超时时间(会话保持时长),单位是秒 #gzip on; # 开启文件压缩 server { # 设置一个虚拟机主机,能够包含本身的全局快,同时也能够包含多个location模块。好比本虚拟机监听的端口、本虚拟机的名称和IP配置,多个server 可使用一个端口,好比都使用80端口提供web服务 listen 80; # 配置server监听的端口 server_name localhost; # 本server的名称,当访问此名称的时候nginx会调用当前serevr内部的配置进程匹配。 #charset koi8-r; # nginx编码格式,默认为俄语,建议设置成utf-8格式 #access_log logs/host.access.log main; location / { # location实际上是server的一个指令,为nginx服务器提供比较多并且灵活的指令,都是在location中提现的,主要是基于nginx接受到的请求字符串,对用户请求的UIL进行匹配,并对特定的指令进行处理,包括地址重定向、数据缓存和应答控制等功能都是在这部分实现,另外不少第三方模块的配置也是在location模块中配置。 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 { # location处理对应的不一样错误码的页面定义到/50x.html,这个跟对应其server中定义的目录下 root html; # 定义默认页面所在的目录 } # PHP页面配置 # proxy the PHP scripts to Apache listening on 127.0.0.1:80 # #location ~ \.php$ { # 以http的方式转发php请求到指定web服务器 # proxy_pass http://127.0.0.1; #} # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # #location ~ \.php$ { # 以fastcgi的方式转发php请求到php处理 # root html; # fastcgi_pass 127.0.0.1:9000; # fastcgi_index index.php; # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; # include fastcgi_params; #} # deny access to .htaccess files, if Apache's document root # concurs with nginx's one # #location ~ /\.ht { # 拒绝web形式访问指定文件,如不少的网站都是经过.htaccess文件来改变本身的重定向等功能。 # deny all; # 拒绝全部 #} } # another virtual host using mix of IP-, name-, and port-based configuration # #server { # 自定义虚拟server # listen 8000; # listen somename:8080; # server_name somename alias another.alias; # location / { # root html; # index index.html index.htm; # 指定默认网页文件,此指令由ngx_http_index_module模块提供 # } #} # HTTPS server # #server { # https服务器配置 # listen 443 ssl; # server_name localhost; # ssl_certificate cert.pem; # ssl_certificate_key cert.key; # ssl_session_cache shared:SSL:1m; # ssl_session_timeout 5m; # ssl_ciphers HIGH:!aNULL:!MD5; # ssl_prefer_server_ciphers on; # location / { # root html; # index index.html index.htm; # } #} #导入其余路径的配置文件 #include /apps/nginx/conf.d/*.conf }