• Nginx网络服务三-----(三方模块和内置变量)


    1.验证模块 需要输入用户名和密码

    我们要用htpasswd这个命令,先安装一下httpd

    生成文件和用户 

    修改文件 

    访问页面 

     为什么找不到页面?

    对应的路径下,没有这个文件

    去创建文件

    虚拟机浏览器查看

    有的页面不想被别人看到,可以做这个操作

    2.网页的状态页

    基于nginx 模块 ngx_http_stub_status_module 实现,在编译安装nginx的时候需要添加编译参数 --with-http_stub_status_module,否则配置完成之后监测会是提示语法错误注意: 状态页显示的是整个服务器的状态,而非虚拟主机的状态

    文件中加入内容 

    浏览器看结果

    #状态页用于输出nginx的基本状态信息

    Active connections: 
    #当前处于活动状态的客户端连接数,包括连接等待空闲连接数=reading+writing+waiting
     

    accepts:
    #统计总值,Nginx自启动后已经接受的客户端请求的总数。

    handled:
    #统计总值,Nginx自启动后已经处理完成的客户端请求总数,通常等于accepts,除非有因worker_connections限制等被拒绝的连接

    requests:
    #统计总值,Nginx自启动后客户端发来的总的请求数。


    Reading:
    #当前状态,正在读取客户端请求报文首部的连接的连接数,数值越大,说明排队现象严重,性能不足


    Writing:

    #当前状态,正在向客户端发送响应报文过程中的连接数,数值越大,说明访问量很大

    Waiting:
    #当前状态,正在等待客户端发出请求的空闲连接数,开启 keep-alive的情况下,这个值等于active – (reading+writing)

    提取内容

    这样别人也可以看到,这个给它加个身份验证

    加了身份验证,看不懂怎么办

    如果你想更安全

    3.自定义 错误页面

    自定义一个页面

    更换状态码

    为什么要更换状态码?

    因为404状态码出现时,可能会被劫持,为了不被劫持,我们可以更换状态码

    4.检测文件是否存在

    当访问的页面存在时,那就去访问这个页面,不会显示about 

    5.日志位置存放

    #格式
    Syntax: error_log file [level];
    error_log    /apps/nginx/logs/kgc_error.log;
    固定格式      文件路径                         级别(info  debug等  可以忽略不写)
          


    Default: 
    error_log logs/error.log error;
    Context: main, http, mail, stream, server, location
    level: debug, info, notice, warn, error, crit, alert, emerg

    [root@centos7 ~]# mkdir /data/nginx/logs
     listen 80;
     server_name www.kgc.org;
     error_page  500 502 503 504 404 /error.html; 
     access_log /apps/nginx/logs/kgc_access.log; 
     error_log /apps/nginx/logs/kgc_error.log; 
     #定义错误日志文件


    #重启nginx并访问不存在的页面进行测试并验证是在指定目录生成新的日志文件


    [root@localhost ~]#mkdir /apps/nginx/logs
    [root@localhost ~]#nginx -t
    nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
    nginx: configuration file /etc/nginx/nginx.conf test is successful
    [root@localhost ~]#nginx -s reload

    错误日志实验 

    将两个网站的 日志分离

    [root@localhost error]#vim /apps/nginx/conf.d/m.conf
    server{
            listen 80;
            server_name  www.m.com;
            root /data/nginx/m/;
            error_log    /data/logs/m_error.log;
            access_log  /data/logs/m_access.log;
    }


    [root@localhost error]#vim /apps/nginx/conf.d/pc.conf
    server{
            listen 80;
            server_name  www.pc.com;
            root /data/nginx/pc;
            error_log    /data/logs/pc_error.log;
            access_log  /data/logs/pc_access.log;
    }
    [root@localhost error]#mkdir /data/logs
    [root@localhost error]#nginx -t
    nginx: the configuration file /apps/nginx/conf/nginx.conf syntax is ok
    nginx: configuration file /apps/nginx/conf/nginx.conf test is successful
    [root@localhost error]#nginx -s reload

    查看日志是否生效

    6.长连接

    keepalive_timeout timeout [header_timeout];  
    #设定保持连接超时时长,0表示禁止长连接,默认为75s,通常配置在http字段作为站点全局配置


    keepalive_requests number;  
    #在一次长连接上所允许请求的资源的最大数量,默认为100次,建议适当调大,比如:500
    可以加在全局或者 server 

    keepalive_requests 3;
    #最大下载三个资源就会断开


    keepalive_timeout 60 65;   #只能有一个空格 
    #开启长连接后,返回客户端的会话保持时间为60s,单次长连接累计请求达到指定次数请求或65秒就会被断开,后面的60为发送给客户端应答报文头部中显示的超时时间设置为60s:如不设置客户端将不显示超时时间。


    Keep-Alive:timeout=60  #浏览器收到的服务器返回的报文
    #如果设置为0表示关闭会话保持功能,将如下显示:


    Connection:close  #浏览器收到的服务器返回的报文
    #使用命令测试:


    [root@centos8 ~]# telnet www.kgc.org 80
    Trying 10.0.0.8...
    Connected to www.kgc.org.
    Escape character is '^]'.
    GET / HTTP/1.1
    HOST: www.kgc.org

    #Response Headers(响应头信息):
    HTTP/1.1 200 OK
    Server: nginx/1.18.0
    Date: Thu, 24 Sep 2020 04:35:35 GMT
    Content-Type: text/html
    Content-Length: 7
    Last-Modified: Wed, 23 Sep 2020 14:39:21 GMT
    Connection: keep-alive
    Keep-Alive: timeout=60
    ETag: "5c8a6b3a-7"
    Accept-Ranges: bytes


    #页面内容
    pc web

    7.作为下载服务器配置

    ngx_http_autoindex_module 模块处理以斜杠字符 "/" 结尾的请求,并生成目录列表,可以做为下载服务

    配置使用

    官方文档:

    Module ngx_http_autoindex_module

    给文件内容加单位大小

    autoindex on | off;
    #自动文件索引功能,默为off


    autoindex_exact_size on | off;  
    #计算文件确切大小(单位bytes),off 显示大概大小(单位K、M),默认on


    autoindex_localtime on | off ; 
    #显示本机时间而非GMT(格林威治)时间,默认off


    autoindex_format html | xml | json | jsonp; 
    #显示索引的页面文件风格,默认html


    limit_rate rate; 
    #限制响应客户端传输速率(除GET和HEAD以外的所有方法),单位B/s,即bytes/second,默认值0,表示无限制,此指令由ngx_http_core_module提供


    set $limit_rate
    #变量提供 限制   变量优先级高

    改为json格式

    8.用户上传资料

    上传需要借助开发小的程序, 并且程序 5M 和 nginx 10M 都会限制。 两者取最小

    client_max_body_size 1m; 
    #设置允许客户端上传单个文件的最大值,默认值为1m,上传文件超过此值会出413错误


    client_body_buffer_size size; 
    #用于接收每个客户端请求报文的body部分的缓冲区大小;默认16k;超出此大小时,其将被暂存到磁盘上的由下面client_body_temp_path指令所定义的位置


    client_body_temp_path path [level1 [level2 [level3]]];
    #设定存储客户端请求报文的body部分的临时存储路径及子目录结构和数量,目录名为16进制的数字,使用hash之后的值从后往前截取1位、2位、2位作为目录名

    上传文件大于限制  错误代码413

    9.其他设置

    directio size | off;
    #操作完全和aio相反,aio是读取文件而directio是写文件到磁盘,启用直接I/O,默认为关闭,当文件大于等于给定大小时,例如:directio 4m;同步(直接)写磁盘,而非写缓存。

    直接 写入 磁盘     还是等待一定数据量写入磁盘

    open_file_cache off;  #是否缓存打开过的文件信息
    open_file_cache max=N [inactive=time];
    #nginx可以缓存以下三种信息:
    (1) 文件元数据:文件的描述符、文件大小和最近一次的修改时间
    (2) 打开的目录结构
    (3) 没有找到的或者没有权限访问的文件的相关信息 
    max=N:#可缓存的缓存项上限数量;达到上限后会使用LRU(Least recently used,最近最少使用)算法实现管理
    inactive=time:#缓存项的非活动时长,在此处指定的时长内未被命中的或命中的次数少于

    open_file_cache_min_uses    
    #指令所指定的次数的缓存项即为非活动项,将被删除 
    open_file_cache_valid time; 
    #缓存项有效性的检查验证频率,默认值为60s 
    open_file_cache_errors on | off; 
    #是否缓存查找时发生错误的文件一类的信息,默认值为off
    open_file_cache_min_uses number; 
    #open_file_cache指令的inactive参数指定的时长内,至少被命中此处指定的次数方可被归类为活动项,默认值为1

    范例:
    open_file_cache max=10000 inactive=60s; 
    #最大缓存10000个文件,非活动数据超时时长60s
    open_file_cache_valid   60s;  
    #每间隔60s检查一下缓存数据有效性
    open_file_cache_min_uses 5; 
    #60秒内至少被命中访问5次才被标记为活动数据
    open_file_cache_errors   on;
    #缓存错误信息

    limit_except method ... { ... },仅用于location
    #限制客户端使用除了指定的请求方法之外的其它方法 
    method:GET, HEAD, POST, PUT, DELETE,MKCOL, COPY, MOVE, OPTIONS, PROPFIND, 
    PROPPATCH, LOCK, UNLOCK, PATCH
    limit_except GET {
     allow 192.168.91.101;
     deny all;
    }

    #除了GET和HEAD 之外其它方法仅允许192.168.1.0/24网段主机使用

    10.第三方模块(echo模块)

    开源的echo模块 https://github.com/openresty/echo-nginx-module

    安装第三方命令 

    看一下,make install会不会覆盖之前的 

    curl访问

    11.变量

    变量分为:内置变量和 自定义变量

    http://nginx.org/en/docs/varindex.html
    官方文档

    11.1内置变量

    $remote_addr; 

    #存放了客户端的地址,注意是客户端的公网IP


    $proxy_add_x_forwarded_for;(传地址) 

    $proxy_add_x_forwarded_for
    #此变量表示将客户端IP追加请求报文中X-Forwarded-For首部字段,多个IP之间用逗号分隔,如果请求中没有X-Forwarded-For,就使用$remote_addrthe “X-Forwarded-For” client request header field with the $remote_addr variable appended to it, separated by a comma. If the “X-Forwarded-For” field is not present in the client request header, the $proxy_add_x_forwarded_for variable is equal to the $remote_addr variable.
    客户机    代理1     代理2     nginx服务器
    $proxy_add_x_forwarded_for: 在代理1 上存的是  客户机的ip
    $proxy_add_x_forwarded_for: 在代理2 上存的是  客户机的ip,代理1的ip            用逗号隔开
    $proxy_add_x_forwarded_for: nginx  上存的是  客户机的ip,代理1的ip,代理2的ip

    $args;(存放URL的参数)

    $args; 
    #变量中存放了URL中的参数,例如:http://www.kgc.org/main/index.do?id=20190221&partner=search
    #返回结果为: id=20190221&partner=search    存放的就是这个

    select   *  from table  where id=20190221

    $document_root;

    指明了主站点目录的位置


    #保存了针对当前资源的请求的系统根目录,例如:/apps/nginx/html 

    $document_uri;

    不包含参数的URL


    #保存了当前请求中不包含参数的URI,注意是不包含请求的指令

    比如:http://www.kgc.org/main/index.do?id=20190221&partner=search会被定义为/main/index.do 
    #返回结果为:/main/index.do

    $host;

    服务器的主机地址(名字)

    $limit_rate;

    限速(网路速率)

    #如果nginx服务器使用limit_rate配置了显示网络速率,则会显示,如果没有设置, 则显示0

    $remote_port;

    客户端的请求端口

    #客户端请求Nginx服务器时随机打开的端口,这是每个客户端自己的端口

    $remote_user;

    经过 htpasswd验证的用户名

    #已经经过Auth Basic Module验证的用户名

    $request_method; 

    请求资源的方式,GET/PUT/DELETE等

    $request_filename; 

    表示系统的真实路径

    #当前请求的资源文件的磁盘路径,由root或alias指令与URI请求生成的文件绝对路径,如:/apps/nginx/html/main/index.html

    $request_uri; 

    包含请求参数的原始URI,不包含主机名

    相当于:$document_uri?$args

    $scheme;

    请求的协议

    例如:http,https,ftp等

    $server_protocol; 

    你使用的协议的版本

    #保存了客户端请求资源使用的协议的版本,例如:HTTP/1.0,HTTP/1.1,HTTP/2.0等

    $server_addr; 

    服务器的IP地址

    $server_name; 

    请求的服务器的主机名

     $server_port; 

    请求的服务器的端口号

    例如:https(端口号443)      http(端口号80)

    $http_user_agent;

    客户端浏览器的详细信息

    $http_cookie; 

    客户端的缓存信息

    缓存:cookie和session

     例子:

    11.2自定义变量

    11.2.1 set指令

    假如需要自定义变量名称和值,使用指令set $variable value;

    语法格式:

    Syntax: set $variable value;
    Default: —
    Context: server, location, if

    set这个指令

    只能放在 server,location,if 下面 

    12.自定义图标

    favicon.ico 文件是浏览器收藏网址时显示的图标,当客户端使用浏览器问页面时,浏览器会自己主动发起请求获取页面的favicon.ico文件,但是当浏览器请求的favicon.ico文件不存在时,服务器会记录404日志,而且浏览器也会显示404报错

    【定制小图标】
    wget www.baidu.com/favicon.ico


    放到主目录就可以了

    不生效可以重新打开浏览器

    12.1 百度图标 

    复制一份到主目录下

    浏览器访问地址,看图标

    12.2 京东图标

     

  • 相关阅读:
    母婴服务预约小程序的效果如何
    ChatTuGraph:通过大模型“与图对话”
    2023-09-09 LeetCode每日一题(课程表)
    Springboot毕业设计毕设作品,车辆大全和车牌识别系统 开题报告
    基于C++的简易的国际象棋双人对战程序设计
    c语言实现三子棋
    和用户相关的命令
    计算机毕业设计之java+ssm医院预约挂号系统
    CEX暴雷怎么办 一文读懂加密钱包产业现状
    用卷积网络对城市住区进行分类
  • 原文地址:https://blog.csdn.net/YUEAwb/article/details/136227123