一.Nginx概述
1.定义
一款高新能、轻量级Web服务软件
系统资源消耗低
对HTTP并发连接的处理能力高
单台物理服务器可支持30 000~50 000个并发请求。
2.Nginx模块作用
(1)main模块
全局配置模块,所有模块都要执行遵守(配置运行nginx服务器的用户(组)、worker_process数(进程)、nginx进程PID存放路径、错误日志存放路径、配置文件的引入等)
(2)stream服务模块
实现反向代理功能,包括TCP协议代理
(3)邮件服务模块
主要用于支持Nginx的邮件服务(对 POP3 协议、 IMAP 协议和 SMTP协议的支持)
(4)第三方模块
二次开发,为了扩展Nginx服务器应用,完成开发者自定义功能(对 POP3 协议、 IMAP 协议和 SMTP协议的支持)
(5)events模块
影响nginx服务器与用户的网络连接
events { #events模块设置
woker_connections 65536; #设置单个工作进程最大并发连接数
use epoll; #事件驱动类型选择为epoll
accept_mutex on; #同一时刻一个请求轮流由work进程除了,即轮询
multi_accept on; #每个工作进程同时接受多个网络连接
}
(6)http模块
跟web服务相关,主要用于扩展标准的 HTTP 功能,让 Nginx 能处理一些特殊的服务,包含几个子模块(自定义服务日志、允许sendfile方式传输文件、连接超时时间、单连接请求数上限、Flash 多媒体传输 、解析 GeoIP 请求、 网络传输压缩 、 安全协议 SSL 支持等)
(7)location模块
uri网址定位
(8)server模块
服务模块(配置80端口监听、虚拟主机、DNS域名解析等)
(9)auth_basic模块
对网页设置用户名密码
(10)gzip模块
压缩
(11)proxy模块
设置后端IP地址、端口号及http和加密的https
(12)ssl模块
https加密
3.Nginx三大作用
(1)反向代理
在服务端 配置,客户端 访问服务器A ,服务器A 为代理服务器 ,将客户服务再转发到服务器B
作用:缓存,将服务器的响应缓存在自己的内存中,减少服务器压力;负载均衡,将用户请求分配给多个服务器;访问控制
(2)正向代理
在客户端 配置,配置完了再去访问具体服务,即代理服务器 代理了客户端 ,再去和目标服务器 进行交互
作用:提高访问速度;隐藏客户端真实IP地址
(3)负载均衡
分摊到多个操作单元上进行执行,例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务
nginx七层负载均衡调度算法(六种)
① 轮询(默认调度算法)
特点:每个请求按时间顺序逐一分配到不同的后端服务器处理。
适用业务场景:后端服务器硬件性能配置完全一致,业务无特殊要求时使用。
upstream backendserver {
server 192.168.0.14:80 max_fails=2 fail_timeout=10s;
server 192.168.0.15:80 max_fails=2 fail_timeout=10s;
}
② 加权轮询
特点:指定轮询几率,weight值(权重)和访问比例成正比,用户请求按权重比例分配。
适用业务场景:用于后端服务器硬件性处理能力不平均的情形。
upstream backendserver {
server 192.168.0.14:80 weight=5 max_fails=2 fail_timeout=10s;
server 192.168.0.15:80 weight=10 max_fails=2 fail_timeout=10s;
}
③ ip_hash(IP哈希)
特点:每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session会话保持问题。
适用业务场景:适用于需要账号登录的系统,会话连接保持的业务。
upstream backendserver {
ip_hash;
server 192.168.0.14:80 max_fails=2 fail_timeout=10s;
server 192.168.0.15:80 max_fails=2 fail_timeout=10s;
}
④ 最少连接数 least_conn
特点:按nginx反向代理与后端服务器之间的连接数,连接数最少的优先分配。
适用业务场景:适用于客户端与后端服务器需要保持长连接的业务。
upstream backendserver {
least_conn; server 192.168.0.14:80 max_fails=2 fail_timeout=10s;
server 192.168.0.15:80 max_fails=2 fail_timeout=10s;
}
⑤ 响应时间 fair(需编译安装第三方模块 ngx_http_upstream_fair_module)
特点:按后端服务器的响应时间来分配请求,响应时间短的优先分配。
适用业务场景:对访问响应速度有一定要求的业务。
upstream backendserver {
fair;
server 192.168.0.14:80 max_fails=2 fail_timeout=10s;
server 192.168.0.15:80 max_fails=2 fail_timeout=10s;
}
⑥ url_hash(URL分配 )(需编译安装第三方模块 ngx_http_upstream_hash_module)
特点:按访问url的hash结果来分配请求,使同一个url访问到同一个后端服务器。
适用业务场景:适用于后端服务器为缓存服务器时比较有效。
upstream backendserver {
server 192.168.0.14:80 max_fails=2 fail_timeout=10s;
server 192.168.0.15:80 max_fails=2 fail_timeout=10s;
hash $request_uri;
}
三.Nginx信号
nginx -h
查询nginx信号使用规则
常用信号:
信号 解释
nginx -v 显示版本
nginx -V
显示编译详细情况、模块等信息
nginx -t
检查语法格式
nginx -T 打印当前配置
nginx -s 发送信号
nginx -s stop 立即关闭
nginx -s quit 优雅退出,不影响业务的状态下退出
nginx -s reload 重新加载配置文件
nginx -s USR1 分割日志
nginx -s USR2 优雅升级
nginx -g 'user zhangsan;' 以张三身份运行,默认是以nginx身份
nginx -g 'daemon off;' 前台运行命令
四.Nginx核心配置指令
1.访问状态统计配置
(1)查看已安装的Nginx是否包含http_stub_status模块
-
cd /usr/local/nginx/sbin
-
#根据安装路径自由修改/apps/nginx/sbin也可
-
nginx -V
(2)修改nginx.conf配置文件,指定访问位置并添加stub_status配置(修改之前进行备份)
(3)重启服务后进行访问测试
systemctl restart nginx.service
浏览器访问 http;//IP地址/status
Active connections ∶ 表示当前的活动连接数;
server accepts handled requests∶表示已经处理的连接信息,三个数字依次表示已处理的连接数、成功的TCP握手次数已处理的请求数。
可curl http∶//IP地址/status 结合 awk与if 语句进行性能监控。
2.基于授权的访问控制
(1)生成用户密码认证文件
yum install -y httpd-tools
#安装工具
htpasswd -c /usr/local/nginx/passwd.db zhangsan
#生成用户密码认证文件(注意路径
chown nginx /usr/local/nginx/passwd.db
chmod 400 /usr/local/nginx/passwd.db
#修改属性和赋予执行权限
(2)修改主配置文件相应的目录,添加认证配置
vim /usr/local/nginx/conf/nginx.conf
#路径/apps/nginx/conf/nginx.conf
location / {
root html;
index index.html index.htm;
#添加认证配置
auth_basic "secret"; #设置密码提示框文字信息
auth_basic_user_file /usr/local/nginx/passwd.db;
}
(3)检查错误,重启服务进行访问测试
nginx -t
3.基于客户端访问控制
访问控制规则如下:
deny IP/IP段:拒绝某个IP或IP段的客户端访问。
allow IP/IP段:允许某个IP或IP段的客户端访问。
规则从上往下执行,如果匹配到则停止,不会再往下继续匹配。
(1)在主配置文件中添加控制规则
vim /usr/local/nginx/conf/nginx.conf
#注意路径/apps/nginx/conf/nginx.conf
location / {
root html;
index index.html index.htm;
auth_basic "secret";
auth_basic_user_file /usr/local/nginx/passwd.db;
# 添加控制规则
deny ip地址; #拒绝访问的客户端IP
allow all; #允许其他所有客户端访问
}
(2)重启服务
(3)被拒绝客户机访问
4.基于域名的nginx虚拟主机
(1)为虚拟主机提供域名和IP映射
echo "IP地址 www.666.com www.6668.com" >> /etc/hosts
(2)为虚拟主机准备网页文档
mkdir -p /var/www/html/666/
mkdir -p /var/www/html/6668/
echo "<h1>www.666.com</h1>" > /var/www/html/666/index.html
echo "<h1>www.6668.com</h1>" > /var/www/html/6668/index.html
(3)还原nginx主配置文件
-
cd /usr/local/nginx/conf #/apps/nginx/conf路径同理
-
cp nginx.conf.bak nginx.conf #还原主配置文件
(4)修改主配置文件
vim /usr/local/nginx/conf/nginx.conf
#/apps/nginx/conf/nginx.conf同理
server {
listen 80;
server_name www.6668.com; #设置域名
charset utf-8; #设置网页字符集
access_log logs/6668.com.access.log; #设置日志名
location / {
root /var/www/html/6668; #设置www.bxb.com的工作目录
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
server {
listen 80;
server_name www.666.com; #设置域名
charset utf-8; #设置网页字符集
access_log logs/666.com.access.log; #设置日志名
location / {
root /var/www/html/666; #设置www.bxb.com的工作目录
index index.html index.htm;
}
(5)重启nginx后进行访问测试
-
systemctl restart nginx.service
-
curl www.666.com
-
curl www.6668.com