一nginx

Nginx 同 Apache 一样都是一种 Web 服务器。基于 REST 架构风格,以统一资源描述符(Uniform Resources Identifier)URI 或者 统一资源定位符(Uniform Resources Locator)URL 作为沟通依据,通过 HTTP 协议 提供各种网络服务。

Nginx是一款 轻量级 的 Web服务器、反向代理服务器,由于它的内存占用少,启动极快,高并发能力强,在互联网项目中广泛应用。

二.正向/反向代理

2.1正向代理

由于防火墙的原因我们不能直接访问谷歌,推特等,但是我们可以借助vpn这是一个简单的例子,正向代理代理的是客户端,正向代理(Forward Proxy)是一种代理服务器,它位于客户端和服务端之间,代表客户端向其他服务器发送请求。

在这里插入图片描述

2.2反向代理

​ 当我们在外网访问百度的时候,会进行一个转发,代理到内网去,这就是所谓的反向代理,反向代理的是服务器端,对用户隐藏

img

三.负载均衡

​ 单个服务器解决不了请求的话,就要增加服务器的数量,让后将请求分发到各个服务器上,将原先将请求到一个服务器上,分散到其他服务器上这就是负载均衡

Nginx给出三种关于负载均衡的方法

​ 1.轮询法

​ 每个请求按时间循序逐一分配到不同的服务器,如果后端服务器关闭,会自动剔除

​ 适合服务器配置相当,无状态且短平快的服务使用。也适用于图片服务器集群和纯静态页面服务器集群。

​ 2.weight权重模式(加权轮询)

​ 指定轮询的几率,weight和访问比率成正比,用于后端服务器不均衡的情况

​ 适用于后端的服务器配置不同的情况下,高的话就可以增加权重

上述方式存在一个问题就是说,在负载均衡系统中,假如用户在某台服务器上登录了,那么该用户第二次请求的时候,因为我们是负载均衡系统,每次请求都会重新定位到服务器集群中的某一个,那么已经登录某一个服务器的用户再重新定位到另一个服务器,其登录信息将会丢失,这样显然是不妥的。

解决方案

​ 1.ip_hash

​ 可以采用ip_hash来解决这个问题,如果客户端已经访问某个服务器,当用户再次访问的时候,会通过hash算法,自动定位到该服务器 ,这样的话每一访问的ip都会访问到一个后端服务器上,用来你解决seesion问题.

四动静分离

动静分离,在我们的软件开发中,有些请求是需要后台处理的,有些请求是不需要经过后台处理的(如:css、html、jpg、 js 等文件),这些不需要经过后台处理的文件称为 静态文件。让动态网站里的动态网页根据一定规则把不变的资源和经常变的资源区分开,动态资源做好了拆分以后,我们就可以根据 静态资源 的特点将其做缓存操作,以提高资源的响应速度。

Nginx的 静态处理 能力很强,但是动态处理能力不足,因此,在企业中常用动静分离技术

  • 动静分离技术其实是采用代理的方式,在 server{} 段中加入带正则匹配的 location 来指定匹配项;
  • 针对PHP的动静分离:静态页面交给 Nginx 处理,动态页面交给 PHP-FPM 模块或 Apache 处理。在Nginx的配置中,是通过 location 配置段 配合 正则匹配 实现静态与动态页面的不同处理方式

在这里插入图片描述

五Nginx安装

//使用命令安装

wget -c http://nginx.org/download/nginx-1.24.0.tar.gz
//下载到/usr/local
安装Nginx相关依赖
#安装nginx所需要的依赖包
yum install -y gcc-c++	zlib zlib-devel	openssl openssl-devel pcre pcre-devel
//编译
./configure --prefix=/usr/local/nginx
 //安装
make && make install

注意:如果没有wget命令,需要先安装:(centos版本命令:)yum install -y wget

常用命令

//cd /.../nginx/sbin
./nginx 启动
./nginx -s stop 停止
./nginx -s reload 重新加载文件
ps aux|grep nginx 查看nginx进程

配置讲解

# 首尾配置暂时忽略
server {  
        # 当nginx接到请求后,会匹配其配置中的service模块
        # 匹配方法就是将请求携带的host和port去跟配置中的server_name和listen相匹配
        listen       8080;        
        server_name  localhost; # 定义当前虚拟主机(站点)匹配请求的主机名

        location / {
            root   html; # Nginx默认值
            # 设定Nginx服务器返回的文档名
            index  index.html index.htm; # 先找根目录下的index.html,如果没有再找index.htm
        }
}
# 首尾配置暂时忽略

server{ } 其实是包含在 http{ } 内部的。每一个 server{ } 是一个虚拟主机(站点)。

上面代码块的意思是:当一个请求叫做localhost:8080请求nginx服务器时,该请求就会被匹配进该代码块的 server{ } 中执行。

server {  
        listen       8080;        
        server_name  localhost;

        location / {
            root   html; # Nginx默认值
            index  index.html index.htm;
        }
        
        # 静态化配置,所有静态请求都转发给 nginx 处理,存放目录为 my-project
        location ~ .*\.(html|htm|gif|jpg|jpeg|bmp|png|ico|js|css)$ {
            root /usr/local/var/www/my-project; # 静态请求所代理到的根目录
        }
        
        # 动态请求匹配到path为'node'的就转发到8002端口处理
        location /node/ {  
            proxy_pass http://localhost:8002; # 充当服务代理
        }
}

访问静态资源 nginx 服务器会返回 my-project 里面的文件,如获取 index.html:

img

访问动态请求 nginx 服务器会将它从8002端口请求到的内容,原封不动的返回回去:

img

http{
    #配置负载均衡
    upstream learn{
        server ip:port weight = x;
        server ip:port weight = x;
    }
server {  
        listen       8080;        
        server_name  localhost;

        location / {
            root   html; # Nginx默认值
            index  index.html index.htm;
            #这样就会转发到上面赋值的负载均衡的服务器上
            proxy_pass http://learn;
        }
        
        # 静态化配置,所有静态请求都转发给 nginx 处理,存放目录为 my-project 
        #location 使用的是正则表达式的形式
        location ~ .*\.(html|htm|gif|jpg|jpeg|bmp|png|ico|js|css)$ {
            root /usr/local/var/www/my-project; # 静态请求所代理到的根目录
        }
}
}
 使用的是正则表达式的形式
        location ~ .*\.(html|htm|gif|jpg|jpeg|bmp|png|ico|js|css)$ {
            root /usr/local/var/www/my-project; # 静态请求所代理到的根目录
        }
}
}

更多推荐