niginx
nginx是一个开源的,支持高性能,高并发的www服务和代理服务软件。它是一个俄罗斯人lgor sysoev开发的,作者将源代码开源出来供全球使用。
目前能够提供 Web 网络服务的程序有 IIS、Nginx 和 Apache 等。其中,IIS(Internet Information Services,互联网信息服务)是 Windows 系统中默认的 Web 服务程序
特点:
支持高并发、资源消耗少、可以做http反向代理和负载均衡、支持异步网络i/o事件模型epoll
Tengine
Tengine是由淘宝网发起的Web服务器项目。它在Nginx的基础上,针对大访问量网站的需求,添加了很多高级功能和特性。Tengine的性能和稳定性已经在大型的网站如淘宝网,天猫商城等得到了很好的检验。它的最终目标是打造一个高效、稳定、安全、易用的Web平台。
安装
1.下载tengine
wget http://tengine.taobao.org/download/tengine-2.3.2.tar.gz
2.解压tengine
tar -zxvf tengine-2.3.2.tar.gz
3.进入解压后的文件夹进行编译安装
cd tengine-2.3.2
./configure --prefix=/opt/tbnginx/
make && make install
4.配置nginx的环境变量
#查看PATH值
echo $PATH
#编辑文件
vim /etc/profile
#写入PATH值,在开头添加nginx的路径,以冒号分割
PATH="/opt/tbnginx/sbin:/opt/python367/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin"
#读取文件,让配置生效
source /etc/profile
5.启动nginx
nginx
nginx指令
nginx # 启动nginx
nginx -s stop # 停止nginx
nginx -s reload #平滑重启,不停止进程,重新读取配置文件
nginx -t #检测nginx.conf语法是否正确
niginx目录结构
conf #存放nginx的配置文件
html #存放nginx静态文件的
logs #nginx的运行日志,错误日志,访问日志
sbin #存放可执行命令
虚拟主机
虚拟主机就是将一台服务器分割成多个“虚拟服务器”,每个站点使用各自的硬盘空间,由于省资源,省钱,众多网站都使用虚拟主机来部署网站。
在nginx.conf配置文件中使用server{}代码块标签来表示一个虚拟主机。
虚拟主机类型
基于域名的虚拟主机
通过不同的域名区分不同的虚拟主机,是企业应用最广的虚拟主机。
基于端口的虚拟主机
通过不同的端口来区分不同的虚拟主机,一般用作企业内部网站,不对外直接提供服务的后台,例如www.pythonav.cn:9000
基于IP的虚拟主机
通过不同的IP区分不同的虚拟主机,此类比较少见,一般业务需要多IP的常见都会在负载均衡中绑定VIP
nginx的访问日志功能
打开nginx.conf中的如下配置
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;
access_log "pipe:rollback logs/access_log interval=1d baknum=7 maxsize=2G" main;
404错误页面
打开nginx.conf中的如下配置
error_page 404 /404.html;
Nginx配置文件
CoreModule核心模块
user www; #Nginx进程所使用的用户
worker_processes 1; #Nginx运行的work进程数量(建议与CPU数量一致或auto)
error_log /log/nginx/error.log #Nginx错误日志存放路径
pid /var/run/nginx.pid #Nginx服务运行后产生的pid进程号
events事件模块
events {
worker_connections #每个worker进程支持的最大连接数
use epool; #事件驱动模型, epoll默认
}
http内核模块
# 公共的配置定义在http{}
http { //http层开始
...
#使用Server配置网站, 每个Server{}代表一个网站(简称虚拟主机)
'server' {
listen 80; #监听端口, 默认80
server_name localhost; #提供服务的域名或主机名
access_log host.access.log #访问日志
#控制网站访问路径
'location' / {
root /usr/share/nginx/html; #存放网站代码路径
index index.html index.htm; #服务器返回的默认页面文件
}
#指定错误代码, 统一定义错误页面, 错误代码重定向到新的Locaiton
error_page 500 502 503 504 /50x.html;
}
...
#第二个虚拟主机配置
'server' {
...
}
include /etc/nginx/conf.d/*.conf; #包含/etc/nginx/conf.d/目录下所有以.conf结尾的文件
} #http层结束
反向代理
反向代理服务器位于用户与目标服务器之间,但是对于用户而言,反向代理服务器就相当于目标服务器,即用户直接访问反向代理服务器就可以获得目标服务器的资源。同时,用户不需要知道目标服务器的地址,也无须在用户端作任何设定,提高了内部服务器的安全。
配置反向代理
server {
listen 80 default_server;
server_name _;
location / {
#请求转发参数 proxy_pass
proxy_pass http://192.168.13.117;
}
}
负载均衡
Web服务器,直接面向用户,往往要承载大量并发请求,单台服务器难以负荷,我使用多台WEB服务器组成集群,前端使用Nginx负载均衡,将请求分散的打到我们的后端服务器集群中,
实现负载的分发。那么会大大提升系统的吞吐率、请求性能、高容灾
Nginx要实现负载均衡需要用到proxy_pass代理模块配置,Nginx负载均衡与Nginx代理不同地方在于:Nginx代理仅代理一台服务器,而Nginx负载均衡则是将客户端请求代理转发至一组upstream虚拟服务池,Nginx可以配置代理多台服务器,当一台服务器宕机之后,仍能保持系统可用。
配置反向代理
配置upstream:在nginx.conf的 http 区域中添加配置
upstream myupstream {
server 10.0.0.10:8000;
server 10.0.0.11:9000;
#可以添加多个
}
配置location
location / {
#请求转发参数 proxy_pass
#proxy_pass是基于http协议的请求转发
proxy_pass http://myupstream;
}
此时初步负载均衡已经完成,upstream默认按照轮训方式负载,每个请求按时间顺序逐一分配到后端节点。
upstream分配策略
1.轮询:
upstream的默认分配策略就是轮询
2.weight 权重:
upstream myupstream {
server 10.0.0.10:8000 weight=5;
server 10.0.0.11:9000 weight=10;#这个节点访问比率是大于8000的
}
3.ip_hash:
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器
upstream myupstream {
ip_hash;
server 10.0.0.10:8000;
server 10.0.0.11:9000;
}
4.backup
在非backup机器繁忙或者宕机时,请求backup机器,因此机器默认压力最小
upstream myupstream {
server 10.0.0.10:8000 weight=5;
server 10.0.0.11:9000;
server node.oldboy.com:8080 backup;
}