nginx概述
Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。其特点是占有内存少,并发能力强,nginx的性能在同类型的网页服务器中表现较好,本文将介绍nginx的基本特性和安装配置。
正向代理和反向代理
实现负载均衡,请求分发。LVS是直接将请求负载到直接的服务器,详解
nginx的工作进程
一个master进程
主进程的作用读取和评估配置,启动,终止及维护工作进程以及创建、绑定及关闭套接字。
多个工作进程
- 工作进程处理web请求。nginx的采用了基于事件的模型和操作系统相关的机制,有效地分配工作进程之间的请求。
- 负责解析http协议;提供反向代理及过滤功能;nginx任何能完成的其它任务;
- 工作进程的数量被定义在配置文件中,可以使用配置文件定义固定的数量,或根据可用的CPU内核数实现自动调整其数量。
缓存加载器:
- 检查缓存存储中的缓存对象;
- 使用缓存元数据建立内存数据库;
- 接收、传入并处理来自客户端的连接;
缓存管理器
- 缓存的失效及过期校验
- 基于配置文件定义Nginx的工作方式
nginx的工作方式及其模块的工作是在配置文件中确定的。缺省情况下,其配置文件为nginx.conf
nginx 安装
- 安装依赖环境
yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel
安装pcre
- 下载pcre,点击这里
- 解压,tar -zxvf pcre-8.35.tar.gz -C /opt/modules/pcre
- 切换到/pcre-8.35目录下,运行 ./configure 进行pcre初始化配置
- 进行编译和安装,make && make install
- 验证,pcre-config –version
安装nginx
点击这里,下载nginx
解压
# tar zxvf nginx-1.6.2.tar
切换到nginx解压目录,初始化nginx配置
# ./configure --prefix=/opt/modules/nginx --with-http_stub_status_module --with-http_ssl_module
编译安装
# make && make install
进入/opt/modules/nginx目录,验证
# ./sbin/nginx -t
启动
# ./sbin/nginx
nginx的停止
- stop — 快速停止,粗暴模式,不再接受新请求,已经处理的请求被强制关闭,示例如下
#./sbin/nginx -s stop
- quit — 优雅停止,不再接受新请求,等待当前的工作进程完成当前的服务器请求,并停止nginx
# ./sbin/nginx -s quit
配置文件重载
# ./sbin/nginx -s reload
安装tomcat
nginx配置结构图
配置文件结构说明
配置说明
- nginx配置文件由不同模块组成,通过模块化的方式实现不同的功能。
- 配置指令分为简单指令和块指令。一个简单的指令,包括名称,用空格分隔参数,并用分号(;)结束。
- 一个块指令由一个或多个简单具有相同的结构简单指令组合而成,使用一组用{}括号括起来表示块结束。
- 上下文:一个块的指令包含有大括号其他指令,它被称为上下文(例如:事件,HTTP,服务器,和位置)。
放置在配置文件中的任何上下文以外的指令都被认为是在主上下文。 - 检查配置文件语法: nginx -t
- 指定nginx要加载的配置文件:nginx -c
配置文件构成
- Nginx配置文件结构主要由以下几部分构成。
...... events #Events用于配置IO模型,如epoll、kqueue、select或poll等,它们是必备模块。 { ...... } http #http上下文专用于配置用于http的各模块 { #包括客户端类指令,文件IO类指令,hash类指令,套接字类指令等 ...... server #用于定义虚拟服务器相关的属性,常见的指令有backlog、rcvbuf、bind及sndbuf等 { ...... } server { ...... } ...... }
- 基本的nginx.conf配置描述
#user nobody; #指定运行worker进程的用户和组
worker_processes 1; #worker线程的个数;通常应该为物理CPU核心个数减1;
#error_log logs/error.log; #配置错误日志文件位置及日志记录级别
#error_log logs/error.log notice;#可用于main、http、server及location上下文中
#error_log logs/error.log info; #语法格式为error_log file |stderr [debug|info|notice|warn|error|crit|alert|emerg]
#pid logs/nginx.pid; #指定pid存放路径
events {
worker_connections 1024; 每个worker进程所能够响应的最大并发请求数;
}
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; #文件发送
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65; #保持连接的超时时长,默认为65s
#gzip on; #是否开启gzip压缩
server {
listen 80; #定义监听的端口
server_name localhost; #定义监听的主机
#charset koi8-r; #定义字符集
#access_log logs/host.access.log main; #访问日志文件存放路径
location / { #location通常用于server上下文中,用于设定某URI的访问属性。location可以嵌套。
root html; #默认首页文件位置
index index.html index.htm; #首页文件顺序,如果找不到index.html,则找index.htm
}
#以下部分根据http状态码重定向错误页面
#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;
}
}
}
upstream 参数
- keepalive 服务端与nignx的连接保存时间
- queue 工作队列
- service 反向服务地址 加端口
- weight 权重
- max_fails 失败多少次 认为主机已挂掉则,踢出
- fail_timeout 踢出后重新探测时间
- backup 备用服务
- max_conns 允许最大连接数
- slow_start 当节点恢复,不立即加入
负责均衡算法
- ll+weight 默认的负载算法:
- ip_hash : 基于Hash 计算
应用场景:保持session 一至性
- url_hash: (第三方)
应用场景:静态资源缓存,节约存储,加快速度
缺点:应用挂掉影响资源响应 least_conn 最少链接
least_time 最小的响应时间,计算节点平均响应时间,然后取响应最快的那个,分配更高权重
server参数
location:可以有多个,相当于站点,根据location分发upstream,server,静态资源等
- root:nginx的站点,可以配置到location之外或里面
- index 首页文件顺序
- proxy_set_header 代理头部设置,保存头部信息
- proxy_pass,代理,可以代理指向upstream,指向完整的url路径。
参考地址