前言


Nginx是由俄罗斯软件工程师Igor Sysoev开发的一个高性能的HTTP和反向代理服务器,具备IMAP/POP3和SMTP服务器功能。Nginx最大的特点是对高并发的支持和高效的负载均衡,在高并发的需求场景下,是Apache服务器不错的替代品。目前,包括新浪、腾讯等知名网站都已使用Nginx作为Web应用服务器。本文带来的是Nginx配置与应用详解。


基础特性

基本功能

静态资源的web服务器,能缓存打开的文件描述符

反向代理服务器,缓存、负载均衡

支持FastCGI

模块化,非DSO机制,过滤器gzip,SSI和图像大小调整等

支持SSL


扩展功能

基于名称和IP做虚拟主机

支持keepalive

支持平滑配置更新或程序版本升级

定制访问日志,支持使用日志缓存以提高性能

支持url rewrite

支持路径别名

支持基于IP及用户的认证

支持速率限制,并发限制等


基本架构

一个master, 生成一个或多个worker

事件驱动:kqueue, epoll, /dev/poll

消息通知:select, poll, rt signals

支持sendfile, sendfile64

文件AIO

支持mmap


模块类别

核心模块

标准http模块

可选的http模块

邮件模块

第三方扩展模块


基本配置

虚拟主机

Nginx配置与应用详解_javaNginx配置与应用详解_java_02


虚拟主机基本配置完成,当然虚拟主机里也可以有很多参数的,下文会提及到


访问控制

基于用户


认证文件由htpasswd命令创建


访问测试


基于IP


重启服务后访问测试

压缩功能


nginx将响应报文发送至客户端之前可以启用压缩功能,这能够有效地节约带宽,并提高响应至客户

端的速度。通常编译nginx默认会附带gzip压缩的功能,因此,可以直接启用之。


未压缩访问测试

Nginx配置与应用详解_java_03Nginx配置与应用详解_java_04


重启服务,压缩后测试

Nginx配置与应用详解_java_05

压缩成功


防盗链

(1) 定义合规的引用

Nginx配置与应用详解_java_06


(2) 拒绝不合规的引用

Nginx配置与应用详解_java_07Nginx配置与应用详解_java_08Nginx配置与应用详解_java_09


访问测试

Nginx配置与应用详解_java_10Nginx配置与应用详解_java_11


反向代理

Nginx通过proxy模块实现反向代理功能。在作为web反向代理服务器时,nginx负责接收客户请求,并能够根据URI、客户端参数或其它的处理逻辑将用户请求调度至上游服务器上(upstream server)。


nginx在实现反向代理功能时的最重要指令为proxy_pass,它能够将location定义的某URI代理至指定的上游服务器(组)上。如下面的示例中,location的/uri将被替换为上游服务器上的/newuri。


Nginx配置与应用详解_java_12Nginx配置与应用详解_java_13


缓存

nginx做为反向代理时,能够将来自上游服务器的响应缓存至本地,并在后续的客户端请求同样内容时

直接从本地构造响应报文。

Nginx配置与应用详解_java_14Nginx配置与应用详解_java_15


缓存前请求时间

Nginx配置与应用详解_java_16


缓存后请求时间

Nginx配置与应用详解_java_17


此时缓存目录应该有缓存文件生成

Nginx配置与应用详解_java_18


负载均衡

nginx可利用自身的upstream模块实现,upstream模块的负载均衡算法主要有三种,轮调(round-robin)、ip哈希(ip_hash)和最少连接(least_conn)三种。

Nginx配置与应用详解_java_19Nginx配置与应用详解_java_20Nginx配置与应用详解_java_21

如此便可实现简单的负载均衡功能


The end

好了,有关nginx的基础配置及应用就先说到这里了,第一次接触nginx,写的比较乱,敬请谅解。