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;
        }
}

Nginx

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
上一篇:nginx并发数调优


下一篇:面试官:你给我说一下线程池里面的几个锁吧。