目录
article
《Nginx 高性能 Web 服务器详解》
《Nginx 高性能 Web 服务器详解》
1.2 常见服务器产品介绍
- Apache
- Apache Web 服务器最初是由 NCSA httpd 1.3 服务器发展而来。
- 特性全,运行速度快,性能稳定,扩展功能丰富。
- 在设计时使用了以“进程”为基础的架构,这导致其在多处理器环境中性能有所下降。
- Microsoft IIS
- IIS 最初是 Windows NT 的可选包,最后内置在 Win 2000、Win XP Professional、Win Server 2003、2008、2012 中一起发行。
- IIS 和 Windows Server 相结合,使其在网络应用服务器的管理、可用性、可靠性、安全性、性能和可扩展性等方面都大为增强了。
- 6.0
- 全新的 IIS 架构:新的内核监听模式、新的“应用程序隔离模式 – 工作进程隔离模式”,增强了应用程序池、工作进程以及 Web 管理服务等方面的功能
- 增强了网络应用的开发与国际性支持。
- 7.0
- 增加了 SQL 数据库管理器
- 日报报表可视化支持
- 对 IIS 设置提供完全控制的配置编辑器、请求过滤器、.NET 授权规则编辑器以及 FastCGI 机制
- 部署成本高
- Tomcat
- Tomcat 在英文中是 “公猫或其他雄性猫科动物”的意思。Tomcat 服务器最初是由 Sun 公司的软件架构师詹姆斯·邓肯·戴维森开发的,后变为开源项目,并由 Sun 公司将其贡献给了 Apache 软件基金会。
- Tomcat 是 Sun 公司官方推荐的 Servlet 和 JSP 容器,在中小型系统和并发访问用户不是很多的场合下,其作为轻量级应用服务器,被广泛地使用。
- Tomcat 作为轻量级的服务器软件,无法满足复杂业务场景的要求,也没有复杂和丰富的功能;但 Tomcat 是免费开源的,且体积小,安装和部署都很方便,系统资源占用率低,是主要的 Servlet 和 JSP 容器,在这方面它比绝大多数的商业应用软件服务器要好。
- Lighttpd
- Lighttpd 专门针对高性能网站,提供了一套安全、快速、兼容性良好并且灵活的 Web Server 环境。
- 内存开销非常低、 CPU 占用率低、模块丰富,支持 FastCGI、Output Compress(输出压缩)、URL 重写等绝大多数 Apacha 具有的重要功能,是 Apache 的绝好替代者。
- Nginx
- Nginx 是一款免费开源的高性能 HTTP 服务器及反向代理服务器(Reverse Proxy)产品,还可以提供 IMAP/POP3 代理服务等功能。
1.3 Nginx 的功能特性
- 基本 HTTP 服务
- 处理静态文件;处理索引文件以及支持自动索引。
- 打开并自行管理文件描述符缓存。
- 提供反向代理服务,并且可以使用缓存加速反向代理,同时完成简单负载均衡及容错。
- 提供远程 FastCGI 服务的缓存机制,加速访问,同时完成简单的负载均衡以及容错。
- 使用 Nginx 的模块化特性提供过滤器功能。 Nginx 基本过滤器包括 gzip 压缩、ranges 支持、 chunked 响应、XSLT、SSI 以及图像缩放等。其中,针对包含多个 SSI 的页面,经由 FastCGI 或反向代理,SSI 过滤器可以并行处理。
- 支持 HTTP 下的安全套接层安全协议 SSL 。
- 高级 HTTP 服务
- 支持基于名字和 IP 的虚拟主机设置。
- 支持 HTTP/1.0 中 KEEP-Alive 模式和管线(PipeLined)模型连接。
- 支持重新加载配置以及在线升级时,无须中断正在处理的请求。
- 自定义访问日志格式、带缓存的日志写操作以及快速日志轮转。
- 提供 3xx ~ 5xx 错误代码重定向功能。
- 支持重写(Rewrite)模块扩展。
- 支持 HTTP DAV 模块,从而为 Http WebDAV 提供 PUT、DELETE、MKCOL、COPY 以及 MOVE 方法。
- 支持 FLV 流和 MP4 流传输。
- 支持网络监控,包括基于客户端 IP 地址和 HTTP 基本认证机制的访问控制、速度限制、来自同一地址的同时连接数或请求数限制等。
- 支持嵌入 Perl 语言。
- 邮件服务
- 支持使用外部 HTTP 认证服务器重定向用户到 IMAP/POP3 后端,并支持 IMAP 认证方式和 POP3 认证方式。
- 支持使用外部 HTTP 认证服务器认证用户后重定向连接到内部 SMTP 后端,并支持 SMTP 认证方式。
- 支持邮件代理服务下的安全套接层安全协议 SSL 。
- 支持纯文本通信协议的扩展协议 STARTTLS 。
1.4 常用功能介绍
- HTTP 代理和反向代理
- 支持判断表达式:通过使用正则表达式进行相关配置,可以实现根据不同的表达式,采取不同的转发策略。
- 对后端返回情况进行了异常判断:如果返回结果不正常,则重新请求另一台主机,并自动剔除返回异常的主机。
- 支持错误页面跳转功能。
- 负载均衡
- 内置策略
- 轮询:将前端请求按顺序(时间顺序或排列次数)逐一分配到不同的后端节点上,对于出现问题的后端节点自动排除。
- 加权轮询:在基本的轮询策略上考虑各后端节点接受请求的权重,指定各后端节点被轮询到的几率。
- 加权轮询主要用于后端节点性能不均的情况。
- IP hash:将前端请求的 IP 进行 hash 操作,然后根据 hash 结果将请求分配给不同的后端节点。
- 好处是避免考虑前端用户的 session 在后端多个节点上共享的问题。
- 扩展策略
- url hash
- 和 IP hash 类似,基于 url 的 hash 结果进行请求的转发。
- 优点:如果后端有缓存服务器,能够提高缓存效率。
- 缺点:不能自动排除异常节点。
- fair
- 将前端请求转发到一个最近负载最小的后台节点。Nginx 通过后端节点对请求的响应时间来判断负载情况。
- url hash
- 内置策略
- Web 缓存
- 主要有 Proxy_Cache 相关指令集和 FastCGI_Cache 相关指令集构成。
- Proxy_Cache :主要用于在 Nginx 服务器提供反向代理服务时,对后端资源服务器的返回内容进行 URL 缓存。
- FastCGI_Cache :主要用于对 FastCGI 的动态程序进行缓存。
- 第三方模块 ngx_cache_purge 主要用于清理 Nginx 服务器上指定的 URL 缓存。
2.3 Nginx 服务的启停控制
Nginx 服务在运行时,会保持一个主进程和一个或多个 worker process 工作进程。
获取主进程的 PID 有两个途径:
- 在 Nginx 服务器启动以后,默认在 Nginx 服务器安装目录下的 logs 目录中会产生文件名为 nginx.pid 的文件,此文件中保持的就是 Nginx 服务主进程的 PID 。
cat nginx.pid - 使用 ps 工具
ps -ef | grep nginx
Nginx 服务可接收的信号:
| 信号 | 作用 |
|---|---|
| TERM 或 INT | 快速停止 Nginx 服务器 |
| QUIT | 平缓停止 Nginx 服务器 |
| HUP | 使用新的配置文件启动进程,之后平缓停止原有进程,也就是所谓的“平滑重启” |
| USR1 | 重新打开日志文件,常用于日志切割 |
| USR2 | 使用新版本的 Nginx 文件启动服务,之后平缓停止原有 Nginx 进程,也就是所谓的“平滑升级” |
| WINCH | 平缓停止 worker process ,用于 Nginx 服务器平滑升级 |
向 Nginx 服务主进程发送信号:
- 使用 nginx 二进制文件
nginx -g SIGNAL - 使用 kill 命令发送信号或
kill SIGNAL PIDkill SIGNAL `filepath of nginx.pid`
启动 Nginx 服务
nginx
停止 Nginx 服务
nginx -g TERM | IINT | QUIT
重启 Nginx 服务
nginx -g HUP [-c newConfFile]
升级 Nginx 服务
如需更换安装路径,可先执行如下命令:
nginx -p newInstallPath
平滑升级 Nginx :
nginx -g USR2
查看新的 Nginx 服务状态:
ps -ef | grep nginx
平滑停止旧服务信号:
nginx -g WINCH
2.4 Nginx 服务器基础配置指令
默认的 Nginx 服务器配置文件存放在安装目录的 conf 目录中,主配置文件名 nginx.conf 。
下面是 1.19.4 版本默认的 nginx.conf 文件:
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/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 /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
include /etc/nginx/conf.d/*.conf;
}
全局块
user nginx; worker_processes 1; error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid;events 块
events { worker_connections 1024; }http 块
http { include /etc/nginx/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 /var/log/nginx/access.log main; sendfile on; #tcp_nopush on; keepalive_timeout 65; #gzip on; include /etc/nginx/conf.d/*.conf; }server 块
user nginx; worker_processes 1; error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid; events { worker_connections 1024; } http { include /etc/nginx/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 /var/log/nginx/access.log main; sendfile on; #tcp_nopush on; keepalive_timeout 65; #gzip on; include /etc/nginx/conf.d/*.conf; }location 块
user nginx; worker_processes 1; error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid; events { worker_connections 1024; } http { include /etc/nginx/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 /var/log/nginx/access.log main; sendfile on; #tcp_nopush on; keepalive_timeout 65; #gzip on; include /etc/nginx/conf.d/*.conf; }
mime.types 默认的内容:
types {
text/html html htm shtml;
text/css css;
text/xml xml;
image/gif gif;
image/jpeg jpeg jpg;
application/javascript js;
application/atom+xml atom;
application/rss+xml rss;
text/mathml mml;
text/plain txt;
text/vnd.sun.j2me.app-descriptor jad;
text/vnd.wap.wml wml;
text/x-component htc;
image/png png;
image/svg+xml svg svgz;
image/tiff tif tiff;
image/vnd.wap.wbmp wbmp;
image/webp webp;
image/x-icon ico;
image/x-jng jng;
image/x-ms-bmp bmp;
font/woff woff;
font/woff2 woff2;
application/java-archive jar war ear;
application/json json;
application/mac-binhex40 hqx;
application/msword doc;
application/pdf pdf;
application/postscript ps eps ai;
application/rtf rtf;
application/vnd.apple.mpegurl m3u8;
application/vnd.google-earth.kml+xml kml;
application/vnd.google-earth.kmz kmz;
application/vnd.ms-excel xls;
application/vnd.ms-fontobject eot;
application/vnd.ms-powerpoint ppt;
application/vnd.oasis.opendocument.graphics odg;
application/vnd.oasis.opendocument.presentation odp;
application/vnd.oasis.opendocument.spreadsheet ods;
application/vnd.oasis.opendocument.text odt;
application/vnd.openxmlformats-officedocument.presentationml.presentation
pptx;
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
xlsx;
application/vnd.openxmlformats-officedocument.wordprocessingml.document
docx;
application/vnd.wap.wmlc wmlc;
application/x-7z-compressed 7z;
application/x-cocoa cco;
application/x-java-archive-diff jardiff;
application/x-java-jnlp-file jnlp;
application/x-makeself run;
application/x-perl pl pm;
application/x-pilot prc pdb;
application/x-rar-compressed rar;
application/x-redhat-package-manager rpm;
application/x-sea sea;
application/x-shockwave-flash swf;
application/x-stuffit sit;
application/x-tcl tcl tk;
application/x-x509-ca-cert der pem crt;
application/x-xpinstall xpi;
application/xhtml+xml xhtml;
application/xspf+xml xspf;
application/zip zip;
application/octet-stream bin exe dll;
application/octet-stream deb;
application/octet-stream dmg;
application/octet-stream iso img;
application/octet-stream msi msp msm;
audio/midi mid midi kar;
audio/mpeg mp3;
audio/ogg ogg;
audio/x-m4a m4a;
audio/x-realaudio ra;
video/3gpp 3gpp 3gp;
video/mp2t ts;
video/mp4 mp4;
video/mpeg mpeg mpg;
video/quicktime mov;
video/webm webm;
video/x-flv flv;
video/x-m4v m4v;
video/x-mng mng;
video/x-ms-asf asx asf;
video/x-ms-wmv wmv;
video/x-msvideo avi;
}