1:Nginx是一款轻量级、高性能、开源免费的httpd服务器、反向代理服务器、缓存服务器
2:Nginx的I/O模型 支持I/O复用 epoll模型(事件驱动),异步非阻塞(AIO)
3:Nginx的主要结构模块
①核心模块 core
②httpd模块 ngx_httpd
③代理模块 ngx_http_proxy
④集群模块 ngx_http_upstream
⑤fastcgi模块 ngx_http_fastcgi (nginx基于fastcgi勾连动态页面的程序的9000端口)
4:Nginx不支持DSO机制,但Nginx支持平滑升级
5:Nginx支持pcre正则表达式,重定向的功能异常强大
6:Nginx由主控进程生成工作进程(数量有CPU核心数决定)
7:Nginx的各个功能配置剖析
①:全局配置端 main
②:事件配置端 event
③:http配置端
主要的httpd和代理的功能配置在http上下文
8:http上下文对应的功能配置与详解
①:httpd的配置,其下级上下文为server {} location{} 支持if{}
httpd上下文配置全局网页服务
server{}上下文配置虚拟主机的相关设置,默认第一虚拟主机即为中心主机
location{}上下文,映射本地文件系统和URL的映射关系
rewrite重定向:可以基于正则表达式做重定向
rewrite URL URL flag
例如:rewrite ^/xxx/(.*)$ /xxx/$1 break;
location和本地文件系统的映射关系的优先级和配置
location = /uri {
}
location ~ /uri {
}
location ~* /uri {
}
location ^~ /uri {
}
location /uri {
}
location / {
}
注意:URI中的左侧的/是相对文件系统路径右侧的/而言的
例如:
location /aaa {
root “/www/html”
}
意味着 资源路径为文件系统的/www/html/aaa里
路径别名:alias /xxx “/xxx”
例如: location /bbb {
alias “/aaa” 代表
若访问/bbb即为文件系统的/aaa内的资源
代理功能
基于proxy模块,注意:一般添加在location上下文中
例如: location /URI{
proxy_pass URL; 注意:URI右侧和下方URL右侧保持一致
} 代理结果为URL/URI
正则表达式代理
例如 location ~* \.(xxx|xxx|xxx)$ {
proxy_pass URL; #注意:URL右侧不能接任何URI,否则语法错误
#同时若有其他匹配location,需先进行此location#匹配,再兼容其他location匹配。
}
fastcgi代理 在location配置段中配置fastcgi区域
注意:需基于fastcgi_pass的代理方法进行代理,并同时需要将网页根路径勾连fastcgi的配置变量,若勾连动态页面程序,一般需要安装管理fastcgi 9000端口的fpm服务(php-fpm)
例如:location ~ \.(.php|jsp|asp) {
root “/xxx/xxx”;
fastcgi_pass URL;
fastcgi_params SCRIPT_FILENAME /xxx/xxx$fastcgi_script_name;
include fastcgi_params
}
Nginx负载均衡集群配置,需要基于集群的upstream模块,由粘性工具proxy_pass来进行代理
在http配置上下文中配置upstream容器,配合location上下文中的粘性工具proxy_pass来完成负载均衡。同时可以结合调度算法。例如:
upstream Name {
[ip_hash|sticky|xxx;] 注意:若要使用sticky模块实现基于cookie方式来保持会话,需通过编译新版本Nginx手段,额外加入此模块。
server backend_server1 [ max_fail=x time_out=xxx weight=x [down]];
server backend_server2 [ max_fail=x time_out=xxx weight=x [down]];
[server backup xxx.xxx.xxx.xxx]
}
location /URI {
proxy_pass http://Name;
}
Nginx的代理缓存
注意:代理服务器的缓存是将上游upstream_server服务器中静态资源,以KV对存储方式缓存代理服务器本地,以hash码来进行定位索引
Nginx是一款不错的缓存代理服务器,但功能和性能不如squid和varnish
静态资源缓存的优先级:浏览器缓存---代理服务缓存---原始服务器缓存---直接调用原始存储
如何在Nginx内设置代理缓存 在http配置段中定义 proxy_cache_path PATH levels=levels keys_zone=name:size [interactive=time] [max_size=#k|M|G]
例如:proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=one:10m;
在对应的代理的location中进行调用缓存,并同时可以使用相关代理缓存的额外属性设置。例如:
注意:若缓存过期,应及时通知更新缓存,若未过期,需要更新缓存,必须修建代理缓存