Nginx原理

常用的服务器:Nginx Apache resin tomcat weblogic Jboss

Tomcat是运行Java代码的Web容器

Apache和Nginx是处理静态数据的web服务器(静态数据是指不需要数据库的数据)

Nginx和Apache可以和Tomcat组合来处理java代码

Tomcat的运行功能非常少,只能做一些简单的java容器

Jboss和resin属于重型java容器

Nginx三大功能特性:

1.    作为web服务器

2.    作为反向代理服务器

3.    作为缓存服务器

根据配置不同,功能特性也不同

Nginx的代码并不多,但是是晚于Apache诞生的,Nginx的代码访问模型(访问模型是处理用户访问情景的)epoll模型---异步I/O非阻塞模型

Nginx对服务器资源占用非常少,是因为Nginx是通过线程来接待用户的,而一个进程里有很多的线程,最多可以为65536根线程本身对内存的占用很少,这就让Nginx足以支撑起超大用户量的并发访问。

进程是个资源池,线程是在进程池中调用资源的,线程本身是不占用内存的,进程开辟出的内存空间在它之下的线程中是共享的。

但是在极高并发状态下,线程之间并不稳定。容易产生资源上的冲突。

Apache用多进程模式来接待多个用户,相当稳定,但是无法承受高负载

Apache是select模型---同步阻塞I/O

Tengine是淘宝二次开发的产物

静态数据:不人工参与就无法改变的数据,静态数据不用到数据库(例如图片,视频,或者以XXX.html结尾的静态网页)

动态数据:需要从MySQL中取数据的

Apache和Nginx处理静态数据时,数据在1k时,Nginx远高于Apache,数据在10k时,Nginx的处理能力达到峰值。数据在1M时,二者处理能力相同,但是很低,数据达到10M时,二者都无法处理。

在处理动态数据时,Apache和Nginx都要把数据传给php处理

指标

Select

Epoll

性能

随着连接数的增加性能急剧下降,处理成千上万并发连接数时,性能很差

随着连接数的增加性能下降,处理成千上万并发连接数时,性能很好

连接数

连接数有限制,最大不超过1024

连接数无限制

内在处理机制

线性轮询

回调callback

开发复杂性

Evens事件模块

http web模块

servier 具体网站

worker­_process:Nginx服务器处于工作状态的工作进程数(参考值:CPU核数,最高不超过核数的二倍)

worker connections:Nginx的进程中的线程数,默认是1024,工作中改成参考值20480

include    在shell语言中,可以将另一个文件的代码导入到当前文件的相对位置

send file:文件的高效传输功能,默认开启

keepalive_timeout:连接保持的超时时间,默认65s,在工作中可以考虑调到90s-180s

listen:监听端口,默认为80

server_name:域名/主机名(虚拟网站)

location:root(网页目录的根目录)

         index(索引参数/默认跳转的网站首页名)

netstat -an | grep ESTAB | wc -l查看web服务器当前状态下的并发连接数

/usr/local/ngix/conf/nginx.conf

软链接

虚拟多网站构建的三种方式:

1.    基于不同端口的虚拟多网站

2.    基于不同域名的虚拟多网站

3.    基于不同IP的虚拟多网站

如果用户是通过IP地址直连server,如何让他只能访问指定网站

修改配置文件,在末尾增加新server

Server {

     listen 80 default_server:

     server_name _:

     location / {

            return 404

      }

}

server {

           listen 80 default server;

           server name status.yunjisuan.com;

           location / {

                      stub_status on;

                      access_log off ;

                      allow 192.168.200.0/24

                      deny all;

           }

}

Location / {

      Return 401

}

Location = / {

           Return 402

}

“=”表示精确匹配,不加“=”表示默认匹配,精确匹配优先级更高

只有“/”代表默认为前缀匹配

192.168.200.74/11111111111111进401

192.168.200.74进402

Location /documents/ {

           Return 403

}

Location / {

Return 401

}

192.168.200.74/documents/11111111111进403

字符串匹配优先级高于默认匹配

两个字符串匹配之间,字符数多的优先级更高

Location ^~ /images/ {

           Return 404

}

^~是特殊的正则匹配,其目的是让后边字符串的优先级临时高于正则匹配

Location *~ .(gif|jpg|jpeg)$ {

           Return 500

}

优先级:精确匹配>特殊正则匹配>正则匹配>字符串匹配>默认匹配

Rewrite ^/(.*) http://www.baidu.com/$1 permanent

404:找不到相关资源(找不到网页)

如果Nginx在跳转首页的过程中没能跳转成功,就会出发Nginx的安全模块,安全模块不允许看网页的根目录,所以就会出现403(权限拒绝)

原文地址:https://www.cnblogs.com/Lassiter/p/10086689.html