nginx详解与配置

这篇具有很好参考价值的文章主要介绍了nginx详解与配置。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

什么是代理:
假设有两台主机,一台服务器,其中一台主机代理(代替)另一台主机去访问服务器。
正向代理(forward proxy):
代理对象是客户端,客户端转发给代理客户端,由代理客户端去真正访问服务器,隐藏了客户端的身份(IP)。

客户端<==转发==>代理客户端的服务器<----------->服务器

正向代理可以在win10或浏览器的设置里开启,需要指定代理服务器的地址和端口,还可以通过第三方软件开启代理。
反向代理(reverse proxy):
代理对象是服务端,客户端真正访问的是代理服务器,隐藏了服务器的真实身份(IP)。

客户端<----------->代理服务器的服务器<==转发==>服务器

反向代理还应用于负载均衡(Load Balance),代理服务器会将大量的请求分摊给多台提供相同服务的服务器或集群。
负载均衡的策略跟nginx使用的负载均衡算法有关,默认使用轮询算法,nginx还提供各种参数给负载均衡调优。
轮询(轮流查询):每个请求按时间顺序逐一分配到不同的后端服务器

nginx是一款轻量级的web/反向代理服务器软件,提供高并发(高性能)的http服务。
反向代理还会将客户端请求的源web服务器上的内容保存到本地,以便日后再收到同样的信息请求时,
将本地缓存里的内容直接发给用户,以减少源web服务器的压力,提高响应速度。因此nginx还具有缓存功能。

yum install -y epel-release	#安装扩展源
yum install -y nginx		#安装nginx
vim /etc/nginx/nginx.conf	#修改nginx默认配置文件
http {
  include mime.types; 		#文件扩展名与文件类型映射表
  default_type application/octet-stream; 	#默认文件类型
  autoindex on; 			#开启目录列表访问,合适下载服务器,默认关闭
  sendfile on; 			#开启高效文件传输模式
  tcp_nopush on; 			#防止网络阻塞
  tcp_nodelay on; 			#防止网络阻塞
  keepalive_timeout 120; 		#客户端连接保持存活的最大时间,单位是秒
  gzip on; 				#开启gzip压缩输出
  upstream 节点池名字 {		#均衡负载配置块
    server 127.0.0.1:8090 weight=1 max_fails=3 fail_timeout=10s;	#被http反向代理的服务器地址或域名和端口号,可添加多台
    server 127.0.0.1:8080 weight=2 max_fails=3 fail_timeout=10s;	
    #weight:代表权重,默认为 1,权重值越大被分配的客户端越多
    #max_fails:允许请求最大失败次数,用于探测后端节点状态,默认为1
    #fail_timeout:在经历了max_fails次失败后,暂停该后端节点的超时时间,等待下次探测,默认为10s
    #超时:发起请求后,等待响应发回的时间超过某段指定的时间后就称为超时,超时之后通常情况下是断开当前连接或者重连
  }
  server {				#nginx网页服务配置块
    listen 80;			#监听本机所有ipv4地址的80端口,如果有多张网卡可以在端口前指定地址,如果省略了端口则默认为80
    listen [::]:80;			#监听本机所有ipv6地址的80端口
    server_name 域名或IP地址;		#本机域名,多个域名用空格分开,可填写ip,当请求提交到nginx时,会先匹配ip,如果ip(listen字段)没有找到对应的ip,再通过域名(server_name字段)进行匹配
    client_max_body_size 1024m;	#客户端可通过http传输文件的大小,默认为1m
    keepalive_timeout 60;		#客户端连接保持存活的最大时间,默认为75秒
    charset utf-8;			#字符集
    location / {			#网站虚拟路径(虚拟主机),可添加多个,/代表根虚拟目录。当有多个location配置块时,优先匹配最符合条件的。
      proxy_pass http://地址:端口或节点池名字;	#配置http反向代理的地址(域名)和端口或者负载均衡池
      proxy_pass https://地址:端口号			#支持https反向代理,未填写端口号则为协议的默认端口
    }
    location /www/ {			#当访问虚拟目录www时,进入根目录(root)下对应的www目录
      root 根目录绝对路径;		#网站的根目录,该目录必须开放权限
      index 文件名;			#网站默认页面,默认为index.html
    }
    location /chen/ {			#当访问虚拟目录chen时,直接进入根目录(alias)
      alias 根目录绝对路径;
    }
  }
}
#配置块上下文:用花括号括起来的内容称为该配置块的上下文,类似函数的作用域。如果一个配置块包含另一个配置块,内部没有指定的字段将使用外部已指定的相同字段。
nginx -t	#检查nginx配置文件语法
nginx	#启动nginx服务

或者

systemctl enable nginx --now	#永久开启nginx服务
nginx -s stop	#关闭nginx服务
nginx -s reload	#重新加载配置文件

location 正则+路径 实现匹配分发
语法格式:

	location [ = | ~ | ~* | ^~ ] uri { }
(1)=:用于不含正则表达式的uri前,要求请求字符串与uri严格匹配,如果匹配成功,就停止继续向下搜索并立即处理该请求。
(2)~:用于表示uri包含正则表达式,并且区分大小写。
(3)~*:用于表示uri包含正则表达式,并且不区分大小写。
(4)^~:用于不包含正则表达式的uri前,要求nginx服务器找到标识uri和请求字符串匹配度最高的location后,立即使用此location处理请求,而不再使用location块中的正则uri与请求字符串做匹配。

优先级:= --> ^~ --> /* #当有多个包含/进行正则匹配时,选择正则表达式最长的location配置执⾏。
注意:如果uri包含正则表达式,则必须要有 ~ 或者 ~
标识
例如:

location ~ /\.(gif | jpg | png)$ { }	#匹配根目录下所有以.gif .jpg .png结尾的uri

nginx性能优化:

#指定nginx进程运行的用户以及用户组,默认为nobody
user 用户名 用户组;
#允许同时运行的nginx进程数,一般根据cpu的性能或线程数来设置,默认为1
worker_processes cpu线程数;
#单个进程允许同时打开的最大(网页)文件数,默认为无限制
worker_rlimit_nofile 65535;
#以上为全局配置
events {
    #单个进程允许同时建立的最大tcp连接数(并发数),默认为1024,不能超过最大打开文件数(worker_rlimit_nofile)
    worker_connections 32000;
}

高可用(High Availability):
高度可用性,当一台服务器出现故障或需要维护时,有另一台服务器作为备用。
原理:主备服务器都共同使用一个虚拟IP,客户端通过虚拟IP来访问网页资源,根据配置文件的优先级来确定优先访问哪台服务器。
KeepAlived是一个基于VRRP协议来实现的服务高可用方案,可以利用其来避免IP单点故障。
KeepAlived的作用是检测服务器的状态,如果有一台web服务器宕机,或工作出现故障,KeepAlived将检测到,
并将有故障的服务器从系统中剔除,同时使用其他服务器代替该服务器的工作,当服务器工作正常后KeepAlived自动将服务器加入到服务器群中,
这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的服务器。
两台服务器都安装上nginx和keepalived:

yum install -y keepalived
在主备上都编辑配置文件:
vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
   router_id LVS_DEVEL	#主备一样
}
#可以实现一台机器挂了,虚拟IP会跳到另外的机器上继续运行,使用如下脚本检查nginx进程状态
vrrp_script nginx_check {			#注意:函数定义必须写在调用的前面
    script "/etc/keepalived/nginx_check.sh"	#脚本路径
    interval 2	#机器宕机时脚本调用的次数
    weight 2
}
 
vrrp_instance VI_1 {
    state BACKUP		#主MASTER  备BACKUP
    interface eth0		#绑定的网卡
    nopreempt		#备机(BACKUP)才用,不抢占的意思
    virtual_router_id 51		#组id,主备需要一致
    priority 99			#优先级,主比备高,主100,备99
    advert_int 1			#检查间隔1s
    authentication {
        auth_type PASS
        auth_pass 1111		#认证密码,可以修改主备相同
    }
    track_script {
	nginx_check		#调用nginx检查函数
    }
    virtual_ipaddress {
        192.168.1.100/24		#添加虚拟IP(vip),自己设置,要跟内网同一个网段
    }
}

通过shell脚本来检测nginx服务是否在运行、控制主备服务器状态:

vim /etc/keepalived/nginx_check.sh	#在主备上都创建nginx进程检查脚本
#!/bin/bash
ps -C nginx --no-header	#查看nginx进程是否存在
if [ $? -eq 1 ];then		#如果nginx进程不存在
  /usr/sbin/nginx		#尝试重启nginx
  if [ $? -eq 0 ];then		#如果nginx重启成功
    exit 1			#返回非0结果,不跳转到备用服务器
  else
    pkill -9 keepalived	#关闭当前机器的keepalived进程,虚拟ip跳转到备用服务器
    exit 0			#返回0
  fi
fi
chmod +x nginx_check.sh	#赋予脚本可执行权限
sed -i '/SELINUX/s/enforcing/disabled/' /etc/selinux/config	#/SELINUX/为匹配包含//内的字符的行
setenforce 0	#必须要关闭selinux,keepalived才能生效
systemctl enable keepalived -now	#永久启动高可用(主从)

之后不需要再启动nginx,keepalived的检测脚本会自动启动nginx。

tail -f /var/log/messages|grep Keepalived	#查看日志
curl 192.168.1.100		#访问虚拟IP,为效果明显,可以修改主备服务器的网页内容以便区分

高可用-主从模式:使用一个虚拟IP,一台主服务器和一台从服务器,只有主服务器对外提供服务,从服务器的资源在主服务器不出现故障时永远处于浪费状态。
高可用-主主模式:使用两个虚拟IP使两台服务器都对外提供服务,两台服务器都绑定两个互为主备的虚拟IP,当其中一台机器出现故障时,
两台机器的请求都转移到一台机器上,还可以通过nginx提供的负载均衡功能或dns负载均衡分发到这两个虚拟IP上。
配置nginx+keepalived主主模式:
第一台服务器:

master:10.100.1.200(优先级高)
slave:10.100.1.220(优先级低)

第二台服务器:

master:10.100.1.220(优先级高)
slave:10.100.1.200(优先级低)

注意:两台服务器的router_id和virtual_router_id在主主模式下不能一样
第一台服务器的keepalived配置:

! Configuration Filefor keepalived  
global_defs {  
    router_id nginx_node_01
}  
vrrp_script nginx_check {
    script "/etc/keepalived/nginx_check.sh"
    interval 2
    weight 2
}
vrrp_instance VI_1{  
   state MASTER
   interface ens33
   virtual_router_id 20
   priority 100  
   advert_int 1  
   authentication {  
       auth_type PASS  
       auth_pass 1111  
   }  
   virtual_ipaddress {  
       10.100.1.200/24
   }  
} 
vrrp_instance VI_2{  
   state BACKUP
   interface ens33
   virtual_router_id 22
   priority 80
   advert_int 1  
   authentication {  
       auth_type PASS
       auth_pass 1111  
   }
   virtual_ipaddress {
       10.100.1.220/24
   }
   track_script {                     
       nginx_check
   }
}

第二台服务器的keepalived配置:

! Configuration Filefor keepalived  
global_defs {  
    router_id nginx_node_02
}  
vrrp_script nginx_check {
    script "/etc/keepalived/nginx_check.sh"
    interval 2
    weight 2
}
vrrp_instance VI_1{  
   state BACKUP
   interface ens33 
   virtual_router_id 20
   priority 80 
   advert_int 1  
   authentication {  
       auth_type PASS  
       auth_pass 1111  
   }  
   virtual_ipaddress {  
       10.100.1.200/24
   }  
} 
vrrp_instance VI_2{  
   state MASTER
   interface ens33
   virtual_router_id 22
   priority 100
   advert_int 1  
   authentication {  
       auth_type PASS
       auth_pass 1111  
   }
   virtual_ipaddress {
       10.100.1.220
   }
   track_script {                     
       nginx_check
   }
}

两台服务器都启动keepalived服务:

yum install -y keepalived	#之后keepalived会自动启动nginx服务

测试:

curl 10.100.1.200
curl 10.100.1.220

主主模式下可通过访问两个虚拟IP来分别访问两台服务器,有效利用了两台服务器的资源,当有一台机器宕机时,依旧能访问这两个虚拟IP
为了能更加有效地利用服务器资源,还可以在前面再加一台nginx服务器配置负载均衡分发到这两个虚拟IP上,或者使用同一个域名解析到这两个虚拟IP上

VRRP介绍:
VRRP全称 Virtual Router Redundancy Protocol,即"虚拟路由冗余协议"。
可以认为它是实现路由器高可用的容错协议,即将N台提供相同功能的路由器(主机)组成一个路由器组(Router Group),
这个组里面有一个master和多个backup,但在外界看来就像一台一样,构成虚拟路由器,
拥有一个虚拟IP(VIP - Virtual IP,也就是路由器所在局域网内其他机器的默认路由),
占有这个IP的master实际负责ARP响应和转发IP数据包,组中的其它路由器作为备份的角色处于待命状态。
master会发组播消息,当backup在超时时间内收不到vrrp包时就认为master宕掉了,
这时就需要根据VRRP的优先级来选举一个backup当master,保证路由器的高可用。

在VRRP协议实现里,虚拟路由器使用 00-00-5E-00-01-XX 作为虚拟MAC地址,
XX就是唯一的 VRID (Virtual Router IDentifier),这个地址同一时间只有一个物理路由器占用。
在虚拟路由器里面的物理路由器组里面通过多播IP地址 224.0.0.18 来定时发送通告消息。
每个Router都有一个 1-255之间的优先级别,级别最高的(highest priority)将成为主控(master)路由器。
通过降低master的优先权可以让处于backup状态的路由器抢占(pro-empt)主路由器的状态,
两个backup优先级相同的IP地址较大者为master,接管虚拟IP。

参考资料:
http://fisherworks.cn/?p=3541
http://www.cncsto.com/article/1984
https://zhuanlan.zhihu.com/p/166304639
https://www.jianshu.com/p/bb8cb34e0284
https://www.zhihu.com/question/24723688
https://www.cnblogs.com/niesaisai/p/8127469.html
https://www.cnblogs.com/mzhaox/p/11215036.html
https://blog.csdn.net/qq_46312987/article/details/118895520
https://blog.csdn.net/qq_26420601/article/details/110261184
https://blog.csdn.net/qq_38992249/article/details/117387083
https://blog.csdn.net/qq_41453285/article/details/106312967
https://baijiahao.baidu.com/s?id=1672649081319142060&wfr=spider&for=pc
https://www.cnblogs.com/wuguofeng/p/15206947.html
https://blog.csdn.net/chuanchengdabing/article/details/119727185
https://blog.csdn.net/weixin_52270081/article/details/118341576
https://blog.huati365.com/922f1ad193da25a1
https://www.jianshu.com/p/b147a719f740
https://www.sohu.com/a/547873141_120122487
http://m.bubuko.com/infodetail-3250218.html
https://blog.csdn.net/wzj_110/article/details/110142902
https://baijiahao.baidu.com/s?id=1704543670669857039&wfr=spider&for=pc文章来源地址https://www.toymoban.com/news/detail-724740.html

到了这里,关于nginx详解与配置的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Mac Docker安装配置nginx,配置代理前端访问服务器后端访问本地启动项目

     或者直接通过docker客户端查看 --name NginxTest:容器名称 -p 8080:8080:映射端口 -d nginx:设置容器后台运行  docker客户端查看 1)全局块:配置服务器整体运行的配置指令 nginx 服务器整体运行的配置指令,主要包括配置运行 Nginx 服务器的用户(组)、允许生成的 worker process 数,

    2024年02月02日
    浏览(68)
  • 如何在Vue中配置代理服务器(详解)

            大家既然能看到这篇文章,说明大家对跨域已经有了一定的理解,所以这里就不花功夫对跨域进行详细的介绍了        1. 首先扩展一点,axios在本地发送的请求如果你不把路径写全,它都是会默认加上自己项目所在的端口,就比如说         点击发送按钮后,以

    2023年04月23日
    浏览(44)
  • linux 服务器进程、端口查找,nginx 配置日志查找,lsof 命令详解

    1.1 使用查看端口号对应的进程信息 方式一 : 使用netstat命令 -t:显示TCP连接 -u:显示UDP连接 -l:仅显示监听状态的连接 -n:以数字形式显示端口号,而不是以服务名称显示 通过管道符号|将netstat的输出结果传递给grep命令,用于过滤出包含指定端口号的行。 执行命令后,终端

    2024年02月04日
    浏览(63)
  • Nginx缓存代理服务器

    1.nginx反向缓存代理服务配置 2. 安装nginx服务 3. 修改/etc/nginx/nginx.conf配置文件,关闭长连接保持功能 4. 修改/etc/nginx/nginx.conf配置文件,添加反向代理缓存配置项 5. 修改/etc/nginx/conf.d/default.conf配置文件,添加proxy转发模块 6.启动nginx服务

    2024年02月12日
    浏览(60)
  • 具有公网IP的服务器作为代理服务器,并使用Nginx将内网服务器反向代理

    在代理服务器上安装Nginx。如果您正在使用Linux操作系统,则可以使用包管理器来安装Nginx。例如,如果您使用的是Ubuntu,可以使用以下命令安装: 配置Nginx以将HTTP和HTTPS请求转发到内部服务器。打开Nginx的主配置文件/etc/nginx/nginx.conf,并在http块中添加以下代码: 注意: 将

    2024年01月25日
    浏览(51)
  • 【代理服务器】Squid 反向代理与Nginx缓存代理

    如果 Squid 反向代理服务器中缓存了该请求的资源,则将该请求的资源直接返回给客户端;否则反向代理服务器将向后台的 Web 服务器请求资源,然后将请求的应答返回给客户端,同时也将该应答缓存在本地,供下一个请求者使用。 缓存网页对象,减少重复请求 将互联网请求

    2024年02月12日
    浏览(58)
  • nginx 代理sftp,达到访问nginx服务器就间接访问sftp服务器

    测试环境部署规划: 192.168.0.101 nginx 服务器    192.168.0.102 sftp 服务器  192.168.0.103  作为客户端去访问,这里三台机器选用centos 7.9系统,客户端可以使用window,软件访问sftp服务! 首先 1.在192.168.0.101机器上部署nginx  步骤: #安装依赖 yum install gcc pcre-devel openssl-devel  wget -y 

    2024年02月16日
    浏览(69)
  • 学习笔记:代理服务器——Nginx

    本文会对Nginx的介绍、使用、原理等知识作由浅入深的剖析。如果你只想对Nginx作为反向代理的使用作初步的了解,那么可以只看第一、二章节;如果想对Nginx工作原理、扩展使用等进行深入研究,可以看第三章节。相信本文会对你有所帮助 Nginx(“engine x”)是一个高性能的

    2024年02月07日
    浏览(48)
  • 使用Nginx作为反向代理服务器

    简介 在本教学文章中,我们将学习如何使用Nginx作为反向代理服务器,将流量转发到后端服务器。反向代理是一种常见的应用场景,它可以帮助我们提高应用程序的可靠性、性能和安全性。本教程将介绍如何配置Nginx作为反向代理,并涵盖负载均衡和缓存设置。 前提条件 在开

    2024年02月13日
    浏览(48)
  • nginx 反向代理服务器端口转发问题

    先介绍一下项目背景,公司里有个外包Saas项目,这里假设为A项目( 前后端不分离 );项目架构大概如下;但是项目部署到生产环境时,那台服务器80端口被其他应用占用了(我尼玛...),nginx监听端口那边只能监听其他端口了,比如监听:18000,通过nginx反向代理将18000端口转发到

    2024年02月04日
    浏览(56)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包