脚本宝典收集整理的这篇文章主要介绍了Nginx入门,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/pop3/SMTP服务。
其特点是占有内存少,并发能力强。
在客户端(浏览器)配置代理服务器,通过代理服务器进行互联网访问。
代理对象是客户端,不知道服务端是谁。
客户端不需要任何配置就能访问,只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器,获取数据后再返回给客户端。对外就一个服务器,暴露的是反向代理服务器地址,隐藏了真实服务器IP地址。
代理对象是服务端,不知道客户端是谁。
客户端发送多个请求到服务器,服务器处理请求,有些可能要访问数据库,服务器处理完毕后再将结果返回客户端。
这种架构模式单一,适合并发请求少的情况,但并发量大的时候如何解决?
首先可能想到升级服务器配置,但硬件的性能提升不能满足日益增长的需求,此时想到服务器集群,增加服务器数量,然后将原先请求单个服务器的情况改为将请求分发到多个服务器上,将负载分发到多个服务器上,也就是我们讲的负载均衡。
为了加快网站的解析速度,可以把动态页面和静态页面由不同的服务器来解析,减少服务器压力,加快解析速度。
http://nginx.org/
nginx-1.21.3.tar.gz
需要安装依赖:pcre、oPEnssl、zlib
(1)安装pcre依赖
压缩文件解压后进入目录执行./configure
使用 make && make install 编译安装
安装后查看版本号:
pcre-config --version
(2)安装openssl
(3)安装zlib
#连网安装 yum -y install make zlib zlib-devel gcc-c++ liBTool openssl openssl-devel
压缩文件 nginx-1.21.3.tar.gz 解压后进入目录执行./configure
使用 make && make install 编译安装
安装成功后,会生成文件夹 /usr/local/nginx/ ,nginx的sbin文件夹里包含了启动脚本
cd /usr/local/nginx/sbin
./nginx
查看启动状态:
ps -ef|grep nginx
nginx默认监听80端口,浏览器访问ip显示
若访问不了,检查防火墙
查看开放端口号
firewall-cmd --list-all
设置开放端口号
firewall-cmd --add-service=http --permanent
sudo firewall-cmd --add-port=80/tcp --permanent
重启防火墙
firewall-cmd --reload
(1)使用Nginx命令必须进入Nginx目录
cd /usr/local/nginx/sbin
(2)查看Nginx版本
./nginx -v
(3)启动Nginx
./nginx
(4)关闭Nginx
./nginx -s stop
(5)重新加载Nginx(修改配置文件后不重启更新)
./nginx -s reload
(1)配置文件路径: /usr/local/nginx/conf/nginx.conf
(2)配置文件由三部分组成:全局块、events、http。
全局块:设置一些影响Nginx服务器整体运行的配置指令。比如worker_PRocesses 1;worker_processes 值越大可以支持的并发数量越多。
events:涉及的指令主要影响Nginx服务器与用户的网络连接。比如worker_connections 1024;支持的最大连接数。
http:Nginx配置中最频繁的部分:代理、缓存、日志、负载均衡...
http块又包含http全局、server块。
http全局块配置的指令包括文件引入、MIME-tYPE定义、日志自定义、连接超时时间、单链接请求数上限等。
server块与虚拟主机有密切联系。http块可以包含多个server块,而每个server块相当于一个虚拟主机。
每个server块包含全局server块和location块。
全局server块:最常见的配置是本虚拟主机的监听配置和本虚拟主机的名称或IP配置。
location块:一个server块可以配置多个location块。
location块主要作用是基于Nginx服务器接收到的请求字符串(例如 server_name/uri-string),对虚拟主机名称(也可以是IP别名)之外的字符串(例如前面的 /uri-string)进行匹配,对特定的请求进行处理。地址定向、数据缓存和应答控制等功能,还有许多第三方模块的配置也在这里进行。
浏览器输入 www.123.COM,跳转到linux系统tomcat主页
(1)linux系统安装tomcat使用默认端口8080,启动
(2)对外开放访问端口
firewall-cmd --add-port=8080/tcp --permanent
firewall-cmd --reload
(3)测试,浏览器访问tomcat
(1)在windows系统的hosts文件中进行域名和ip对应关系的配置
C:WindowsSystem32driversetchosts
添加:192.168.0.104 www.123.com
(2)在Nginx进行请求转发配置(反向代理配置)
(3)测试,浏览器访问www.123.com展示tomcat主页
@H_304_315@
使用Nginx方向代理,根据不同的访问路径跳转到不同端口的服务中
Nginx监听端口为9001
访问http://192.168.0.104:9001/edu/ 直接跳转到 http://127.0.0.1:8080/
访问http://192.168.0.104:9001/vod/ 直接跳转到 http://127.0.0.1:8081/
(1)准备两个tomcat,端口分别是8080、8081
(2)创建文件夹和测试界面
8080端口tomcat/webapps/edu/a.htML
<h1>8080</h1>
8081端口tomcat/webapps/vod/a.html
<h1>8081</h1>
(1)Nginx配置文件:/usr/local/nginx/conf/nginx.conf
添加配置:
server { listen 9001; server_name 192.168.0.104; location ~ /edu/ { Proxy_pass http:@H_614_406@//127.0.0.1:8080; } location ~ /vod/ { proxy_pass http://127.0.0.1:8081; } }
(2)防火墙开放端口 9001、8080、8081
firewall-cmd --add-port=9001/tcp --permanent
firewall-cmd --reload
(3)Nginx重新加载
顺序 no优先级:
(location =) > (location 完整路径) > (location ^~ 路径) > (location ~,~* 正则顺序) > (location 部分起始路径) > (/)
(1)浏览器访问http://192.168.0.104/edu/a.html ,负载均衡使请求平均分发到8080和8081端口
(1)准备两个tomcat,端口分别是8080、8081
(2)创建文件夹和测试界面
8080端口tomcat/webapps/edu/a.html
<h1>8080</h1>
8081端口tomcat/webapps/edu/a.html
<h1>8081</h1>
(1)Nginx配置文件:/usr/local/nginx/conf/nginx.conf
配置:
http { ...... upstream myserver{ server 192.168.0.104:8080; server 192.168.0.104:8081; } .... server{ listen 80; server_name 192.168.0.104; location / { ..... proxy_pass http://myserver; proxy_connect_timeout 10; } .... } }
浏览器访问http://192.168.0.104/edu/a.html
(1)轮询(默认)
每个请求按时间先后顺序分配到后端服务器,服务器down掉则删除。
(2)weight
权重默认为1,数值越大分配请求越多
upstream myserver{ server 192.168.0.104:8080 weight=5; server 192.168.0.104:8081 weight=10; }
(3)ip_hash
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session问题。
upstream myserver{ ip_hash; server 192.168.0.104:8080; server 192.168.0.104:8081; }
(4)fair(第三方)
按照后端服务器的响应时间来分配请求,响应时间短的优先分配。
upstream myserver{
server 192.168.0.104:8080;
server 192.168.0.104:8081; fair;
}
(1)在linux系统中准备一些静态资源,用于访问
/data/file/a.html
/data/image/bg.jpg
server { listen 80; server_name 192.168.0.104; location /file/ { root /data/; index index.html index.htm; } location /image/ { root /data/; autoindex on; }
autoindex on;//列出文件目录
(1)浏览器访问 http://192.168.0.104/image/
(2)浏览器访问 http://192.168.0.104/file/a.html
(1)主Nginx服务器宕机后自动切换到备用Nginx服务器
(1)两台虚拟机环境 192.168.0.103、192.168.0.104,均需安装Nginx (可使用vware克隆功能)
(2)两台虚拟机安装 keepalived
yum install keepalived -y
rpm -q -a keepalived 查询安装结果
安装位置 /etc/keepalived 配置文件 keepalived.conf
#keepalived常用指令
systemctl start keepalived.service
systemctl stop keepalived.service
systemctl restart keepalived.service
(1)修改/etc/keepalived/keepalived.conf
主要是配置这两个节点,下方其他的是配置的lvs,我们不需要修改。
修改如下:
global_defs { notification_email { # keepalived服务宕机异常出现的时候,发送通知邮件 可以是多个 acassen@firewall.loc # 收件人邮箱1 failover@firewall.loc # 收件人邮箱2 sysadmin@firewall.loc # 收件人邮箱3 } notification_email_From Alexandre.Cassen@firewall.loc #邮件发件人 smtp_server 192.168.200.1 # 邮件服务器地址 smtp_connect_timeout 30 # 超时时间 router_id LVS_DEVEL # 机器标识 局域网内唯一即可 vrrp_skip_check_adv_addr # 默认是不跳过检查。检查收到的VRRP通告中的所有地址可能会比较耗时,设置此命令的意思是,如果通告与接收的上一个通告来自相同的master路由器,则不执行检查(跳过检查)。 #vrrp_strict # 严格遵守VRRP协议。下列情况将会阻止启动Keepalived:1. 没有VIP地址。2. 单播邻居。3. 在VRRP版本2中有IPv6地址。 vrrp_garp_interval 0 # 小数类型,单位秒,在一个网卡上每组gratuITous arp消息之间的延迟时间,默认为0,一个发送的消息=n组 arp报文 vrrp_gna_interval 0 # 小数类型,单位秒, 在一个网卡上每组na消息之间的延迟时间,默认为0 } # vrrP实例 我们集群设置 多机配置,除了state和priority不一样,其他都一样 vrrp_instance VI_1 { state MASTER # 服务器状态 MASTER是主服务器 BACKUP是备份服务器 主服务器的priority要比备份服务器大 interface ens33 # 通信端口 通过ip addr可以看到 根据自己的机器配置 virtual_router_id 51 # vrrp实例id keepalived集群,实例id必须一致 priority 100 # 权重比 主服务器的priority要比备份服务器大 advert_int 1 # 心跳间隔 单位秒 keepalived多机器集群 通过心跳检测,如果发送心跳没反应 就立刻接管; authentication { # 服务器之间通信密码 auth_type PASS auth_pass 1111 } virtual_ipaddress { # 自定义虚拟IP 192.168.91.199 } }
把这个配置复制到从服务器上,state改为BACKUP,从服务器的priority改小
到这里我们高可用就初步完成了,可以开启nginx和keepalived测试了
(2)在 /sur/local/src目录下添加检测脚本,检测Nginx是否活着
修改keepalived.conf
在这个位置添加脚本配置
vrrp_script chk_http_port { script "/home/nginx_check.sh" #脚本地址 interval 2 #检测脚本执行的间隔 weight 2 #比重 }
然后相对应的地址创建nginx_check.sh
#!/bin/bash echo 'xxxxxx' count_nginx=`ps -ef|grep -w nginx|grep -v grep|wc -l` echo $count_nginx if [ $count_nginx -eq 0 ];then systemctl start nginx.service sleep 2 if [ `ps -ef|grep -w nginx|grep -v grep|wc -l` -eq 0 ];then systemctl stop keepalived.service fi fi
(3)启动Nginx、keepalived
./nginc
systemctl star keepalived.service
(1)访问虚拟 ip,然后把主 Nginx 或者 keepalived 停掉,重新访问虚拟ip仍然可以访问
master接收信号后将任务分配给worker进行执行,worker可有多个。
客户端发送一个请求到master后,worker获取任务的机制不是直接分配也不是轮询,而是一种争抢的机制,“抢”到任务后再执行任务,即选择目标服务器tomcat等,然后返回结果。
发送请求占用了woker两个或四个连接数。
普通的静态访问最大并发数是:worker_connections *worker_processes/2
若是 HTTP 作 为反向代理来说,最大并发数量应该是 worker_connections *worker_processes/4。
当然了,worker数也不是越多越好,worker数和服务器的CPU数相等时最适宜的。
以上是脚本宝典为你收集整理的Nginx入门全部内容,希望文章能够帮你解决Nginx入门所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。