第八周作业

1. 总结 哨兵机制实现原理,并搭建主从哨兵集群。

哨兵sentine工作原理:
专门的Sentinel服务进程是用于监控redis集群中Master工作的状态,当Master主服务器发生故障的时候,可以实现Master和Slave的角色的自动切换,从而实现系统的高可用性
Sentinel是一个分布式系统,即需要在多个节点上各自同时运行一个sentinel进程,Sentienl 进程通过流言协议(gossip protocols)来接收关于Master是否下线状态,并使用投票协议(Agreement Protocols)来决定是否执行自动故障转移,并选择合适的Slave作为新的Master
每个Sentinel进程会向其它Sentinel、Master、Slave定时发送消息,来确认对方是否存活,如果发现某个节点在指定配置时间内未得到响应,则会认为此节点已离线,即为主观宕机Subjective Down,简称为 SDOWN
如果哨兵集群中的多数Sentinel进程认为Master存在SDOWN,共同利用is-master-down-by-addr 命令互相通知后,则认为客观宕机Objectively Down,简称 ODOWN
接下来利用投票算法,从所有slave节点中,选一台合适的slave将之提升为新Master节点,然后自动修改其它slave相关配置,指向新的master节点,最终实现故障转移failoverRedis Sentinel中的Sentinel节点个数应该为大于等于3且最好为奇数
客户端初始化时连接的是Sentine!节点集合,不再是具体的Redis节点,即 Sentinel只是配置中心不是代理。
Redis Sentinel 节点与普通 Redis 没有区别,要实现读写分离依赖于客户端程序

搭建哨兵集群:
1.先实现主从复制,修改从节点配置文件,永久生效:
    vim redis.conf 
		# replicaof <masterip> <masterport>
		replicaof 192.168.29.225 6379
		# masterauth <master-password>
		masterauth qwe123
2.所有节点配置文件中内容添加相同密码:
	bind 0.0.0.0
	# masterauth <master-password>
	masterauth "qwe123"
	# requirepass foobared
	requirepass "qwe123"
3.修改sentinel哨兵配置sentinel.conf配置文件
    vim sentinel.conf
	bind 0.0.0.0
	sentinel monitor mymaster 192.168.29.227 6379 2 //mymaster为集群名称,IP为redis主节点及对应端口,2为法定人数限制一般总数为>=3的奇数
	sentinel auth-pass mymaster qwe123 //集群中master的密码
4.启动哨兵服务
    systemctl start redis-sentinel.service


2. 总结redis cluster工作原理,并搭建集群实现扩缩容。

redis cluster 集群
Redis集群是一个由多个主从节点群组成的分布式服务集群,它具有复制、高可用和分片特性。Redis集群不需要sentinel哨兵也能完成节点移除和故障转移的功能。需要将每个节点设置成集群模式。redis集群的性能和高可用性均优于之前版本的哨兵模式,且集群配置非常简单。Redis 集群是一种分布式数据库方案,集群通过分片(sharding)来进行数据管理,并提供复制和故障转移功能。将数据划分为 16384 的 slots,每个节点负责一部分槽位。槽位的信息存储于每个节点中。​​​​​​​



redis cluster集群搭建:
1.修改每个节点reids.conf配置文件
	bind 0.0.0.0
	masterauth qwe123
	requirepass qwe123
	cluster-enabled yes
	cluster-config-file nodes-6379.conf
	cluster-require-full-coverage no
	启动服务观察是否开启16379的cluster端口,实际端口=redis port + 10000
2.创建集群
	[root@lgxtest1 redis]#redis-cli -a qwe123 --cluster create 192.168.29.225:6379  192.168.29.226:6379  192.168.29.227:6379  192.168.29.229:6379  192.168.29.230:6379  192.168.29.231:6379  --cluster-replicas 1
	
3.查看nodes-6379.conf中集群关系
		cat /var/lib/redis/nodes-6379.conf

集群扩容:
sed i.bak -e 's/bind 127.0.0.1/bind 0.0.0.0/' -e '/masterauth/a masterauth qwe123' -e '/# requirepass/a requirepass qwe123' -e '/# cluster-enabled yes/a cluster-enabled yes' -e'/# cluster-config-file nodes-6379.conf/a cluster-config-file nodes-6379.conf' -e '/cluster-require-full-coverage yes/c cluster-require-full-coverage no' /etc/redis.conf
1.新节点修改配置文件,满足加入集群条件
	vim /etc/redis.conf
	bind 0.0.0.0
	masterauth qwe123
	requirepass qwe123
	cluster-enabled yes
	cluster-config-file nodes-6379.conf
	cluster-require-full-coverage no
	启动服务观察是否开启16379的cluster端口,实际端口=redis port + 10000
2.添加master节点
	[12:39:50 root@lgxtest1 ~]#redis-cli -a qwe123 --cluster add-node 192.168.29.228:6379(新节点) 192.168.29.226:6379(集群任意节点)
3.在新节点上重新分配槽位
	[12:39:50 root@lgxtest1 ~]#redis-cli -a qwe123 --cluster reshard 192.168.29.226:6379(集群任意节点)
		输入新分配的槽位数=16384/master个数
		新节点master的ID
		all/done 槽位来源all自动在所有redis节点选择划分
	redis-cli -a qwe123 cluster nodes //查看节点
4.添加新的从节点
	redis-cli -a qwe123 --cluster add-node 192.168.29.232:6379 192.168.29.228:6379(集群任意节点) --cluster-slave --cluster-master-id fadc5e7ae496fdae5096c84e4926d4da19e8ecd6(主节点ID)
	


集群缩容:
1.执行槽位分配
[14:57:18 root@lgxtest1 ~]#redis-cli -a qwe123 --cluster reshard 192.168.29.225:6379(集群任意节点)
	将缩容节点槽位分多次执行缩容 4096/3  1356 1366 1356
	先输入缩容后还原目标地址节点ID
	再输入缩容节点地址节点ID
	done
2.删除多余主从节点
	[15:03:10 root@lgxtest1 ~]#redis-cli -a qwe123 --cluster del-node 192.168.29.225:6379(任意集群节点IP) 4225ea2702679615a6878c74298b9f35cf73726f(多余节点ID)


3. 总结 LVS的NAT和DR模型工作原理,并完成DR模型实战。

LVS集群类型属于
CIP:Client IP
VIP:VS外网的IP
DIP:VS内网的IP
RIP:real server IP
CIP —— VIP == DIP —— RIP
LVS工作模式:NAT模式、DR模式、TUNNEL模式、FULLNAT模式
LVS调度算法:
	静态算法:RR轮询,
			  WRR加权重轮询,
			  SH实现SESSION绑定,
			  DH目标地址哈希
	动态算法:LC长连接应用,
			  WLC默认调度算法,
			  SED初始连接高权重,只检查活动链接,
			  NQ第一轮均匀分配后续SED
			  LBLC:动态DH算法
			  LBLCR带复制功能的LBLC,解决LBLC负载不均衡问题

ipvsadm程序
 管理集群服务:增,删,改
	增、改:
	ipvsadm -A|E -t|u|f service-address [-s 算法,默认WLC]
		-t:TCP协议端口
		-u:UDP协议端口
		-f:firewall MARK
	例:
		ipvsadm -A -t 192.168.32.20:80 -s wrr
	
	删除:
	ipvsadm -D -t|u|f service-address
	清空:
	ipvsadm -C
	
 管理集群上的RS:增,删,改
	增、改:
	ipvsadm -a|e -t|u|f service-address -server-address [-g|i|m] [-w weight]   
		-g:gateway,dr类型,默认
		-i:ipip,tun类型
		-m:masquerade,nat类型
	 -w weight:权重
	删:
	ipvsadm -d -t|u|f service-address -server-address

查看:ipvsadm -Ln

保存规则到配置文件中:ipvsadm-save > /PATH/TO/IPVSADM_FILE

	NAT模式:本质是多目标IP的DNAT,通过将请求报文中的目标地址和目标端口修改为某挑出的RS的RIP和PORT实现转发
		(1)RIP和DIP在同一网络,且应使用私网地址;RS的网关要指向DIP
		(2)请求报文和响应报文都必须经由Director转发,Director易于成为系统瓶颈
		(3)支持端口映射,可修改请求报文的目标PORT
		(4)VS必须是Linux系统,RS可以是任意OS系统
	DR模式:直接路由,LVS默认模式,通过为请求报文重新封装一个MAC首部进行转发,源MAC是DIP所在的接口的MAC,目标MAC是某挑选出的RS的RIP所在接口的MAC地址;源IP/PORT,以及目标IP/PORT均保持不变
		(1)Director和各RS都配置有VIP
		(2)去报前段路由器将目标IP为VIP的请求报文发往Director
				在前端网关做静态绑定VIP和Director的MAC地址
				在RS上使用arptables工具
				在RS上修改内核参数以限制ARP通告及应答级别
		(3)RS的RIP可以使用私网地址,也可以是公网地址;RIP与DIP在同一IP网络;RIP的网关不能指向DIP,以确保响应报文不会经由Director
		(4)RS和Director要在同一物理网络
		(5)请求报文要经由Director,但响应报文不经由Director,而由RS直接发往Client
		(6)不支持端口映射(端口不能修改)
		(7)无需开启IP_porward
		(8)RS可使用大多数OS系统


搭建NAT模型:
	环境准备:
		客户端:
			192.168.32.10 GW:无 仅主机
		lvs: 
			eth0 仅主机 192.168.32.20 
			eth1 NAT 192.168.29.100
			开启net.ipv4.ip_forward
		两台RS:
			RS1:192.168.29.225 GW:192.168.29.100
			RS2:192.168.29.226 GW:192.168.29.100
		
	lvs服务器配置:
		1.安装ipvsadm程序
			yum -y install ipvsadm
		2.修改网卡配置文件 ifcfg-eth0 ifcfg-eth1
		vim ifcfg-eth0
			DEVICE=eth0
			NAME=eth0
			BOOTPROTO=static
			IPADDR=192.168.32.20
			PREFIX=24
			ONBOOT=yes
		vim ifcfg-eth1
			DEVICE=eth1
			NAME=eth1
			BOOTPROTO=static
			IPADDR=192.168.29.100
			PREFIX=24
			ONBOOT=yes
		3.开内核参数
			vim /etc/sysctl.conf
				net.ipv4.ip_forward=1
				
			sysctl -p //执行生效
		4.添加管理集群
			ipvsadm -A -t 192.168.32.20:80 -s wrr
		5.添加管理集群上的RS
			ipvsadm -a -t 192.168.32.20:80 -r 192.168.29.225:80 -m
			ipvsadm -a -t 192.168.32.20:80 -r 192.168.29.226:8080 -m
	
	RS服务器配置:
		1.修改网卡配置文件,网关指向GW 192.168.29.100
		vim ifcfg-eth0
			添加:GATEWAY=192.168.29.100
		2.安装http,页面写入数据启动服务
		
	客户端配置:
		1.修改网卡配置文件
		vim ifcfg-eth0
			DEVICE=eth0
			NAME=eth0
			BOOTPROTO=static
			IPADDR=192.168.32.10
			PREFIX=24
			ONBOOT=yes
		2.curl 192.168.32.20 //观察访问的内容验证




	
	
搭建DR模型:不支持端口映射(端口不能修改)
	环境准备:
		客户端:
		192.168.32.10 GW:192.168.32.30
		路由器:
		eth0:192.168.32.30
		eth1:192.168.29.230
		开启net.ipv4.ip_forward
		LVS:
		eth0:192.168.29.30 GW:192.168.29.230
		lo:VIP:192.168.29.232
		两台RS:
		RS1:192.168.29.225 GW:192.168.29.230 lo:VIP:192.168.29.232
		RS2:192.168.29.226 GW:192.168.29.230 lo:VIP:192.168.29.232
		
	lvs服务器配置:
		1.安装ipvsadm程序
			yum -y install ipvsadm
		2.修改网卡配置文件 ifcfg-eth0 添加网关
		vim ifcfg-eth0
			DEVICE=eth0
			NAME=eth0
			BOOTPROTO=static
			IPADDR=192.168.32.20
			GATEWAY=192.168.29.230
			PREFIX=24
			ONBOOT=yes

		3.添加管理集群
			ipvsadm -A -t 192.168.29.232:80 -s rr
		4.添加管理集群上的RS
			ipvsadm -a -t 192.168.29.232:80 -r 192.168.29.225:80 -g
			ipvsadm -a -t 192.168.29.232:80 -r 192.168.29.226:80 -g
			
			
	路由器配置:
		1.修改网卡配置文件
		vim ifcfg-eth0
			DEVICE=eth0
			NAME=eth0
			BOOTPROTO=static
			IPADDR=192.168.32.30
			PREFIX=24
			ONBOOT=yes
		vim ifcfg-eth1
			DEVICE=eth1
			NAME=eth1
			BOOTPROTO=static
			IPADDR=192.168.29.230
			PREFIX=24
			ONBOOT=yes
		2.开内核参数
			vim /etc/sysctl.conf
				net.ipv4.ip_forward=1
				
			sysctl -p //执行生效
	
	LVS和两台RS配置:
		echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore 
		echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore 
		echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce 
		echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce 
    	ip a a 192.168.29.232/32 dev lo label lo:1
	
	客户端配置:
		1.修改网卡配置文件
		vim ifcfg-eth0
			DEVICE=eth0
			NAME=eth0
			BOOTPROTO=static
			IPADDR=192.168.32.10
			PREFIX=24
			ONBOOT=yes
		2.curl 192.168.29.232 //观察访问的内容验证


4. 总结 http协议的通信过程详解

1.客户端向服务器发送HTTP请求,请求包括请求方法、URL、协议版本、请求头部等信息。

2.服务器接收到请求后,解析请求头部和URL,根据请求头部中的信息进行相应的处理,并返回响应信息。

3.客户端接收到服务器返回的响应信息,根据响应头部中的信息进行相应的处理,如获取响应正文、判断响应状态等。

4.如果需要,客户端会继续向服务器发送请求,服务器也会继续返回响应信息,直到完成整个HTTP通信过程。


5. 总结  网络IO模型和nginx架构

网络I/O模型:
阻塞式I/O模型、非阻塞式I/O模型、I/O多路复用模型、信号驱动I/O模型和异步I/O模型。

网络I/O模型的特点和适用场景:
1.阻塞式I/O模型:最简单的一种模型,但性能较差。适用于并发量较小的应用场景。
2.非阻塞式I/O模型:通过非阻塞操作提高了性能。适用于并发量较小的应用场景。
3.I/O多路复用模型:可以同时处理多个I/O通道,提高了系统的并发性能。适用于并发量较大的应用场景。
4.信号驱动I/O模型:可以异步进行I/O操作。适用于并发量较大的应用场景。
5.异步I/O模型:可以实现真正的并发操作。适用于并发量非常大的应用场景


ngixn结构和进程
nginx的进程模型是一个master进程加上多个worker进程的模式。
master进程负责读取配置文件、启动worker进程、管理worker进程等工作;
worker进程则负责处理客户端请求,包括接收请求、解析请求、处理请求、返回响应等工作。
在nginx的进程模型中,每个worker进程都是独立的,它们之间不会相互干扰,也不会共享任何资源。


6. 完成nginx编译安装脚本

#!/bin/bash
SRC_DIR=/root
NGINX_URL=http://nginx.org/download/
NGINX_FILE=nginx-1.24.0
TAR=.tar.gz
NGINX_INSTALL_DIR=/apps/nginx
CPUS=`lscpu |awk '/^CPU\(s\)/{print $2}'`

. /etc/os-release

color () {
    RES_COL=60
    MOVE_TO_COL="echo -en \\033[${RES_COL}G"
    SETCOLOR_SUCCESS="echo -en \\033[1;32m"
    SETCOLOR_FAILURE="echo -en \\033[1;31m"
    SETCOLOR_WARNING="echo -en \\033[1;33m"
    SETCOLOR_NORMAL="echo -en \E[0m"
    echo -n "$1" && $MOVE_TO_COL
    echo -n "["
    if [ $2 = "success" -o $2 = "0" ] ;then
        ${SETCOLOR_SUCCESS}
        echo -n $"  OK  "    
    elif [ $2 = "failure" -o $2 = "1"  ] ;then
        ${SETCOLOR_FAILURE}
        echo -n $"FAILED"
    else
        ${SETCOLOR_WARNING}
        echo -n $"WARNING"
    fi
    echo 
}

os_version () {
   awk -F'"' '/^VERSION_ID/{print $2}' /etc/os-release
}
    [ -e ${NGINX_INSTALL_DIR} ] && { color "nginx 已安装,请卸载后再安装" 1; exit; }
    cd  ${SRC_DIR}
    if [  -e ${NGINX_FILE}${TAR} ];then
        color "相关文件已准备就绪" 0
        wget ${NGINX_URL}${NGINX_FILE}${TAR}
        [ $? -ne 0 ] && { color "下载 ${NGINX_FILE}${TAR}文件失败" 1; exit; }
    fi
}

install () {
    color "开始安装 nginx" 0
    if id nginx  &> /dev/null;then
        color "nginx 用户已存在" 1
    else
    color "开始安装 nginx 依赖包" 0
    if [ $ID == "centos" ] ;then
        else
            color '不支持此系统!'  1
            exit
        fi
    elif [ $ID == "rocky"  ];then
    else
        apt update &> /dev/null
        apt -y install make gcc libpcre3 libpcre3-dev openssl libssl-dev zlib1g-dev &> /dev/null
    fi
    cd $SRC_DIR
    tar xf ${NGINX_FILE}${TAR}
    NGINX_DIR=`echo ${NGINX_FILE}${TAR}| sed -nr 's/^(.*[0-9]).*/\1/p'`

    if [ $ID = 'rocky' -o $ID = "centos" ];then
        yum -y install gcc pcre-devel openssl-devel zlib-devel
    else
        apt update &> /dev/null
        apt -y install make gcc libpcre3 libpcre3-dev openssl libssl-dev zlib1g-dev &> /dev/null
    fi

    cd $SRC_DIR
    tar xf ${NGINX_FILE}${TAR}
    NGINX_DIR=`echo ${NGINX_FILE}${TAR}| sed -nr 's/^(.*[0-9]).*/\1/p'`
    cd ${NGINX_DIR}
    ./configure --prefix=${NGINX_INSTALL_DIR} --user=nginx --group=nginx --with-http_ssl_module --with-
http_v2_module --with-http_realip_module --with-http_stub_status_module --with-http_gzip_static_module --with-pcre --with-stream --with-stream_ssl_module --with-stream_realip_module    make -j $CPUS && make install
    [ $? -eq 0 ] && color "nginx 编译安装成功" 0 ||  { color "nginx 编译安装失败,退出!" 1 ;exit; }
    echo "PATH=${NGINX_INSTALL_DIR}/sbin:${PATH}" > /etc/profile.d/nginx.sh
    cat > /lib/systemd/system/nginx.service <<EOF
[Unit]
Description=The nginx HTTP and reverse proxy server
After=network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
PIDFile=${NGINX_INSTALL_DIR}/logs/nginx.pid
ExecStartPre=/bin/rm -f ${NGINX_INSTALL_DIR}/logs/nginx.pid
ExecStartPre=${NGINX_INSTALL_DIR}/sbin/nginx -t
ExecStart=${NGINX_INSTALL_DIR}/sbin/nginx
ExecReload=/bin/kill -s HUP \$MAINPID
KillSignal=SIGQUIT
TimeoutStopSec=5
KillMode=process
PrivateTmp=true
LimitNOFILE=100000

[Install]
WantedBy=multi-user.target
EOF
    systemctl daemon-reload
    systemctl enable --now nginx &> /dev/null
    systemctl is-active nginx &> /dev/null ||  { color "nginx 启动失败,退出!" 1 ; exit; }
    color "nginx 安装完成" 0
}

check
install


7. 总结nginx核心配置,并实现nginx多虚拟主机

Nginx核心配置

Nginx的配置文件的组成部分:
1.主配置文件:nginx.conf
2.子配置文件: include conf.d/*.conf
3.fastcgi, uwsgi,scgi 等协议相关的配置文件
4.mime.types:支持的mime类型,MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型,MIME消息能包含文本、图像、音频、视频以及其他应用程序专用的数据,是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式。MIME参考文档https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Basics_of_HTTP/MIME_Types



Nginx配置文件格式说明:
配置文件由指令与指令块构成
每条指令以;分号结尾,指令与值之间以空格符号分隔
可以将多条指令放在同一行,用分号分隔即可,但可读性差,不推荐
指令块以{ }大括号将多条指令组织在一起,且可以嵌套指令块
include语句允许组合多个配置文件以提升可维护性
使用#符号添加注释,提高可读性
使用$符号使用变量
部分指令的参数支持正则表达式



Nginx主配置文件的配置指令方式:
directive value [value2 ...];
注意:
(1) 指令必须以分号结尾
(2) 支持使用配置变量
内建变量:由Nginx模块引入,可直接引用
自定义变量:由用户使用set命令定义,格式: set variable_name value;
引用变量:$variable_name



主配置文件nginx.conf结构:四部分
main block:主配置段,即全局配置段,对http,mail都有效

#事件驱动相关的配置
event {
			...
}
#http/https 协议相关配置段
http {
				...
}
#默认配置文件不包括下面两个块
#mail 协议相关配置段
mail {
				...
}
#stream 服务器相关配置段
stream {
				...
}




Nginx主配置文件nginx.conf格式说明
#全局配置端,对全局生效,主要设置nginx的启动用户/组,启动的工作进程数量,工作模式,Nginx的PID
路径,日志路径等。
user nginx nginx;
worker_processes 1; #启动工作进程数数量
events { #events设置快,主要影响nginx服务器与用户的网络连接,比如是否允许同时接受多个网络连
接,使用哪种事件驱动模型处理请求,每个工作进程可以同时支持的最大连接数,是否开启对多工作进程下的
网络连接进行序列化等。
				worker_connections 1024; #设置单个nginx工作进程可以接受的最大并发,作为web服务器
的时候最大并发数为worker_connections * worker_processes,作为反向代理的时候为
(worker_connections * worker_processes)/2
}
http { #http块是Nginx服务器配置中的重要部分,缓存、代理和日志格式定义等绝大多数功能和第三方模
块都可以在这设置,http块可以包含多个server块,而一个server块中又可以包含多个location块,
server块可以配置文件引入、MIME-Type定义、日志自定义、是否启用sendfile、连接超时时间和单个链
接的请求上限等。
				include mime.types;
				default_type application/octet-stream;
				sendfile on; #作为web服务器的时候打开sendfile加快静态文件传输,指定是否使用
sendfile系统调用来传输文件,sendfile系统调用在两个文件描述符之间直接传递数据(完全在内核中操
作),从而避免了数据在内核缓冲区和用户缓冲区之间的拷贝,操作效率很高,被称之为零拷贝,硬盘 >>
kernel buffer (快速拷贝到kernelsocket buffer) >>协议栈。
keepalive_timeout 65; #长连接超时时间,单位是秒
	server { #设置一个虚拟机主机,可以包含自己的全局快,同时也可以包含多个location模块。比如
本虚拟机监听的端口、本虚拟机的名称和IP配置,多个server 可以使用一个端口,比如都使用80端口提供
web服务、
			listen 80; #配置server监听的端口
			server_name localhost; #本server的名称,当访问此名称的时候nginx会调用当前
serevr内部的配置进程匹配。
			location / { #location其实是server的一个指令,为nginx服务器提供比较多而且灵活的指
令,都是在location中体现的,主要是基于nginx接受到的请求字符串,对用户请求的UIL进行匹配,并对特
定的指令进行处理,包括地址重定向、数据缓存和应答控制等功能都是在这部分实现,另外很多第三方模块的
配置也是在location模块中配置。
			root html; #相当于默认页面的目录名称,默认是安装目录的相对路径,可以使用绝对路
径配置。
			index index.html index.htm; #默认的页面文件名称
}
		error_page 500 502 503 504 /50x.html; #错误页面的文件名称
		location = /50x.html { #location处理对应的不同错误码的页面定义到/50x.html,这个
跟对应其server中定义的目录下。
		root html; #定义默认页面所在的目录
			}
}
#和邮件相关的配置
#		mail {
#					 ...
# 				} mail 协议相关配置段
#tcp代理配置,1.9版本以上支持
#		stream {
#						 ...
# 					} stream 服务器相关配置段
#导入其他路径的配置文件
#		include /apps/nginx/conf.d/*.conf;
}


实现nginx多虚拟主机

1.创建指定子配置文件目录
    mkdir /apps/nginx/conf.d/
2.创建创建虚拟多主机目录,分别在对应目录中创建页面
    mkdir /data/{pc,mobile}
    echo "hello2" > /data/pc/index.html
    echo "hello1" > /data/mobile/index.html
3.主配置文件中添加子配置文件指定路径
    include /apps/nginx/conf.d/*.conf;
4.创建对应虚拟主机子配置文件
    vim pc.conf
    server {
         server_name www.liguox.org;
         location / {
          root /data/pc;

         }
      }

     vim mobile.conf
    server {
         server_name m.liguox.org;
         location / {
          root /data/mobile;

         }
      }
5.重载nginx配置文件
    nginx -s reload
6.配置DNS,网站访问域名查看页面显示内容
    


8. 总结nginx日志格式定制  

1.修改主配置文件,添加日志格式test1命令
   log_format test1 '$remote_addr [$time_local] "$request"'
2.多虚拟主机对应子配置文件中添加启用test1日志格式命令
    access_log /apps/nginx/logs/access-m.log test1;
    access_log /apps/nginx/logs/access-www.log test1;
3.检查配置文件语法
    nginx -t
4.重载配置文件    
    nginx -s reload

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值