Nginx服务简介
Nginx概述
Nginx (engine x) 是一个高性能的http和反向代理服务器,也是一个IMAP/POP3/SMTP服务器。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。
社区版和商业版两个版本,官网地址为http://www.nginx.org/
特性:
模块化设计,较好的扩展性
高可靠性
支持热部署:不停机更新配置文件,升级版本,更换日志文件
低内存消耗:10000个keep-alive连接模式下的非活动连接,仅需要2.5M内存
event-driven,aio,mmap,sendfile
基本功能:
静态资源的web服务器
http协议反向代理服务器
pop3/imap4协议反向代理服务器
FastCGI(lnmp),uWSGI(python)等协议
模块化(非DSO),如zip,SSL模块
web服务相关的功能:
虚拟主机(server)
支持keep-alive 和管道连接
访问日志(支持基于日志缓冲提高其性能)
url rewirte
路径别名
基于IP及用户的访问控制
支持速率限制及并发数限制
重新配置和在线升级而无须中断客户的工作进程
Memcached的GET 接口
Nginx架构
nginx的程序架构:
master/worker结构
一个master进程:
负载加载和分析配置文件、管理worker进程、平滑升级
一个或多个worker进程
处理并响应用户请求
缓存相关的进程:
cache loader:载入缓存对象
cache manager:管理缓存对象
Nginx的工作流程大致如下:
1.Nginx启动后,会产生一个主进程,主进程执行一系列的工作后会产生多个工作进程;
2.在客户端请求动态站点的过程中,Nginx服务器还涉及和后端服务器的通信。Nginx将接收到的Web请求通过代理转发到后端服务器,由后端服务器进行数据处理和组织;
3.Nginx为了提高对请求的响应效率,降低网络压力,采用了缓存机制,将历史应答数据缓存到本地。保障对缓存文件的快速访问;
##工作进程##
工作进程的主要工作有以下几项:
接收客户端请求;
将请求依次送入各个功能模块进行过滤处理;
IO调用,获取响应数据;
与后端服务器通信,接收后端服务器处理结果;
数据缓存
响应客户端请求;
Nginx模块
nginx高度模块化,1.9.11版本后开始支持动态装载、卸载,主要包含下述模块:
核心模块 core module
标准模块 http、mail、stream
第三方模块
Nginx配置
nginx配置文件中包含几段:
主配置段
http配置段
mail配置段
stream配置段
不同的配置参数需要用在不同的配置段,不能乱用
使用rpm包管理器安装nginx
yum -y install nginx |
主配置段,程序正常运行必须配置的字段
vim /etc/nginx/nginx.conf user nginx; #master进程是以root身份运行,worker进程是以nginx的身份运行 worker_processes auto; #worker进程的数量;通常应该为当前主机的cpu的物理核心数 error_log /var/log/nginx/error.log; #服务错误日志的存放路径 include /usr/share/nginx/modules/*.conf; #与此处的配置等效的模块的配置文件存放路径 events { worker_connections 1024; } #事件驱动,每个worker进程能够并发打开的最大连接数量,1024是默认值 #所有配置行必须以分号结尾 |
http配置段
ngx_http_core_module模块
include /etc/nginx/conf.d/*.conf; #在此路径下以conf结尾的配置文件具有同等效果 server { #虚拟主机可以在此处配置 #一些模块参数的配置可以在server中,也可以在http中,还有的必须在二者中的一个 listen 80 default_server; #开启http服务时i监听的端口,可以指定ip地址 server_name www.a.com ; #可以指定域名,支持通配符和正则表达式 server_tokens on ; #隐藏nginx的版本信息 root /app/website1; #定义此虚拟主机的主页面路径 location #在server中定义,用于实现uri到文件系统的映射,例子如下: server { #当访问http://www.a.com/images/logo.jpg时跳转到-->/data/imgs/images/logo.jpg #location也支持正则表达式 alias #在location中定义路径别名,与root的区别,看下面例子: server {... #当访问http://www.a.com/images/logo.jpg时跳转到-->/data/imgs/logo.jpg #注意区分root与alias |
ngx_http_access_module模块
此模块实现基于ip地址的访问控制 location / { deny 192.168.1.1;allow 192.168.1.0/24; allow 10.1.1.0/16; allow 2001:0db8::/32; deny all; } #支持ipv4和ipv6协议 #自上而下匹配,命中后就不会再匹配下一条策略 #相对apache,nginx的访问控制还是很好理解的 |
ngx_http_auth_basic_module模块
auth_basic string ; auth_basic_user_file file; location /admin/ { auth_basic"Admin Area"; #认证窗口的提示信息 auth_basic_user_file /etc/nginx/.ngxpasswd; #存放认证账户的文件,可以使用httpd-tools包中的passwd工具生成认证用户 } #实现基于用户的访问控制,使用basic机制进行用户认证 |
ngx_http_gzip_module模块
gzip on; #开启gzip压缩功能 gzip_comp_level 6; #压缩比,默认是1,范围是1-9 gzip_min_length 64; #最小达到64字节的文件才能够被压缩 gzip_proxied off;对被代理的请求不启用压缩 gzip_types text/xml text/css application/javascript; #对何种文件类型进行压缩 |
ngx_http_ssl_module模块
提供https加密 例子: ssl_session_timeout10m; |
ngx_http_rewrite_module重写模块
将用户请求的URI基于PCRE regex所描述的模式进行检查,而后完成重定向替换 rewrite regex replacement #将用户请求的URI基于regex所描述的模式进行检查,匹配到时将其替换为replacement指定的新的URI return 状态码 url; #停止处理,并返回给客户端指定的响应码 rewrite_log on; #是否开启重写日志, 发送至error_log(notice level) |
ngx_http_referer_module模块
定义referer首部的合法可用值,不能匹配的将是非法值,可以防盗链 例子: valid_referers www.a.com ; #定义www.a.com为有效值 #防盗链原理:当非www.a.com要盗用本站的图片等信息,由于不在valid_referers中定义,则会被拒绝并返回403拒绝 |
ngx_http_proxy_module模块
代理服务器,目标主机收到信息后认为源就是代理机器,而不是真正的客户端 server { server_name HOSTNAME;location /uri/ { proxy_pass http://host/new_uri/; #有/和没有/是有很大区别的 } } #proxy_pass后面的路径是一个uri时,其会将location的uri替换为proxy_pass的uri #当proxy_pass 后的链接地址末尾有/时,访问http://HOSTNAME/uri/时,实际转发到http://host/new_uri/ #当proxy_pass 后的链接地址末尾没有/时,访问http://HOSTNAME/uri/时,实际转发到http://host/new_uri/uri/ |
在http配置定义缓存信息 #对请求的url进行hash运算得出128位数字(16进制),取出最后三位数字,组成一级、二级、三级缓存目录 #当客户再次请求此资源时,代理服务器就会从这些缓存目录中快速找到请求资源 keys_zone=proxycache:20m #定义缓存名称供以后被调用,并定义缓存大小不能超过20m max_size=1g; #硬盘能存储最多的有关缓存hash信息的容量 调用缓存功能,需要定义在相应的配置段,如server{...}; |
ngx_http_fastcgi_module模块
php独立模块,前提在后端服务器先配置fpm server和mariadb-server 在前端nginx代理服务器上配置示例: location ~* \.php$ { #凡是请求php结尾的文件都会匹配location的内容 include fastcgi_params; } fastcgi缓存,与proxy_cache的功能类似,不再赘述 例子: http { #此处关于fastcgi缓存的配置与proxy_cache含义是一样的 ... |
ngx_http_upstream_module模块
用于将多个服务器定义成服务器组,而由proxy_pass, fastcgi_pass等指令进行引用
定义nginx代理服务器 location / { |
本文转自 a_pan 51CTO博客,原文链接:http://blog.51cto.com/panpangao/1976874