一、Nginx概述
1.Nginx简介
解决基于进程模型产生的C10k问题,请求时即使无状态连接如web服务都无法达到并发响应量级一万现状。2006年俄罗斯编写。全称为engine X,缩减合并称为nginx。官方站点:http://nginx.org/。2013年发出企业版Nginx Plus
二次发行版:tengine, OpenResty… …
2.Nginx的特性
1)模块化设计、较好扩展性;早期不支持模块的动态装卸载
2)高可靠性:基于master/worker模式
master:负责启动服务,分析配置文件,父子启动子进程和worker进程
worker:真正响应用户请求进程
3)支持热部署(平滑迁移):不停机更新配置文件、更换日志、更新服务器程序版本;
4)内存消耗低:10000个keep-alive连接模式下的非活动连接仅消耗2.5M内存;
5)支持event-driven事件驱动模型, aio一步驱动机制, mmap内存映射;
3.Nginx基本功能
1) 静态资源的web服务器;
2) http协议的反向代理服务器;
3) pop3, smpt,imap4等邮件协议的反向代理;
4)能缓存打开的文件(元数据:文件的描述符等等信息)
5)支持FastCGI(php-fpm), uWSGI(Python WebFramwork)等协议机制,实现代理后端应用程序交互
6)高度模块化(非DSO机制)
模块类型:
core module |
核心公用模块 |
Standard HTTP modules |
标准(核心)HTTP模块;自动编译进程序不止一个 |
Optional HTTP modules |
可选HTTP模块 |
Mail modules |
邮件模块 |
3rd party modules |
第三方模块,在编译时需手动指明加载方式加载 |
7)支持过滤器,例如zip,SSI
8)支持SSL加密机制;
9) web服务相关的功能:虚拟主机(server)、keepalive、访问日志(支持基于日志缓冲提高其性能)、urlrewirte、路径别名、基于IP及用户的访问控制、支持速率**及并发数**;
……
4.Nginx的基本架构:master/worker
master/worker模型:一个master进程可生成一个或多个worker进程;每个worker基于时间驱动机制可以并行响应多个请求
master:加载配置文件、管理worker进程、平滑升级,...
worker:http服务,http代理,fastcgi代理,...
事件驱动:epoll(Linux),kqueue(FreeBSD), /dev/poll(Solaris)
消息通知:select,poll, rt signals
支持sendfile, sendfile64
支持AIO,mmap
配置文件conf/nginx.conf
#user nobody;
worker_processes 1;#推荐worker数为cpu核数,避免cpu不必要的上下文切换
events {
#表示每个worker进程所能建立连接的最大值
#一个nginx最大的连接数max=worker_connections*worker_processes;
#对于http请求本地资源最大并发数量为max
#如果http作为反向代理,最大并发数为max/2。因为每个并发会建立与客户端的连接和与后端服务的连接,会占用两个连接。
worker_connections 1024;
}
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;
keepalive_timeout 65;
server {
listen 80;
server_name localhost;
#charset koi8-r;
access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
}
# serve static files(css|js|image..)
#
location ~ ^/(images|javascript|js|css|flash|media|static)/
{
root E:\svn\web;
access_log off;
expires 30d;
}
#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;
}
}
}
本文转载于微信公众号: JavaEE企业级开发(jee-evangelists),更多微信文章请扫描关注公众号:
|