Nginx 从入门到实践


Nginx:1.20.1

CentOS 版本: 7.6

Nginx介绍

传统的 Web 服务器,每个客户端连接作为一个单独的进程或线程处理,需在切换任务时将 CPU 切换到新的任务并创建一个新的运行时上下文,消耗额外的内存和 CPU 时间,当并发请求增加时,服务器响应变慢,从而对性能产生负面影响。

Nginx是lgor Sysoev为俄罗斯访问量第二的rambler.ru站点设计开发的。从2004年发布至今,凭借开源的力量,已经接近成熟与完善。

Nginx功能丰富,可作为HTTP服务器,也可作为反向代理服务器,邮件服务器。支持FastCGI、SSL、Virtual Host、URL Rewrite、Gzip等功能。并且支持很多第三方的模块扩展。

Nginx常用功能

1、Http代理,反向代理

作为web服务器最常用的功能之一,尤其是反向代理。

img

2、负载均衡

Nginx提供的负载均衡策略有2种:内置策略和扩展策略。内置策略为轮询,加权轮询,Ip hash。

img

Ip hash算法,对客户端请求的ip进行hash操作,然后根据hash结果将同一个客户端ip的请求分发给同一台服务器进行处理,可以解决session不共享的问题。

img

3、动静分离

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

动静分离

4、Nginx配置文件结构

nginx 文件结构

...              #全局块

events {         #events块
   ...
}

http      #http块
{
    ...   #http全局块
    server        #server块
    { 
        ...       #server全局块
        location [PATTERN]   #location块
        {
            ...
        }
        location [PATTERN] 
        {
            ...
        }
    }
    server
    {
      ...
    }
    ...     #http全局块
}

1、全局块:配置影响nginx全局的指令。一般有运行nginx服务器的用户组,nginx进程pid存放路径,日志存放路径,配置文件引入,允许生成worker process数等。
2、events块:配置影响nginx服务器或与用户的网络连接。有每个进程的最大连接数,选取哪种事件驱动模型处理连接请求,是否允许同时接受多个网路连接,开启多个网络连接序列化等。
3、http块:可以嵌套多个server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置。如文件引入,mime-type定义,日志自定义,是否使用sendfile传输文件,连接超时时间,单连接请求数等。
4、server块:配置虚拟主机的相关参数,一个http中可以有多个server。
5、location块:配置请求的路由,以及各种页面的处理情况。

几个常见配置项:

1.$remote_addr$http_x_forwarded_for 用以记录客户端的ip地址;
2.$remote_user :用来记录客户端用户名称;
3.$time_local : 用来记录访问时间与时区;
4.$request : 用来记录请求的url与http协议;
5.$status : 用来记录请求状态;成功是200;
6.$body_bytes_s ent :记录发送给客户端文件主体内容大小;
7.$http_referer :用来记录从那个页面链接访问过来的;
8.$http_user_agent :记录客户端浏览器的相关信息;

简述Nginx和Apache的差异

(1)Nginx是一个基于事件的Web服务器,Apache是一个基于流程的服务器
(2)Nginx避免子进程的概念,Apache是基于子进程的;
(3)Nginx在内存消耗和连接方面更好,Apache在内存消耗和连接方面一般
(4)Nginx的性能和可伸缩性不依赖于硬件,Apache依赖于CPU和内存等硬件
(5)Nginx支持热部署,Apache不支持热部署
(6)Nginx对于静态文件处理具有更高效率,Apache相对一般:
(7)Nginx在反向代理场景具有明显优势,Apache相对一般
(8)Nginx可以做负载均衡,Apache不可以

编译安装nginx服务

在线安装nginx

yum部署Nginx

#安装epel-release扩展源
yum -y install epel-release 

在这里插入图片描述
然后

yum -y install nginx

来安装 Nginx,然后我们在命令行中 nginx -v 就可以看到具体的 Nginx 版本信息,也就安装完毕了。
在这里插入图片描述
注:使用yum安装的nginx配置文件位置在:/etc/nginx.conf。
默认根目录在:/usr/share/nginx/html。
默认日志文件在:/var/log/nginx/路径下。

nginx 状态统计

Nginx 提供了 ngx_http_stub_status_module,ngx_http_reqstat_module模块,这个模块提供了基本的监控功能。

监控的主要指标
我们需要对以下主要的指标进行监控:

1、基本活跃指标
Accepts(接受)、Handled(已处理)、Requests(请求数)是一直在增加的计数器。Active(活跃)
在这里插入图片描述

vim /etc/nginx/nginx.conf
server {
        listen 80;
        server_name localhost;
        location /status {
                stub_status     on;
                access_log      on;
                }
}

在这里插入图片描述

nginx 访问控制(用户校验、客户端授权)

以保护状态统计页面为例,配置目录保护

用户校验

(1)使用http服务的命令htpasswd进行用户和密码文件的创建

htpasswd -c /usr/share/nginx/html/htpasswd.nginx namida

在这里插入图片描述
修改属主交给ngxin管理,并给予400权限

chown nginx /usr/share/nginx/html/htpasswd.nginx
chmod 400 /usr/share/nginx/html/htpasswd.nginx```

(2)在location块中添加如下两行:

```bash
auth_basic "Welcome to nginx_status.";
auth_basic_user_file 
vim /etc/nginx/nginx.conf
location /status{
    stub_status on;
    access_log ogg;
    auth_basic "Welcome to nginx_status.";
    auth_basic_user_file /usr/share/nginx/html/htpasswd.nginx;
}

(3)重启nginx并再次访问统计页面

nginx -s reload

在这里插入图片描述

基于客户端访问控制

deny是拒绝某一个IP地址、某一个网段客户机访问
allow允许某一个IP地址、某一个网段客户机访问
规则匹配顺序,从上往下,匹配即停止。
需求:添加一条规则拒绝192.168.99.71IP的主机访问
#基于ip地址的身份验证
在location / 中添加

deny 192.168.99.71;
allow all;

在这里插入图片描述

在这里插入图片描述

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐