Nginx介绍及安装配置

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nginx介绍及安装配置相关的知识,希望对你有一定的参考价值。

nginx介绍

          如果听说过Apache软件那么对于Nginx也会很快就熟悉的和Apache一样nginx是开源的支持高性能高并发的WWW服务、代理服务软件以及电子邮件代理服务器并在一个BSD-like协议下发行由俄罗斯Igor Sysoev所开发开始供俄国大型的入口网址及搜索引擎Rambler使用。

nginx占有内存小并发能力强特别是静态资源且功能丰富而流行起来。

           从软件的功能应用方面Nginx不但是一个优秀的Web服务软件还可以具有反向代理负载均衡能和缓存服务功能。代理方面类似专业的LVS负载以及Happroxy软件缓存服务功能方面又类似squid专业缓存软件。

           Nginx可以运行在UnixLinuxBSD等操作系统中最近LNMP比较流行

Nginx特点

  1. 可针对静态资源高速高并发及缓存

  2. 可使用反向代理加速并且可进行数据缓存

  3. 具有简单负载均衡、节点健康检查和容错的功能

  4. 支持远程FastCGI服务的缓存加速

  5. 支持FastCGI Uwsgi SCGIand Memcached Servers的加速和缓存

  6. 支持ssl tlssni

  7. 具有模块的架构过滤器包括gzip压缩、ranges支持、chunked响应、XSLTSSI及图像缩放等功能。在SSI过滤器中一个包含多个SSI的页面如果经由FastCGI或反向代理出来可被并行处理

它所具备的其他WWW服务特性如下

  1. 支持基于名字、端口以及IP的多虚拟主机的站点

  2. 支持Keep-alivepipelined的连接

  3. 可进行简单、方便、灵活的配置和管理

  4. 支持Nginx配置并且在代码上线时可平滑重启不中断业务访问

  5. 可自定义访问日志格式临时缓冲写日志操作快速日志轮询及通过rsyslog除了日志

  6. 可利用信号控制Nginx进程

  7. 支持3xx-5xx http状态码重定向

  8. 支持rewrite模块支持URI重写及正则表达式匹配

  9. 支持基于客户端IP地址和HTTP基本认知的访问控制

Nginx作为Web主要的应用场景

使用Nginx运行html\JS\CSS,小图片等静态数据类似lighttpd软件

Nginx结合FastCGI运行php等动态程序

Nginx结合tomcat/resin等支持Java动态程序

NginxApacheLighttpd软件的优缺点

        Apache软件的特点

  • 2.2版本非常稳定强大官方说其2.4版本性能更强

  • Prefork模式取消进程创建开销性能很高

  • 处理动态业务数据时因管理到后端的引擎和数据库瓶颈不在于Apache本身上

  • 高并发时消耗系统资源相对多一些

  • 基于传统的select模型高并发能力有限

  • 支持扩展库可通过DSOapxs方法编译安装额外的插件功能不需要重新编译Apache

  • 功能多更稳当更安全插件也多

Nginx软件的特点

  •   基于异步网络I/O模型epollkqueue)

  • 具备支持高性能高并发的特性并发连接可大数万

  • 对小文件小于1MB的静态文件高并发支持很好性能很高

  • 不支持类似ApacheDSO模式扩展库必须编译进主程序缺点

  • 进程占用系统资源比较低

  • 支持Web、反向proxycache三大重点功能并且都很优秀

  • 市场份额在昨年快速增加  

Lighttpd软件特点

  •   基于异步网络I/O模型性能并发都和Nginx相近

  • 扩展库是SO模式比Nginx灵活

  • 目前国内使用率比较低安全性没有ApacheNginx

  • 通过插件mod_secdownload可实现文件URL地址加密有点

  • 社区不活跃市场份额较低

技术分享

下面对各类web服务器在动态数据性能上的对比从下图中科院看出在出来动态数据时三者的差距不大Apache更有优势一点。这是英文处理动态数据的能力取决于PHPJava和后端的数据库提供的服务能力也就是说瓶颈不在web服务器上。一般情况下普通PHP引擎支持的并发连接参考值为300-1000Java引擎的并发连接参考值为300-1500而数据库的并发连接参考值为300-1500.业务场景及网站架构不通并发连接数也会有上下浮动。这些数字可供初学参考

技术分享


为什么Nginx总体性能比Apache

 

        Nginx使用最新的epollkqueue异步网络I/O模型而Apache则使用select模型目前Linux能承受的高并发访问的squidmemcached都是采用的epoll模型

        下面使用比喻来说明此问题

第一个比喻

假设你在大学读书住的宿舍楼有很多间房间你的朋友要来找你select版宿管大妈就会带着你的朋友挨个房间去找直到找到你的朋友为止。而epoll版宿管大妈会先记下每位入住同学的房间号你的朋友来找你是只要告诉你朋友你在那个房间即可不用亲自带着你的朋友满宿舍找人了。如果同时来了100个人。都要找自己住这个宿舍楼的同学时select版和epoll版宿管大妈谁的效率高。显而易见

第二个比喻

select的调用复杂度是线性的即0n。举个例子一个保姆照看一群孩子如果有孩子是否需要袅袅比作网络I/O事件select的作用就好比这个保姆挨个询问每个孩子你要尿尿吗如果孩子回答是保姆则把孩子领出来放到一个地方。当所有孩子询问完自后则保姆领着这些要尿尿的孩子去上厕所处理网络I/O事件

还是以保姆照看孩子为例在epoll机制下保姆不再需要挨个询问每个孩子是否要尿尿。取而代之的是每个孩子如果自己需要尿尿的时候自己主动的站到事先约好的地方而保姆职责就是查看事先约定好的地方是否有孩子如果有小孩则带着孩子去上测试网络事件处理因此epoll的这种机制能够高效的处理成千上万的并发连接而且性能不会随着连接数目的增加而下降太多

技术分享

业务场景如何选用Web软件

静态业务若是高并发场景尽量采用NginxLighttpd首选Nginx

动态业务理论上采用NginxApache均可建议选择Nginx要避免相同业务服务软件多样化额外增加维护成本。动态业务可以用Nginx兼做前端代理再更加页面元素的类型或目录向后转发到后端相应的服务器进行处理

如果既有静态业务又有动态业务就采用Nginx

Nginx的安装

系统环境

[[email protected] ~]# cat /etc/redhat-release

Centos 6.7

[[email protected] ~]# uname -rm

2.6.32-573.el6.x86_64 x86_64

Nginx所需要的库环境

[[email protected] ~]# yum install pcre-devel openssl-devle -y

[[email protected] ~]# rpm -aq pcre-deve pcre openssl-devel openssl

pcre-7.8-7.el6.x86_64

openssl-1.0.1e-42.el6.x86_64

Nginx软件包下载安装

获取nginxnginx.org官网上可以获得nginx的各种版本

mkdir /home/oldboy/tools

cd /home/oldboy/tools/

wget http://nginx.org/download/nginx-1.6.3.tar.gz

tar xf nginx-1.6.3.tar.gz

tar xf nginx-1.6.3.tar.gz

useradd -M -s /sbin/nologin nginx

./configure --prefix=/application/nginx-1.6.3 --user=nginx --group=nginx --with-http_ssl_module --with-http_stub_status_module

make

make install

ln -s /application/nginx-1.6.3/ /application/nginx

[[email protected] nginx-1.6.3]# ss -lntup|grep nginx

[[email protected] nginx-1.6.3]# /application/nginx/sbin/nginx

[[email protected] nginx-1.6.3]# ss -lntup|grep nginx

tcp    LISTEN     0      128                    *:80                    *:*      users:(("nginx",4804,6),("nginx",4805,6))

使用浏览器输入服务器ip地址验证是否安装启动成功

    技术分享

也可以在服务器本机上使用curl命令进行测试如下

[[email protected] nginx-1.6.3]# curl -I 10.0.0.8

HTTP/1.1 200 OK

Nginx的配置

conf目录下面有配置文件过滤掉default的如下

[[email protected] conf]# pwd

/application/nginx/conf

[[email protected] conf]# tree|grep -v default

.

├── fastcgi.conf

├── fastcgi_params

├── koi-utf

├── koi-win

├── mime.types

├── nginx.conf

├── scgi_params

├── uwsgi_params

└── win-utf

这里除了nginx.conf其他的配置文件保持默认即可

Nginx.conf文件介绍

http {

    include       mime.types;

    default_type  application/octet-stream;

    sendfile        on;

    keepalive_timeout  65;

    server {  #server{}定义了虚拟主机

        listen       80;#监听端口

        server_name  localhost;#监听的域名

        location / {             #location{}是用来为匹配的URI进行配置URI即语法中的"/uri/" location / 匹配任何查询因为任何查询都是以/开头

            root   html;   #知道对应的uri的资源查找路径这html为相对路径完整路径为/application/nginx/html/

            index  index.html index.htm; #指定index文件的名称可以配置多个以空格分开如果有多个按照顺序查找

        }

        error_page   500 502 503 504  /50x.html;

        location = /50x.html {

            root   html;

        }

    }

}

 

Nginx基于域名服务配置

[[email protected] conf]# cat nginx.conf

worker_processes  1;

events {

    worker_connections  1024;

}

http {

    include       mime.types;

    default_type  application/octet-stream;

    sendfile        on;

    keepalive_timeout  65;

    server {

        listen       80;

        server_name  www.etiantian.org;

        location / {

            root   html/www;

            index  index.html index.htm;

        }

    }

    server {

        listen       80;

        server_name  bbs.etiantian.org;

        location / {

            root   html/bbs;

            index  index.html index.htm;

        }

    }

    server {

        listen       80;

        server_name  blog.etiantian.org;

        location / {

            root   html/blog;

            index  index.html index.htm;

        }

    }

}

创建域名目录和主页文件index.html

[[email protected] conf]# mkdir ../html/{bbs,www,blog}

[[email protected] conf]# ls ../html/

50x.html  bbs  blog  index.html  www

[[email protected] conf]# for i in bbs www blog;do echo $i >../html/$i/index.html;done

[[email protected] conf]# tree ../html/

../html/

├── 50x.html

├── bbs

   └── index.html

├── blog

   └── index.html

├── index.html

└── www

   └── index.html

 

3 directories, 5 files

[[email protected] conf]# cat ../html/blog/index.html

Blog

重启nginx服务

[[email protected] conf]# ../sbin/nginx -t

nginx: the configuration file /application/nginx-1.6.3/conf/nginx.conf syntax is ok

nginx: configuration file /application/nginx-1.6.3/conf/nginx.conf test is successful

[[email protected] conf]# ../sbin/nginx -s reload

本机测试nginx服务器域名访问

[[email protected] conf]# curl www.etiantian.org

www

[[email protected] conf]# curl bbs.etiantian.org

bbs

[[email protected] conf]# curl blog.etiantian.org

blog

[[email protected] conf]# cat /etc/hosts

10.0.0.8  www.etiantian.orgbbs.etiantian.org blog.etiantian.org

也可以在widows上给hosts做解析使用浏览器访问域名来测试。这里不列出

安装错误&解决方法

    

  技术分享

  技术分享

  技术分享

模块介绍

  技术分享

Nginx基于端口的虚拟主机

基于端口的虚拟主机在生产环境中不多见偶尔会用到一般是为了公司内网提供访问的如以上是关于Nginx介绍及安装配置的主要内容,如果未能解决你的问题,请参考以下文章

Nginx基础及安装配置

NginxNginx介绍及配置详解

Nginx源码安装及调优配置(转)

Nginx安装及配置

Nginx安装及配置详解

Linux学习之路-Nginx安装及配置文件篇23---20180210