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(权限拒绝)