Linux操作篇之LNMP(二)
一、apache与nginx工作模式区别。
在apache中,默认的工作模式为同步阻塞;而nginx的默认工作模式为异步非阻塞。其中同步与异步;阻塞与非阻塞组成了四种工作模式。
举例:1、同步阻塞模式:小明收到了快递快要到达的信息,去快递收货点等快递(等待期间什么也不做,只是等快递一件事)。
2、同步非阻塞模式:小明收到了快递快要到达的信息,去快递收货点等快递。(等待期间在玩游戏或者在上网)。
3、异步阻塞模式:小明收到了快递快要到达的信息,在家等着快递员给小明发消息(等待期间什么也不做,只是等快递员消息一件事)。
4、异步非阻塞模式:小明收到了快递快要到达的信息,在家等着快递员给小明发消息(等待期间在玩游戏或者在上网)。
上面可以看出,apache(同步阻塞模式)的工作效率最低,并不适合高并发的访问量,而nginx(异步非阻塞模式)则可以轻松处理百万并发量的连接。
二、epoll模型(多路复用模型)
nginx配置use epoll 后,以异步非阻塞模式工作,而epoll模型可以理解为楼下的传达室。快递送到传达室中,并通知来取快递,其他人的快递也在传达室中,谁有空谁来取,都通知了但没人来取的时候,保安老大爷就休息了。小明有空来取了,保安老大爷就根据快递信息单给小明拿快递
三、nginx工作原理。
nginx工作模式有两种,一个是master-work模式和单进程模式,大多数使用的master-work模式,少数测试开发阶段使用单进程模式。
在master-work模式下,会启动一个守护进程(master)和至少一个子进程(work)。
master主要是加载系统配置,处理系统信号,管理work进程(启动、结束、监控等)。
work进程主要处理具体的业务逻辑,对外部来说,是真正处理请求的服务
优点:高稳定性,只要还有work进程在运行,就可以对外提供服务。当一个work进程中断时,master进程会及时启动一个新的work进程。
高性能,可以充分利用CPU的多核这一特性。
高可用,在进行配置更改、升级的时候,可以做到不中断服务的热重启。
三、解读配置文件
1、主配置文件(/usr/local/nginx/conf)
user nginx nginx; 程序运行的用户、用户组
worker_processes 1; 启动工作进程的数量,一般按照CPU核心数设置。
#error_log logs/error.log; 错误日志存放位置,后面的是记录类型
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid; 主进程PID文件存放位置
events {
使用的工作模型,(默认情况下为epoll模型)
worker_connections 1024; 工作进程的最大连接数量(最大可处理并发量=最大连接数量X进程数量)
}
http { 优化网站参数
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; 启动高效文件传输模式
#tcp_nopush on; 避免网络阻塞,与tcp_nodelay两者选一,后者为有数据时,尽快传输,提高传输效率。
#keepalive_timeout 0;
keepalive_timeout 65; 每个TCP连接最多保持多长时间,时间过长会影响性能,设置为0,表示不保持TCP连接。
#gzip on; 启用文件压缩,可提高网站传输速度,减少响应时间。
server { 一个server代表一个网站的配置信息,当有多个server的时候,就可以对比apache中的虚拟主机,一个server对应一个虚拟主机
listen 80; 监听端口
server_name localhost; 服务器域名
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html; 网站的根目录(此配置中,实际的地址为/usr/local/nginx/html)
index index.html index.htm index.php; 默认加载的首页(有先后顺序,排在前面的优先,没有找到前一个再寻找下一个)
}
#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;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php$ {
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
include fastcgi.conf;
}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
server{
虚拟主机
}
}