cnzz 网站域名怎么填,华与华营销策划公司,曼联对利物浦新闻,做电影网站还是国外服务器源码包安装NGINX A#xff0c;搭建Web Server#xff0c;任意HTML页面#xff0c;其8080端口提供Web访问服务#xff0c;截图成功访问http(s)#xff1a;//[Server1]:8080并且回显Web页面。保留Server1#xff0c;但是不允许直接访问Server 1#xff0c;再部署1套NGINX …
源码包安装NGINX A搭建Web Server任意HTML页面其8080端口提供Web访问服务截图成功访问http(s)//[Server1]:8080并且回显Web页面。保留Server1但是不允许直接访问Server 1再部署1套NGINX B利用其实现反向代理功能要求有且仅有访问http://elite.chaitin.com 可以访问到Web Server1的8080服务。截图并详细说明NGINX上配置/参数加强提升题目假设再加1套Web Server 2其8080端口提供与Server 1相同服务如何配置NGINX A实现访问http://elite.chaitin.com 的请求可以被负载分发到Server1或者Server2在上文题目2基础之上增加节点NGINX B如何配置实现高可用demo演示当NGINX A故障时流量自动切换到NGINX B客户端访问几乎无感知。详细说明VRRP协议在本题所述场景下的应用。加强提升题目在上文题目3基础之上配置和验证NGINX支持哪些负载均衡算法及其效果并结合NGINX配置参数详细说明不同负载均衡算法工作原理。加强提升题目在上文题目3基础之上配置和验证主动和被动两种健康检查方式及其效果并结合NGINX配置参数详细说明不同健康检查方式区别和工作原理。 文章目录 要求1 nginx的部署要求2 nginx反向代理要求3 nginx负载均衡要求4 nginx高可用要求5 负载均衡算法要求6 健康检查 实验环境
Ubuntu 20.04 64bit
实验前关闭防火墙和selinuxserver18.140.24.100server28.140.240.19
要求1 nginx的部署
要求1. 源码包安装NGINX A搭建Web Server任意HTML页面其18080端口提供Web访问服务截图成功访问http(s)//[Server1]:18080并且回显Web页面。
注因为服务器的8080端口没有开放到外网访问只开放了18080-18086的端口到外网所以我将题目中的8080端口改成了18080端口来做实验端口的改变不会影响实验的效果 获取nginx源码包
wget https://nginx.org/download/nginx-1.22.1.tar.gz安装源码编译环境
yum install gcc gcc-c pcre pcre-devel openssl openssl-devel -y将此目录设置为nginx源码存放目录
/usr/local/src将源码包移动到该目录下
[rootcentos ~]# mv nginx-1.22.1.tar.gz /usr/local/src/将源码包文件解压缩
[rootcentos ~]# cd /usr/local/src/
[rootcentos src]# tar xf nginx-1.22.1.tar.gz 编译参数详解
[rootcentos nginx-1.22.1]# ./configure --help--prefix 指向安装目录
--sbin-path 指向(执行)程序文件(nginx)
--conf-path 指向配置文件(nginx.conf)
--pid-path 指向 pid 文件( nginx.pid )--lock-path 指向 lock 文件( nginx.lock)(安装文件锁定防止安装文件被别人利用
或自己误操作。)
--user 指定程序运行时的非特权用户
--group 指定程序运行时的非特权用户组
--builddir 指向编译目录
--with-rtsig_module 启用rtsig 模块支持(实时信号)--with-select_module 启用 select 模块支持(一种轮询模式,不推荐在高载环境下使用)
禁用:--without-select _module
--with-poll _module 启用 poll 模块支持(功能与select相同与select特性相同为
种轮询模式,不推荐在高载环境下使用)
--with-file-aio 启用file aio 支持(一种 APL文件传输格式
--with-ipv6 启用ipv6 支持
--with-file-aio 启用file aio 支持(一种 APL文件传输格式--with-ipv6 启用ipv6支持
--with-http_ssl_module 启用 ngx http_ssl module 支持(使支持https 请求需已安装
openssl)
--with-http realip_module 启用 ngx http_realip_module 支持 这个模块允许从请求标
头更改客户端的IP 地址值默认为关 )
--with-http addition module 启用 ngx http addition module 支持(作为一个输出过滤器支持不完全缓冲分部分响应请求 )
--with-http xslt module 启用 ngx http_xslt _module 支持(过滤转换 XML请求)
--with-http image filter module 启用 ngx http image filter module 支持 ( 传输JPEG/GIF/PNG 图片的一个过滤器)(默认为不启用。gd 库要用到) --with-http_geoip_module 启用 ngx_http_geoip_module 支持(该模块创建基于与 MaxMind GeoIP 二进制文件相配的客户端 IP 地址的 ngx_http_geoip_module 变量) --with-http_sub_module 启用 ngx_http_sub_module 支持(允许用一些其他文本替换 nginx 响应中的一些文本)
--with-http_dav_module 启用ngx_http_dav_module支持(增加PUT,DELETE,MKCOL: 创建集合,COPY 和 MOVE 方法)默认情况下为关闭需编译开启
--with-http_flv_module 启用 ngx_http_flv_module 支持(提供寻求内存使用基于时间的 偏移量文件)
--with-http_gzip_static_module 启用 ngx_http_gzip_static_module 支持(在线实时压 缩输出数据流)
--with-http_random_index_module 启用 ngx_http_random_index_module 支持(从 目录中随机挑选一个目录索引)
--with-http_secure_link_module 启用 ngx_http_secure_link_module 支持(计算和检 查要求所需的安全链接网址)
--with-http_degradation_module 启用 ngx_http_degradation_module 支持(允许在 内存不足的情况下返回 204 或 444 码)
--with-http_stub_status_module 启用ngx_http_stub_status_module支持(获取nginx 自上次启动以来的工作状态)
--without-http_auth_basic_module 禁用 ngx_http_auth_basic_module(该模块是可以 使用用户名和密码基于 http 基本认证方法来保护你的站点或其部分内容) --without-http_autoindex_module 禁用 disable ngx_http_autoindex_module 支持 (该模块用于自动生成目录列表只在 ngx_http_index_module 模块未找到索引文件时发 出请求。)
--without-http_geo_module 禁用 ngx_http_geo_module 支持(创建一些变量其值依 赖于客户端的 IP 地址)
--without-http_map_module 禁用 ngx_http_map_module 支持(使用任意的键/值对设 置配置变量)
--without-http_split_clients_module 禁用 ngx_http_split_clients_module 支持(该模 块用来基于某些条件划分用户。条件如:ip 地址、报头、cookies 等等) --without-http_referer_module 禁用 disable ngx_http_referer_module 支持(该模块 用来过滤请求拒绝报头中 Referer 值不正确的请求)
--http-proxy-temp-path 设定 http 代理临时文件路径
--http-fastcgi-temp-path 设定 http fastcgi 临时文件路径 --http-uwsgi-temp-path 设定 http uwsgi 临时文件路径
--http-scgi-temp-path 设定 http scgi 临时文件路径
-without-http 禁用 http server 功能
--without-http-cache 禁用 http cache 功能
--with-mail 启用 POP3/IMAP4/SMTP 代理模块支持
--with-mail_ssl_module 启用 ngx_mail_ssl_module 支持通用配置选项
--prefixpath 指定 Nginx 的安装路径所有其他的路径都要依赖于该选项
--sbin-pathpath 指定 Nginx 二进制文件的路径。如果没有指定那么这 个路径将依赖于--prefix 选项
--conf-pathpath 指定 Nginx 的配置文件的路径如果在命令行没有指定 配置文件那么将会通过这里指定路径。
--error-log-pathpath 文件除非有其它的配置。
--pid-pathpath /var/run 下
--lock-pathpath 共享存储器互斥锁文件的路径
--useruser worker 进程运行的用户
--groupgroup worker 进程运行的组
--with-file-aio. 为 FreeBSD4.3 和 linux 2.6.22 系统启用异步 I/O
--with-debug 这个选项用于启用调试日志在生产环境的系统中不推荐使用检查安装了nginx后是否有这个用户
[rootcentos nginx-1.22.1]# id nginx
uid997(nginx) gid995(nginx) 组995(nginx)源码编译安装nginx
[rootcentos nginx-1.22.1]# ./configure \--usernginx \--groupnginx \--prefix/usr/local/nginx \--with-http_stub_status_module \--with-http_ssl_module
[rootcentos nginx-1.22.1]# make make install 给nginx写启动脚本
[rootcentos sbin]# pwd
/usr/local/nginx/sbin
[rootcentos sbin]# vim /usr/lib/systemd/system/nginx.service[Unit]
Descriptionnginx - high performance web server
Documentationhttp://nginx.org/en/docs/
Afternetwork-online.target remote-fs.target nss-lookup.target
Wantsnetwork-online.target[Service]
Typeforking
PIDFile/usr/local/nginx/logs/nginx.pid
ExecStart/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
ExecReload/usr/local/nginx/sbin/nginx -s reload
ExecStop/usr/local/nginx/sbin/nginx -s stop[Install]
WantedBymulti-user.target
启动报错及原因排查 在这个报错信息里面发现80端口被占用所以我修改了nginx默认的配置文件将监听端口设置为81 location匹配优先级
1.精确匹配
2.字符串匹配不做正则匹配检查^~
3.正则匹配
4.字符串匹配如果有正则优先正则
5.所有都匹配不到默认匹配 /加载并启动配置文件
[rootcentos sbin]# systemctl daemon-reload #加载配置文件
[rootcentos sbin]# systemctl start nginx #启动nginx查看服务器IP 根据题目一的要求将配置文件改为监听18080端口访问页面的路径改为/var/www/html server {listen 18080; #监听18080端口server_name elite.chaitin.com; #指定服务器的域名location / { #/表示匹配任意请求路径root /var/www/html; #指定响应目录index index.html index.htm; #访问该目录下的 index.html 或 index.htm 文件服务器会首先查找 index.html 文件如果找不到则查找 index.htm 文件。} 写一个访问页面并重启nginx服务
rootiZ2zei3ltzorcuiiynrseqZ:~# echo Welcome to Chaitin! /var/www/html/index.html
rootiZ2zei3ltzorcuiiynrseqZ:~# systemctl daemon-reload
rootiZ2zei3ltzorcuiiynrseqZ:~# systemctl restart nginx访问成功
要求2 nginx反向代理
要求2. 保留Server1但是不允许直接访问Server 1再部署1套NGINX B利用其实现反向代理功能要求有且仅有访问http://elite.chaitin.com 可以访问到Web Server1的8080服务。截图并详细说明NGINX上配置/参数
步骤一 另开一台server2 服务器 8.140.240.19直接安装nginx
rootiZ2zei3ltzorcuiiynrsemZ~# apt-get install nginx将原配置文件备份避免错误修改配置后不能找回原有文件
rootiZ2zei3ltzorcuiiynrsemZ:cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak因为我的服务器做了限制两台服务器之间不能互通所以我们使用两台服务器的内网地址 server2 server1 server2测试与server1的内网连通信 步骤二 server2的nginx配置文件 server {listen 80; #监听端口server_name _; #所有不匹配elite.chaitin.com的请求全都返回404location / {return 404;}}
#访问elite.chaitin.com的请求都会转发到http://172.28.253.102:18080 并将结果返回给客户端server{listen 80;server_name elite.chaitin.com;location / {proxy_pass http://172.28.253.102:18080;}}写dns解析
rootiZ2zei3ltzorcuiiynrsemZ:~# vim /etc/hosts
172.28.253.107 elite.chaitin.com测试访问 server2上访问 访问server2的IP只能看到server2的nginx默认页面看不到server1的页面
要求3 nginx负载均衡
要求3.假设再加1套Web Server 2其8080端口提供与Server 1相同服务如何配置NGINX A实现访问http://elite.chaitin.com 的请求可以被负载分发到Server1或者Server2 这里我用自己的本地虚拟机做实验
server1192.168.15.133server2192.168.15.138负载均衡调度器192.168.15.140
所有服务器都关闭防火墙和selinux 步骤一server1和server2基础配置 每台服务器上都安装nginx服务 server1和server2都做 server1和server2的配置相同 server {listen 8080;server_name elite.chaitin.com;root /chaitin/www; #自己定义的访问页面# Load configuration files for the default server block.include /etc/nginx/default.d/*.conf;error_page 404 /404.html;location /404.html {}error_page 500 502 503 504 /50x.html;location /50x.html {}} 加载启动配置文件创建web页面拷贝给server2 域名解析 测试访问页面 步骤二负载均衡调度器配置 upstream server_pools { #接收来自server中的请求server 192.168.15.138:8080 weight1; #两个服务器的权重都一样会把所有请求相对均匀的分配到两台服务器上server 192.168.15.133:8080 weight1;}server{listen 8080;server_name _; #所有不是请求elite.chaitin.com域名的8080服务都会被禁止并返回403的状态码location / {return 403;}}server{listen 8080;server_name elite.chaitin.com;location / {proxy_pass http://server_pools; #访问8080端口且以elite.chaitin.com为域名的请求会把请求转发到server_pools的负载均衡池}}
} 域名解析 启动nginx并访问测试 请求能够被均匀的分配到两台服务器上
要求4 nginx高可用
要求4. 在上文题目2基础之上增加节点NGINX B如何配置实现高可用demo演示当NGINX A故障时流量自动切换到NGINX B客户端访问几乎无感知。详细说明VRRP协议在本题所述场景下的应用。 server1和server2安装keepalived
[rootserver1 ~]# yum install keepalivedserver1和server2写脚本文件
[rootserver1 yum.repos.d]# vi /usr/local/src/nginx_check.sh#!/bin/bash
# 检查是否开启nginx
Aps -C nginx --no-header |wc -l
if [ $A -eq 0 ];thensystemctl stop keepalived
fi server1
[rootserver1 ~]# vim /etc/keepalived/keepalived.confacassenfirewall.locfailoverfirewall.locsysadminfirewall.loc}notification_email_from Alexandre.Cassenfirewall.locsmtp_server 192.168.15.143 #当前keepalived所在的主机ipsmtp_connect_timeout 30router_id 192.168.15.143 #当前keepalived所在的主机ipvrrp_skip_check_adv_addrvrrp_strictvrrp_garp_interval 0vrrp_gna_interval 0
}
vrrp_script chk_http_port{script /usr/local/src/nginx_check.shinterval 2 #每隔2s检测一次脚本weight -20 #权重减20
}vrrp_instance VI_1 {state MASTER #将当前主机设置为master节点interface eth0 #主机使用的网卡
virtual_router_id 51priority 100 #优先级主节点的优先级更大advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.15.66 #虚拟ip必须和master、backup处于同一网段}
}
server2
[rootserver2 ~]# vim /etc/keepalived/keepalived.conf vrrp_gna_interval 0
}
vrrp_script chk_http_port{script /usr/local/src/nginx_check.shinterval 2 #每隔2s检测一次脚本weight -20 #权重减20
}vrrp_instance VI_1 {state BACKUP#将当前主机设置为master节点interface eth0 #主机使用的网卡virtual_router_id 51priority 90 #优先级主节点的优先级更大advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.15.66 #虚拟ip必须和master、backup处于同一网段}
}
都启动keepalived服务
[rootserver2 ~]# vim /etc/keepalived/keepalived.conf测试 将server1的服务关闭
systemctl stop nginx要求5 负载均衡算法
要求5. 加强提升题目在上文题目3基础之上配置和验证NGINX支持哪些负载均衡算法及其效果并结合NGINX配置参数详细说明不同负载均衡算法工作原理。
轮询算法 轮询Round Robin这是默认的负载均衡算法。Nginx将每个新的客户端请求按照服务器列表的顺序分发依次轮流选择下一个服务器。这是最简单的负载均衡算法适用于后端服务器性能相近的情况。
加权轮询Weighted Round Robin在这种算法中每个后端服务器都分配了一个权重值高权重的服务器会收到更多的请求。这对于在后端服务器之间分配不同的负载容量非常有用以确保性能更好的服务器获得更多的请求。 upstream server_pools {server 192.168.15.138:8080 weight1; #两台服务器响应请求的方式为1:2server 192.168.15.133:8080 weight2;}server{listen 8080;server_name _;location / {return 403;}}server{listen 8080;server_name elite.chaitin.com;location / {proxy_pass http://server_pools;}}
} 重启服务并测试
[rootlvs ~]# vim /etc/nginx/nginx.conf
[rootlvs ~]# systemctl daemon-reload
[rootlvs ~]# systemctl restart nginx 源地址哈希法 IP哈希IP HashNginx使用客户端的IP地址来计算哈希值并将请求分发到具有相同哈希值的后端服务器。这个算法确保相同IP的客户端始终访问相同的后端服务器适用于需要会话保持的情况如Web应用程序的会话管理。
在负载均衡服务器上配置
upstream server_pools {hash $remote_addr consistent; #使用客户端的IP地址进行哈希计算#并且使用consistent关键字确保负载均衡在后端服务器发生变化时尽量减少数据迁移。server 192.168.15.138:8080;server 192.168.15.133:8080;}server{listen 8080;server_name _;location / {return 403;}}server{listen 8080;server_name elite.chaitin.com;location / {proxy_pass http://server_pools;}}
} 重启nginx服务
[rootlvs ~]# systemctl daemon-reload
[rootlvs ~]# systemctl restart nginx
另开一台客户端主机 写域名解析文件
[rootlocalhost ~]# vi /etc/hosts
192.168.15.140 elite.chaitin.com #访问的是负载均衡服务器
测试 可以发现客户端请求的一直都是同一个服务器 最小连接数算法 最少连接Least ConnectionsNginx跟踪每个后端服务器的活动连接数然后将请求发送到具有最少活动连接数的服务器。这有助于分配负载并确保请求发送到连接较少的服务器从而实现负载均衡。 upstream server_pools {least_conn; #使用最小连接数算法server 192.168.15.138:8080;server 192.168.15.133:8080;}server{listen 8080;server_name _;location / {return 403;}}server{listen 8080;server_name elite.chaitin.com;location / {proxy_pass http://server_pools;}}
} 重启nginx服务 因为测试需要用到多台客户端但我的服务器没有那么多所以就不测试啦
要求6 健康检查
要求6. 加强提升题目在上文题目3基础之上配置和验证主动和被动两种健康检查方式及其效果并结合NGINX配置参数详细说明不同健康检查方式区别和工作原理。 主动健康检查 原理 主动健康检查是通过Keepalived自身执行的周期性检查来确定服务器的状态。Keepalived会定期发送请求通常是ICMP ping或TCP连接请求到服务器并根据服务器的响应来确定其是否处于健康状态。
配置 主动健康检查需要在Keepalived配置文件中定义一个或多个健康检查脚本这些脚本将定期运行以检查服务器的健康状态。在配置文件中使用track_script部分来定义这些检查脚本
track_script {chk_script {script /etc/keepalived/check_script.sh # 健康检查脚本的路径interval 2 # 检查间隔时间单位秒weight 2 # 权重}
}
脚本文件
[rootserver1 ~]# vim /etc/check_script.sh#!/bin/bash# 定义要检查的目标URL
TARGET_URLhttp://localhost:80# 发送HTTP请求并获取响应
HTTP_RESPONSE$(curl -s -o /dev/null -w %{http_code} $TARGET_URL)# 检查HTTP响应状态码是否为200正常
if [ $HTTP_RESPONSE 200 ]; then# 返回0表示健康exit 0
else# 返回1表示不健康exit 1
fi
被动健康检查 原理 被动健康检查是通过监听服务器上的服务来确定服务器的状态。Keepalived将侦听服务器上的服务端口如果无法连接到该端口将认为服务器处于不健康状态。
配置 被动健康检查不需要特别的配置只需确保Keepalived配置文件中的虚拟IP与服务器上的服务端口一致即可。