十一NGINX

解释图:==apache采用同步模式处理客户端请求,数据库服务器采用阻塞模式等待响应。Nginx作为Web服务器采用异步非阻塞模式处理客户端请求和等待数据库响应。相比apache,Nginx在相同硬件配置下,可以将并发处理能力提升3到8倍。在处理客户端请求时,apache在向后端服务器发起请求后,线程会一直等待响应;而Nginx会创建事件并将任务挂起,不占用进程资源,从而节省资源并支持更多并发连接。==

#### ==1. 同步与异步==

- **同步**: 任务按顺序执行,一个任务完成后再执行下一个任务。- **例子:** 去银行排队办理业务,前一个人办完你才能开始。
- **异步**:任务可以立即返回,程序可以在任务执行的同时继续执行其他任务。- **例子:** 点外卖,下单后可以继续做其他事情,外卖送达时会收到通知。

#### ==2. 阻塞与非阻塞==

- **阻塞**:在执行某个线程或进程时,程序会暂停执行其他线程或进程,直到该任务完成。- **例子:** 等红绿灯,必须停下来等待绿灯亮起才能继续行驶。
- **非阻塞**:在执行某个线程或进程时,程序不会暂停执行其他线程或进程,线程或进程完成后会通过回调函数或其他机制通知程序。- **例子:** 使用智能烤面包机,面包烤好后会自动弹出并发出提示音,期间你可以做其他事情。


#### 3 代理:  
  
  ==反向代理:代替后端服务器接受用户请求的角色(nginx)==  
  ==正向代理:代替客户端去访问目标服务器的角色(squid)==  
反向代理是指nginx服务器代替后端服务器接收用户请求,并根据请求类型将动态资源交给后端服务器处理;而正向代理则是指squid服务器代替客户端访问目标服务器,它通常用于绕过防火墙或访问受限资源。
![[Pasted image 20240929210952.png]]
解释:在部分反向代理过程中,当用户请求静态资源时,Nginx服务器直接响应;对于动态资源,Nginx通过`proxy_pass`模块将请求转发给Apache服务器。==在反向代理过程中,Nginx接收用户请求,作为客户端发起TCP连接到Apache服务器获取资源,Apache处理后,Nginx将响应结果返回给用户。==

#### 4 负载均衡: 
负载均衡的概念是什么?

==首先在服务器构建方式上,当多台服务器共同处理同一件事情就是分布式服务,而负载均衡是分布式的一种,是指在多台服务器上实现同一类任务(而非同一件事情)时,通过分担压力的方式来提高整体性能和稳定性。==例如,当一个人无法独自处理大量煎饼制作工作时,可以找到其他人帮忙,这样就形成了负载均衡的关系。

Nginx与Apache如何结合实现负载均衡?

在生产环境中,通常使用==Nginx作为负载均衡器,它能够将动态资源请求分配给处理能力更强但并发性能较弱的Apache服务器,同时将静态资源请求交给并发能力强的Nginx来处理。==这样,两者优势互补,确保了系统的稳定性和高效性。
如图:
![[Pasted image 20240929210920.png]]

#### 5==Nginx的工作模式==

**master-worker模式**:一个master进程管理和监控多个worker进程,worker进程负责处理具体的业务逻辑。这种模式适用于生产环境,具有高稳定性和性能优势。

**单进程模式**:只有一个进程处理所有任务,适合开发和调试环境。
## 二、Nginx实验:  

<注意事项>
1. 注意配置文件中的结尾有;作为结束~!(切记!)
2. 每次实验修改完配置文件后需要热重启nginx才会生效
  ``` shell
    nginx  -s  reload
```

### 实验1:Nginx的状态统计

``` shell
  #安装nginx时将 --with-http_stub_status_module 模块开启

#修改nginx配置文件(写入要访问的server标签中)
vim /usr/local/nginx/conf/nginx.conf
#添加
   location /nginx_status{
               stub_status on;
               access_log  off;
        }

#客户端访问网址:http://IP/nginx_status

       "Active connections"表示当前的活动连接数;

       "server accepts handled requests"表示已经处理的连接信息

       三个数字依次表示已处理的连接数(根keepalive时间有关)、成功的TCP握手次数(根keepalive时间有关)、已处理的请求数(即请求页面)
```

### **实验2:目录保护

a、原理和apache的目录保护原理一样(利用上一个实验接着完成)

b、在状态统计的location中添加:
``` shell
   vim /usr/local/nginx/conf/nginx.conf
#添加
location /nginx_status{
       stub_status on;
       auth_basic "Welcome to nginx_status!";
       auth_basic_user_file /usr/local/nginx/conf/htpasswd.nginx;

       }

   cd /usr/local/nginx/conf
    yum -y install httpd-tools
   
   #使用Apache的命令htpasswd进行用户密码文件的创建(生成在上面指定的位置)
   htpasswd -c /usr/local/nginx/conf/htpasswd.nginx user

```

d、重启nginx并再次访问统计页面
``` shell
   nginx -t #检测配置文件
   nginx  -s  reload  #重新加载配置文件

```


### **实验3:基于IP访问控制

a、接着上一个实验完成操作

b、在状态统计的location中添加:
``` shell
     vim /usr/local/nginx/conf/nginx.conf
#添加
location /nginx_status{
       stub_status on;
       auth_basic "Welcome to nginx_status!";
       auth_basic_user_file /usr/local/nginx/conf/htpasswd.nginx;
       allow 192.168.90.1;
        deny 192.168.90.0/24;
       }
       #仅允许192.168.90.1访问服务器

```

d、重启nginx并再次访问统计页面
``` shell
   nginx -t #检测配置文件
   nginx  -s  reload  #重新加载配置文件

```

### **实验4:==nginx的虚拟主机(基于域名)==

a、提前准备好两个网站的域名,并且规划好两个网站网页存放目录

b、在Nginx主配置文件中并列编写两个server标签,并分别写好各自信息

``` shell
#请提前搭好项目
 vim /usr/local/nginx/conf/nginx.conf
    #虚拟主机标签
    server {
        listen       80;
        server_name  www.blog.com;
        location / {
            root   html/blog;
            index  index.html index.htm index.php info.php;
        }

        location ~ \.php$ {
            root           html/blog;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
            include        fastcgi.conf;
        }

    }

```

c、分别访问两个不同的域名验证结果
``` shell
   nginx -t #检测配置文件
   nginx  -s  reload  #重新加载配置文件

```
    

### **实验5****:==nginx反向代理(全局或部分反向代理)==  

代理和反向代理?

正向代理:找别人代替你去完成一件你完不成的事(代购),代理的对象是客户端

反向代理:替厂家卖东西的人就叫反向代理(烟酒代理) ,代理的对象是服务器端

a、在另外一台机器上安装apache,启动并填写测试页面

b、在nginx服务器的配置文件中添加(写在某一个网站的server标签内)

核心:proxy_pass模块  

##### 部分反向代理和全局反向代理

``` shell
   vim /usr/local/nginx/conf/nginx.conf
    #部分反向代理
    location ~ \.php$ {
        proxy_pass   http://92.168.88.100:80;
    }
    #用之前要把部分反向代理关了,全局反向代理,写在配置文件的网页目录下
  location / {

       proxy_pass http://192.168.88.100:80;      #此处填写apache服务器的IP地址
       }

```


c、重启nginx,并使用客户端访问测试

``` shell
   nginx -t #检测配置文件
   nginx  -s  reload  #重新加载配置文件
   #在浏览器输入 IP/index 测试效果

```

### **实验6 ==负载均衡(结合反向代理才能实现)== 

```


负载均衡(Load Balance)其意思就是将任务分摊到多个操作单元上进行执行,例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务。

  核心:upstream模块和proxy_pass模块  
  可以使用调度算法指定被调度对象的权重  
  算法:  
   RR #轮询  把请求均匀的分配给各个服务器,避免单个服务器压力过大
   WRR  #加权轮询  有权重的轮询
a、使用默认的rr轮训算法,修改nginx配置文件

``` shell

vim /usr/local/nginx/conf/nginx.conf
  upstream bbs1 {                            #此标签在server标签前添加
      server 192.168.90.101 weight=1;
      server 192.168.90.100 weight=2;
}

server {
       ........;

       #修改自带的location / 的标签,将原内容删除,添加下列两项
       location / {
              proxy_pass http://bbs1;   #添加反向代理,代理地址填写upstream声明的名字
              proxy_set_header Host $host;       #重写请求头部,保证网站所有页面都可访问成功
       }

}
```

c、开启并设置两台90.101 & 90.100的主机

   安装apache并设置不同的index.html页面内容(设置不同页面是为了看实验效果)

d、重启nginx,并使用客户端访问测试

``` shell
   nginx -t #检测配置文件
   nginx  -s  reload  #重新加载配置文件
   #在浏览器输入 IP/index 测试效果

```

拓展补充:wrr算法实现加权轮询(后期集群再讲更多算法类型和功能)

``` shell
upstream bbs {
       server 192.168.88.100:80 weight=1;
       server 192.168.88.200:80 weight=2;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值