Nginx
一、相关指令
1、启动指令
在/usr/local/nginx/sbin 目录下执行 ./nginx
2、关闭指令
在/usr/local/nginx/sbin 目录下执行 ./nginx -s stop
3、重新加载指令
在/usr/local/nginx/sbin 目录下执行 ./nginx -s reload
二、配置文件
1.全局块
从配置文件开始到 events 块之间的内容,主要会设置一些影响 nginx 服务器整体运行的配置指令,主要包括配置运行 Nginx 服务器的用户(组)、允许生成的 workerprocess 数,进程 PID 存放路径、日志存放路径和类型以及配置文件的引入等。
比如:worker_processes 1;
这是 Nginx 服务器并发处理服务的关键配置,worker_processes 值越大,可以支持的并发处理量也越多,但是会受到硬件、软件等设备的制约
2.events块
影响 Nginx 服务器与用户的网络连接
比如 worker_connections 1024; 支持的最大连接数为 1024
3.http块
1、http 全局块
http 全局块配置的指令包括文件引入、MIME-TYPE 定义、日志自定义、连接超时时间、单链接请求数上限等。
2、server 块
三、使用案例
1.反向代理一
实现效果:使用 nginx 反向代理,访问 www.123.com 直接跳转到tomcat主页 127.0.0.1:8080
1、在windows中的hosts中配置域名:47.104.248.219 www.123.com
2、在nginx配置文件的http块下的server块添加以下配置
server {
listen 80;
server_name 47.104.248.219;
location / {
proxy_pass http://127.0.0.1:8080;
}
}
2.反向代理二
实现效果:使用 nginx 反向代理,根据访问的路径跳转到不同端口的服务中nginx 监听端口为 9001,
访问 http://127.0.0.1:9001/edu/ 直接跳转到 127.0.0.1:8081
访问 http://127.0.0.1:9001/vod/ 直接跳转到 127.0.0.1:8082
1、在nginx配置文件的http块下的server块添加以下配置
server {
listen 9001;
server_name 47.104.248.219;
location ~ /edu/ {
proxy_pass http://127.0.0.1:8080;
}
location ~ /vod/ {
proxy_pass http://127.0.0.1:8081;
}
}
3.负载均衡
实现效果:访问http://47.104.248.219/edu/a.html,实现负载均衡,平均到8080和8081端口
1、配置文件
upstream myserver{
server 47.104.248.219:8080;
server 47.104.248.219:8081;
}
server {
listen 80;
server_name 47.104.248.219;
location / {
proxy_pass http://myserver;
}
}
负载均衡算法
1、轮询(默认):按照时间顺序逐一分配到不同的服务器
2、权重(weight):权重默认为1,权重越高分配概率越大
upstream server_pool{
server 47.104.248.219 weight=10;
server 47.104.248.220 weight=7;
}
3、ip_hash:每个请求按访问 ip 的 hash 结果分配,这样每个访客固定访问一个后端服务器,可以解决 session 的问题
upstream server_pool{
ip_hash
server 47.104.248.219:8080;
server 47.104.248.219:8081;
}
4、fair(第三方):按后端服务器的响应时间来分配请求,响应时间短的优先分配
upstream server_pool{
server 47.104.248.219:8080;
server 47.104.248.219:8081;
fair;
}
4.动静分离
配置文件:
server {
listen 80;
server_name 47.104.248.219;
location /www/ {
root /data/; #根目录
autoindex on; #显示文件列表
expires 3d; #文件缓存时间(通过对比服务器文件最后更新时间有没有变化,没有变化返回状态码304,有变化返回200)
}
}
四、高可用集群(keepalived+nginx)
1、安装keepalived:yum install keepalived -y
查看是否安装成功:rpm -q -a keepalived
2、修改keepalived配置文件
3、启动keepalived:systemctl start keepalived.service
4、启动ngxin
keepalived配置文件
#全局配置
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.17.129
smtp_connect_timeout 30
router_id LVS_DEVEL #ip或者主机名字
}
#检测脚本配置
vrrp_script chk_http_port {
script "/usr/local/src/nginx_check.sh"
interval 2 #(检测脚本执行的间隔,秒)
weight 2 #如果条件成立,设置当前服务器权重
}
vrrp_instance VI_1 {
state BACKUP # 备份服务器上将 MASTER 改为 BACKUP
interface ens33 //网卡
virtual_router_id 51 # 主、备机的 virtual_router_id 必须相同
priority 90 # 主、备机取不同的优先级,主机值较大,备份机值较小
advert_int 1 #每隔一秒发送一个心跳,确定服务器还活着
#校验权限方式
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.17.50 // VRRP H 虚拟地址
}
}
检测脚本
#!/bin/bash
A=`ps -C nginx –no-header |wc -l`
if [ $A -eq 0 ];then
/usr/local/nginx/sbin/nginx
sleep 2
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
killall keepalived
fi
fi
五、Nginx原理
1.master-workers机制
1、首先nginx服务在linux系统中会有多个进程,包括一个master进程和一个或多个worker进程
2、当客户端发请求给nginx时,由master发布任务,多个worker进行争抢任务
3、每个worker采用独立的进程,相互之间不影响,且不会涉及加锁的问题
2.master-workers机制优点
1、可以使用 nginx –s reload 热部署,因为多个worker之间互不影响
2、每个worker是独立进程,不会由于一个worker出现问题导致服务中断
3.注意事项
1、worker的设置个数和cpu的个数相等最为适宜
2、发送一个请求会占用worker的2个(访问静态字段)或者4个(反向代理)连接数
2个:客户端访问worker,worker返回给客户端
4个:客户端访问worker,worker访问动态服务,动态服务返回给worker,worker返回给客户端
3、一个master,4个worker,每个worker支持的最大连接数是1024,支持的最大并发数是多少
访问静态资源:4x1024/4
反向代理:4x1024/4