社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  NGINX

一文读懂 Nginx

分布式实验室 • 4 年前 • 439 次点击  


Nginx知识网结构图



Nginx是一个高性能的HTTP和反向代理服务器,特点是占用内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好。

Nginx专为性能优化而开发,性能是其最重要的要求,十分注重效率,有报告Nginx能支持高达50000个并发连接数。

基础概念

正向代理

局域网中的电脑用户想要直接访问网络是不可行的,只能通过代理服务器来访问,这种代理服务就被称为正向代理。


反向代理

客户端无法感知代理,因为客户端访问网络不需要配置,只要把请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据,然后再返回到客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器IP地址。


负载均衡

客户端发送多个请求到服务器,服务器处理请求,有一些可能要与数据库进行狡猾,服务器处理完毕之后,再将结果返回给客户端。

普通请求和响应过程:


但是随着信息数量增长,访问量和数据量飞速增长,普通架构无法满足现在的需求。

我们首先想到的是升级服务器配置,可以由于摩尔定律的日益失效,单纯从硬件提升性能已经逐渐不可取了,怎么解决这种需求呢?

我们可以增加服务器的数量,构建集群,将请求分发到各个服务器上,将原来请求集中到单个服务器的情况改为请求分发到多个服务器,也就是我们说的负载均衡。

图解负载均衡:


假设有15个请求发送到代理服务器,那么由代理服务器根据服务器数量,平均分配,每个服务器处理5个请求,这个过程就叫做负载均衡。

动静分离

为了加快网站的解析速度,可以把动态页面和静态页面交给不同的服务器来解析,加快解析的速度,降低由单个服务器的压力。

动静分离之前的状态L:


动静分离之后:


Nginx如何在linux安装


第一种:Linux系统

CentOS 7 64位

下载以下安装包,用Xftp放入Linux系统。



第一步:安装pcre依赖

解压压缩文件,进入解压之后的目录执行./configure,然后执行make && make install。


查看是否安装成功:
[root@localhost pcre-8.37]# pcre-config --version



第二步:安装其他依赖

[root@localhost pcre-8.37]# yum -y make zlib zlib-devel gcc-c++ libtool openssl openssl-devel


第三步:安装Nginx

解压Nginx,进入Nginx目录,执行./configure:


执行make && make install:


去sbin文件夹下启动Nginx

cd /usr/local/nginx/sbin



检查是否启动成功。

[root@localhost sbin]# ps -ef|grep nginx



第二种

Linux系统

Red Hat Enterprise Linux Server release 6.5 (Santiago)

提前需要准备的:

Nginx源码:http://nginx.org/en/download.html

yum安装教程:https://blog.csdn.net/yujing1314/article/details/97237644

gcc-c++:

[root@localhost ~]yum install gcc-c++

第三方开发包:

[root@localhost ~]yum install -y pcre pcre-devel
[root@localhost ~]yum install -y zlib zlib-devel
[root@localhost ~]yum install -y openssl openssl-devel


安装步骤:

第一步:把Nginx的源码包上传到Linux系统。

我使用的SecureCRT的sftp文件传输,直接把文件拖进去就OK了。


第二步:解压缩

[root@localhost ~]tar zxf nginx-1.8.0.tar.gz

第三步:使用configure命令创建一makeFile文件

./configure
–prefix=/usr/local/nginx
–pid-path=/var/run/nginx/nginx.pid
–lock-path=/var/lock/nginx.lock
–error-log-path=/var/log/nginx/error.log
–http-log-path=/var/log/nginx/access.log
–with-http_gzip_static_module
–http-client-body-temp-path=/var/temp/nginx/client
–http-proxy-temp-path=/var/temp/nginx/proxy
–http-fastcgi-temp-path=/var/temp/nginx/fastcgi
–http-uwsgi-temp-path=/var/temp/nginx/uwsgi
–http-scgi-temp-path=/var/temp/nginx/scgi

第四步:上一步可能会报错,因为缺少temp文件,如下创建即可

[root@localhost sbin]# mkdir /var/temp/nginx/client -p

第五步:make

直接输入make。

第六步:make install

直接输入make install。

开启Nginx:

[root@localhost sbin]# ./nginx

如何查看进程[root@bogon stefan]# ps aux|grep nginx:


关闭Nginx:

[root@localhost sbin]# ./nginx -s stop

推荐使用:

[root@localhost sbin]# ./nginx -s quit


测试

输入你虚拟机的IP,如下图就成功了。


如果测试失败,注意查看虚拟机防火墙是否关闭


Nginx常用命令


查看版本:

./nginx -v

启动:

./nginx

关闭(有两种方式,推荐使用 ./nginx -s quit):

 ./nginx -s stop
 ./nginx -s quit

重新加载Nginx配置:

./nginx -s reload


Nginx的配置文件


配置文件分三部分组成。

1、全局块

从配置文件开始到events块之间,主要是设置一些影响nginx服务器整体运行的配置指令。

并发处理服务的配置,值越大,可以支持的并发处理量越多,但是会受到硬件、软件等设备的制约。


2、events块

影响nginx服务器与用户的网络连接,常用的设置包括是否开启对多workprocess下的网络连接进行序列化,是否允许同时接收多个网络连接等等。

支持的最大连接数:


3、http块

诸如反向代理和负载均衡都在此配置。

location指令说明:

该语法用来匹配url,语法如下:
location[ = | ~ | ~* | ^~] url{

}

  • =:用于不含正则表达式的url前,要求字符串与url严格匹配,匹配成功就停止向下搜索并处理请求

  • ~:用于表示url包含正则表达式,并且区分大小写

  • ~*:用于表示url包含正则表达式,并且不区分大小写

  • ^~:用于不含正则表达式的url前,要求Ngin服务器找到表示url和字符串匹配度最高的location后,立即使用此location处理请求,而不再匹配

  • 如果有url包含正则表达式,不需要有~开头标识


反向代理实战

配置反向代理

目的:在浏览器地址栏输入地址www.123.com跳转Linux系统Tomcat主页面。

具体实现:

先配置Tomcat:因为比较简单,此处不再赘叙。

并在Windows访问:


具体流程:


修改之前:


配置:


再次访问:


反向代理2

目标:

  • 访问http://192.168.25.132:9001/edu/直接跳转到192.168.25.132:8080

  • 访问http://192.168.25.132:9001/vod/直接跳转到192.168.25.132:8081


准备:

配置两个Tomcat,端口分别为8080和8081,都可以访问,端口修改配置文件即可。


新建文件内容分别添加8080!!!和8081!!!


响应如下:


具体配置:


重新加载Nginx:

./nginx -s reload

访问:


实现了同一个端口代理,通过edu和vod路径的切换显示不同的页面。

反向代理小结

第一个例子:浏览器访问www.123.com,由host文件解析出服务器IP地址192.168.25.132 www.123.com,然后默认访问80端口,而通过Nginx监听80端口代理到本地的8080端口上,从而实现了访问www.123.com,最终转发到tomcat 8080上去。

第二个例子:访问http://192.168.25.132:9001/edu/直接跳转到192.168.25.132:8080,访问http://192.168.25.132:9001/vod/直接跳转到192.168.25.132:8081,实际上就是通过Nginx监听9001端口,然后通过正则表达式选择转发到8080还是8081的Tomcat上去。

负载均衡实战

修改nginx.conf:


重启Nginx:

./nginx -s reload

在8081的tomcat的webapps文件夹下新建edu文件夹和a.html文件,填写内容为8081!!!!

在地址栏回车,就会分发到不同的Tomcat服务器上。


负载均衡方式:

1、轮询(默认)

2、weight,代表权,权越高优先级越高



3、fair,按后端服务器的响应时间来分配请求,相应时间短的优先分配



4、ip_hash,每个请求按照访问IP的hash结果分配,这样每一个访客固定的访问一个后端服务器,可以解决session 的问题



动静分离实战

什么是动静分离

把动态请求和静态请求分开,不是讲动态页面和静态页面物理分离,可以理解为Nginx处理静态页面,Tomcat处理动态页面。

动静分离大致分为两种:一、纯粹将静态文件独立成单独域名放在独立的服务器上,也是目前主流方案;二、将动态跟静态文件混合在一起发布,通过Nginx分开。

动静分离图析:


实战准备

准备静态文件:


配置Nginx:


Nginx高可用


如果Nginx出现问题:


解决办法:


前期准备:

  • 两台Nginx服务器

  • 安装Keepalived

  • 虚拟IP


安装Keepalived

[root@192 usr]# yum install keepalived -y
[root@192 usr]# rpm -q -a keepalived
keepalived-1.3.5-16.el7.x86_64


修改配置文件:

[root@192 keepalived]# cd /etc/keepalived
[root@192 keepalived]# vi keepalived.conf 

分别将如下配置文件复制粘贴,覆盖掉keepalived.conf。

虚拟IP为192.168.25.50。

对应主机IP需要修改的是:

smtp_server 192.168.25.147(主)smtp_server 192.168.25.147(备)
state MASTER(主) state BACKUP(备)

global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 192.168.25.147
   smtp_connect_timeout 30
   router_id LVS_DEVEL # 访问的主机地址
}

vrrp_script chk_nginx {
  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 # 同一组需一致
    priority 90  # 访问优先级,主机值较大,备机较小
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.25.50  # 虚拟ip
    }
}

启动:

[root@192 sbin]# systemctl start keepalived.service


访问虚拟IP成功。


关闭主机147的Nginx和Keepalived,发现仍然可以访问。


原理解析



如下图,就是启动了一个Master,一个Worker,Master是管理员,Worker是具体工作的进程。


Worker如何工作:


小结


  • Worker数应该和CPU数相等

  • 一个Master多个Worker可以使用热部署,同时Worker是独立的,一个挂了不会影响其他的。


原文链接:https://blog.csdn.net/yujing1314/article/details/107000737


Kubernetes实战培训


Kubernetes实战培训将于2020年12月25日在深圳开课,3天时间带你系统掌握Kubernetes,学习效果不好可以继续学习。本次培训包括:云原生介绍、微服务;Docker基础、Docker工作原理、镜像、网络、存储、数据卷、安全;Kubernetes架构、核心组件、常用对象、网络、存储、认证、服务发现、调度和服务质量保证、日志、监控、告警、Helm、实践案例等,点击下方图片或者阅读原文链接查看详情。


Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/99309
 
439 次点击