• nginx002: NGINX的环境变量,基本命令参数,目录关系及gzip优化


    NGINX的环境变量,基本命令参数,目录关系及gzip优化

    添加环境变量

    nginx命令执行方式 nginx [选项] [参数]

    通过编译安装的nginx 默认是没有环境变量的,如何设置环境变量,让nginx成为可执行的命令?

    1. 确认安装目录:
    我这里的程序目录为: /server/tools/nginx-1.16.0
    编译安装的目录为:/application/nginx-1.16/
    

    如果要使用nginx命令我们需要进入/application/nginx/sbin下执行

    添加如下环境变量:

    方法1:
    命令行执行:
    export PATH="$PATH:/application/nginx/sbin
    
    
    方法2[推荐方法]:
    echo "export PATH="$PATH:/application/nginx/sbin"">>/etc/profile
    source /etc/profile
    
    注意“/application/nginx/sbin” 是你nginx的安装目录
    

    nginx命令参数:

    Options:
      -?,-h         : this help
      				  获取帮助
      				  
      -v            : show version and exit
                      查看版本信息
                      
      -V            : show version and configure options then exit
                      查看编译参数
      
      -t            : test configuration and exit
      				  检查语法
      
      -T            : test configuration, dump it and exit
      				  检查语法并显示过程
      				  
      -q            : suppress non-error messages during configuration testing
                      检查配置文件忽略错误
                      
      -s signal     : send signal to a master process: stop, quit, reopen, reload
                      向主进程发送信号:停止、退出、重新打开、重新加载等指令
                      
      -p prefix     : set prefix path (default: /application/nginx-1.16/)
                      重新设置nginx启动命令
                      
      -c filename   : set configuration file (default: conf/nginx.conf)
      				  指定配置文件而不使用默认配置文件
      				  
      -g directives : set global directives out of configuration file
      				   设置全局目录外的配置文件
    
      -s 			:  发送信号给master进程 可以发送[stop|start|reload]等信号
    

    nginx的目录说明

    • 未编译解压后的目录:

      [root@leilei nginx-1.16.0]# ll       #一级目录
      total 752 
      drwxr-xr-x 6 www  www     326 Jul  7 11:41 auto        ---自动检测系统环境以及编译相关的脚本
      -rw-r--r-- 1 www  www  296223 Apr 23 21:13 CHANGES     ---版本变更文件和新增功能文件
      -rw-r--r-- 1 www  www  451813 Apr 23 21:13 CHANGES.ru  ---俄文版新功能文件
      drwxr-xr-x 2 www  www     168 Jul  7 11:41 conf        --存放默认配置文件,在make install后,会拷贝到安装目录中去
      -rwxr-xr-x 1 www  www    2502 Apr 23 21:12 configure   --编译配置目录
      drwxr-xr-x 4 www  www      72 Jul  7 11:41 contrib     --存放一些实用工具,如geo配置生成工具
      drwxr-xr-x 2 www  www      40 Jul  7 11:41 html        --默认页面
      -rw-r--r-- 1 www  www    1397 Apr 23 21:12 LICENSE     --许可文件
      -rw-r--r-- 1 root root    404 Jul  8 09:04 Makefile    --用于make的一些文件
      drwxr-xr-x 2 www  www      21 Jul  7 11:41 man         --帮助手册
      drwxr-xr-x 3 root root    174 Jul  8 09:05 objs        --对象
      -rw-r--r-- 1 www  www      49 Apr 23 21:12 README      --阅读内容
      drwxr-xr-x 9 www  www      91 Jul  7 11:41 src         --原密码目录
      
    • 编译后的目录:

      [root@leilei nginx]# ll
      total 4
      drwx------ 2 www  root    6 Jul  7 19:01 client_body_temp    -- #临时文件目录
      drwxr-xr-x 3 root root 4096 Jul  9 07:49 conf                -- #配置文件目录
      drwx------ 2 www  root    6 Jul  7 19:01 fastcgi_temp        -- #fastcgi临时数据目录
      drwxr-xr-x 3 root root   66 Jul  9 02:41 html                -- #默认站点目录
      drwxr-xr-x 2 root root   58 Jul 10 09:49 logs                -- #日志目录
      drwx------ 2 www  root    6 Jul  7 19:01 proxy_temp          -- #proxy临时文件目录
      drwxr-xr-x 2 root root   36 Jul  8 09:05 sbin                -- #nginx命令存放目录
      drwx------ 2 www  root    6 Jul  7 19:01 scgi_temp           -- #scgi临时文件目录
      drwx------ 2 www  root    6 Jul  7 19:01 uwsgi_temp          -- #uwsgi_temp临时文件目录
      
      2级查看:
      ├── client_body_temp                        #-- #临时文件目录
      ├── conf                                    #-- #配置文件目录
      │   ├── fastcgi.conf                        #-- #fastcgi 接口配置
      │   ├── fastcgi.conf.default                #-- #默认的 fastcgi 接口配置
      │   ├── fastcgi_params                      #-- # fastcgi指令目录
      │   ├── fastcgi_params.default              #-- # 默认的fastcgi指令目录
      │   ├── koi-utf
      │   ├── koi-win
      │   ├── mime.types
      │   ├── mime.types.default
      │   ├── nginx.conf
      │   ├── nginx.conf.default
      │   ├── scgi_params
      │   ├── scgi_params.default
      │   ├── uwsgi_params
      │   ├── uwsgi_params.default
      │   └── win-utf
      ├── fastcgi_temp
      ├── html
      │   ├── 50x.html
      │   ├── index.html
      │   └── www.chenleilei.net
      ├── logs
      │   ├── access.log
      │   ├── error.log
      │   └── nginx.pid
      ├── proxy_temp
      ├── sbin
      │   ├── nginx
      │   └── nginx.old
      ├── scgi_temp
      └── uwsgi_temp
      
      
      fastcgi_params 文件内容解释:
      ------------------------------------fastcgi_params-------------------------------------
      fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;#脚本文件请求的路径,也就是说当访问127.0.0.1/index.php的时候,需要读取网站根目录下面的index.php文件,如果没有配置这一配置项时,nginx不回去网站根目录下访问.php文件,所以返回空白
      fastcgi_param QUERY_STRING $query_string;                        #请求的参数;如?app=123
      fastcgi_param REQUEST_METHOD $request_method;                    #请求的动作(GET,POST)
      fastcgi_param CONTENT_TYPE $content_type;                        #请求头中的Content-Type字段
      fastcgi_param CONTENT_LENGTH $content_length;                    #请求头中的Content-length字段。
      fastcgi_param SCRIPT_NAME $fastcgi_script_name;                  #脚本名称 
      fastcgi_param REQUEST_URI $request_uri;                          #请求的地址不带参数
      fastcgi_param DOCUMENT_URI $document_uri;                        #与$uri相同。 
      fastcgi_param DOCUMENT_ROOT $document_root;                      #网站的根目录。在server配置中root指令中指定的值 
      fastcgi_param SERVER_PROTOCOL $server_protocol;                  #请求使用的协议,通常是HTTP/1.0或HTTP/1.1。
      fastcgi_param GATEWAY_INTERFACE CGI/1.1;                         #cgi 版本
      fastcgi_param SERVER_SOFTWARE nginx/$nginx_version;              #nginx 版本号,可修改、隐藏
      fastcgi_param REMOTE_ADDR $remote_addr;                          #客户端IP
      fastcgi_param REMOTE_PORT $remote_port;                          #客户端端口
      fastcgi_param SERVER_ADDR $server_addr;                          #服务器IP地址
      fastcgi_param SERVER_PORT $server_port;                          #服务器端口
      fastcgi_param SERVER_NAME $server_name;                          #服务器名,域名在server配置中指定的server_name
      fastcgi_param PATH_INFO $path_info;                             #可自定义变量
      ------------------------------------fastcgi_params-------------------------------------
      

    nginx 多虚拟主机配置(多站点配置)

    一个nginx如果只运行一个网站,在服务器配置低的时候还可以理解,如果是高配置服务器,那么资源就欧协浪费了,学习了本章虚拟主机后,你可以在服务器上配置多个网站

    多虚拟机主机第一种配置方法

    单个配置文件中配置多个站点

    vim nginx.conf   编辑配置文件
    
    ------------------------------------------------------------------------------------------
    worker_processes  1;
    events {
        worker_connections  1024;
    }
    http {
        include       mime.types;
        default_type  application/octet-stream;
        sendfile        on;
        keepalive_timeout  65;
        include /application/nginx/conf/extra/www.chenleilei.net.conf;   ## 独立web网站文件
    }
    
    
    查看独立网站配置:
    cat  /application/nginx/conf/extra/www.chenleilei.net.conf
    
    server {
        listen 80;
        server_name 10.0.0.20;
        root html;
        index index.html index.htm;
        location / {
            proxy_pass http://leilei;
            #index index.html index.htm;
        }
    }
    
    
    #------------------------------------------------------
      server {
          listen 80;
          server_name leilei01.com;           ##第一个web网站
          root    html/leilei01;
          index   index.html index.htm;
      }
    #------------------------------------------------------
      server {
          listen 80;
          server_name leilei02.com;           ## 第二个web网站
          root    html/leilei02;                                                               
          index   index.html index.htm;
      }
    #------------------------------------------------------
      server {
          listen 80;
          server_name leilei03.com;           ## 第三个web网站
          root    html/leilei03;
          index   index.html index.htm;
      }
    #------------------------------------------------------
    }
    ------------------------------------------------------------------------------------------
    
    如果本地演示配置,请在hosts文件配置解析
    配置完成后,三个网站就配置完成了,你需要要
    

    多虚拟机主机第二种配置方法

    站点很多的时候全部放在一个配置文件中会产生问题

    提升委会成本,如果将每个网站配置为一个独立的配置文件,这样管理也比较方便

    多站点配置前面已经写过,这里详细讲解

    多站点配置在于一个nginx.conf主配置文件引入其他配置文件操作方式如下:
    
    第一步: 过滤网站默认配置文件,取出需要的配置
    
    egrep -v  "#|^$" /application/nginx/conf/nginx.conf.default
    ----------------------------------------------------------------------------------
    [root@leilei conf]#  egrep -v  "#|^$" /application/nginx/conf/nginx.conf.default | cat -n
    1	worker_processes  1;
    2	events {
    3	    worker_connections  1024;
    4	}
    5	http {
    6	    include       mime.types;
    7	    default_type  application/octet-stream;
    8	    sendfile        on;
    9	    keepalive_timeout  65;
    10	    server {
    11	        listen       80;
    12	        server_name  localhost;
    13	        location / {
    14	            root   html;
    15	            index  index.html index.htm;
    16	        }
    17	        error_page   500 502 503 504  /50x.html;
    18	        location = /50x.html {
    19	            root   html;
    20	        }
    21	    }
    22	}
    
    ----------------------------------------------------------------------------------
    我们需要server块即可,所以我们取出server区段,每个区段 都以 { } 括起来 ,从上面可以看到 10-16 行就是我们想要的配置文件,所以我们要过滤它,但是这时候我们需要确定我们新站点配置文件存放在哪儿??
    我们可以选择在 /application/nginx/conf/ 新建一个 extra 目录用于统一存放网站配置文件
    
    mkdir -p /application/nginx/conf/extra
    
    现在开始使用管道符 | 加上 sed 命令 过滤默认配置 nginx.conf.default 文件中 10,16 行到新的目录extra中 以我们网站为域名的文件中
    如:
    
    egrep -v  "#|^$" /application/nginx/conf/nginx.conf.default | sed -n '10,16p'
    -------------------------------------------------------------------------------
        server {
            listen       80;
            server_name  localhost;
            location / {
                root   html;
                index  index.html index.htm;
            }
    -------------------------------------------------------------------------------
    
    看到还缺少一个符号 }  我们先直接追加到 以我们网站域名为配置文件的文件中,后续在追加 }
    
    egrep -v  "#|^$" /application/nginx/conf/nginx.conf.default | sed -n '10,16p' >/application/nginx/conf/extra/www.chenleilei.net.conf
    
    检查配置文件的内容:
    
    cat /application/nginx/conf/extra/www.chenleilei.net.conf
    
    	    server {
            listen       80;
            server_name  localhost;
            location / {
                root   html;
                index  index.html index.htm;
            }
    
    追加少的符号 }
    
    echo "}" >>/application/nginx/conf/extra/www.chenleilei.net.conf
    
    重新检查配置文件:
    [root@leilei extra]# cat www.chenleilei.net.conf 
    -------------------------------------------------------------------------------
    server {
        listen 80;
        server_name  localhost;
        location / {
                root   html;
                index  index.html index.htm;
            }
            }
    -------------------------------------------------------------------------------
    
    新的配置文件已经产生,但是我们还需要考虑到问题又两个:
    1. 站点目录设置
    2. 域名设置
    
    我们可以通过修改 server_name 项 改为自己的域名
    默认网站目录为 html 
    创建一个以自己网站域名为名称的目录,利于我们区分自己的网站目录在哪儿,我们统一放在/application/nginx/html
    目录中
    
    创建站点目录:
    mkdir -p /application/nginx/html/www.chenleilei.net/
    
    创建完成后来到 www.chenleilei.net.conf 配置文件中继续配置我们的网站 这次我们改为:
    -------------------------------------------------------------------------------
    server {
        listen 80;
        server_name  www.chenleilei.net;        
        location / {
                root   html/www.chenleilei.net;
                index  index.html index.htm;
            }
            }
    -------------------------------------------------------------------------------
    
    设置完成后我们通过  nignx -s reload 重新载入配置文件
    新增测试文件:
    echo "www.chenleilei.net" >>/application/nginx/html/www.chenleilei.net/index.html
    
    通过访问你看到自己的域名显示在浏览器中则代表成功
    多多练习,通过学习可以让你懂得更多,加油读者们
    

    访问结果:

    nginx状态页配置

    状态页面是一个较为简单查看nginx服务器状态的内置指令。

    使用它来了解我们web服务的状态

    新创建一个nginx配置文件,或者我们写如nginx.conf中也行,这里我就写一个新的站点配置

    通过复制其他站点文件来生成新的配置文件,然后去著配置文件nginx.conf来调用我们新的状态配置文件,写法如下:
    
     cp www.chenleilei.net.conf status.conf
     
     编辑新的配置文件 status.conf
    
    仅保留如下内容:
    -------------------------------------
     server {                                                                                   
        listen 81;
        server_name  10.0.0.20;
        stub_status;
    }
    -------------------------------------
    
    我是在虚拟主机配置所以我直接写IP就行了,网友们可以使用域名 比如解析一个新域名 status.xxx.com 到 你的服务器ip地址,然后80端口依然保留
    
    如:
     server {                                                                                   
        listen 80;
        server_name  status.xxx.net;
        stub_status;
    }
    
    配置完成后保存 然后重新载入配置文件,访问你的域名来看看nginx状态
    

    访问检查:

    nginx日志切割配置

    运维必须有看日志的能力,日志就像病人来看病表现出来的状态,我们要通过这些状态判断病人如何才能得到妥当的医治。如果我们无法了解日志,在突发故障面前我们将束手无策

    默认的nginx日志都会写入到一个配置文件,在日志量太大的时候我们找寻错误就会比较麻烦,为了避免这总问题的产生,为此我们需要对现有的日志进行切割,以保证日志查询的灵活性

    nginx默认日志路径:/nginx/logs/

    [root@leilei logs]# ll
    total 40
    -rw-r--r-- 1 root root 26673 Jul 10 18:39 access.log     #nginx访问日志
    -rw-r--r-- 1 root root  7919 Jul 10 18:39 error.log      #nginx错误日志
    -rw-r--r-- 1 root root     6 Jul 10 09:49 nginx.pid      #nginx进程pid号文件
    注意: nginx停止后,这个nginx.pid文件将会消失
    

    nginx日志级别分类

    日志级别 说明
    debug 一般都是系统信息
    info 重要的输出信息
    notice 通知信息
    warn 出些一些故障但是不影响
    error 系统出现错误
    crit 也就是记录最少错误信息

    日志规则解释和配置:

    vim www.chenleilei.net.conf

    因为我们过滤到了一些配置,我们需要找日志格式配置需要去默认配置文件中寻找,也就是:nginx.conf.default
    找到:
    -----------------------------------------------------------------------------------
    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';
    
    #access_log  logs/access.log  main;
    -----------------------------------------------------------------------------------
    
    这段就是我们需要的配置,粘贴时我们需要去掉开头的 # 号 解除注释才会生效
    
    vim 
    #日志格式定义
      log_format  main  '$remote_addr - $remote_user [$time_local] "$request" ' 
                        '$status $body_bytes_sent "$http_referer" '
                        '"$http_user_agent" "$http_x_forwarded_for"';
      
      access_log  logs/access.log  main;
    #日志格式定义
    
    

    变量解释:

    变量名称 变量描述 举例说明
    $remote_addr 客户端地址 113.140.15.90
    $remote_user 客户端用户名称 -
    $time_local 访问时间和时区 18/Jul/2012:17:00:01 +0800
    $request 请求的URI和HTTP协议 "GET /pa/img/home/logo-alipay-t.png HTTP/1.1"
    $http_host 请求地址,即浏览器中你输入的地址(IP或域名) img.alipay.com10.253.70.103
    $status HTTP请求状态 200
    $upstream_status upstream状态 200
    $body_bytes_sent 发送给客户端文件内容大小 547
    $http_referer 跳转来源 "https://www.chenleilei.net"
    $http_user_agent 用户终端代理 "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; SV1; GTB7.0; .NET4.0C;
    $ssl_protocol SSL协议版本 TLSv1
    $ssl_cipher 交换数据中的算法 RC4-SHA
    $upstream_addr 后台upstream的地址,即真正提供服务的主机地址 10.228.35.247:80
    $request_time 整个请求的总时间 0.205
    $upstream_response_time 请求过程中,upstream响应时间 0.002

    日志切割配置

    1. 在 /scripts 目录 创建脚本 cut_log.sh 编写如下:
    
    #-------------------------------------------------------------#
    #!/bin/bash
    #用于切割nginx访问日志
    if [ ! -d "/application/nginx/logs/history" ]; then
      mkdir -p /application/nginx/logs/history
    fi
    
    LOGS_PATH=/application/nginx/logs/history
    CUR_LOGS_PATH=/application/nginx/logs
    shijian=$(date -d "yesterday" +%Y-%m-%d)
    mv ${CUR_LOGS_PATH}/access.log ${LOGS_PATH}/chenleilei_access_${shijian}.log
    
    ##向nginx主进程发送USR1的重载信号,USR1就是重新打开日志文件
    kill -USR1 $(cat /application/nginx/logs/nginx.pid)
    #-------------------------------------------------------------#
    
    保存为cut_log.sh 并添加可执行权限:
    chmod +x cut_log.sh
    
    
    2.添加计划任务 每天晚上0点执行【centos7计划任务文件/etc/crontab】
    echo "00 00 * * * /bin/bash /scripts/cut_log.sh" >> /etc/crontab
    

    常见状态码说明

    状态码 说明
    301 重定向
    302 重定向
    304 目标网站有缓存
    400 请求头过大
    500 一般都是web配置错误,查看错误日志来解决,也有可能是ulimit打开文件限制,修改/etc/security/limits.conf
    502 php fastcgi进程数不够用,或者内存不足 php max_children值不够用 内存溢出
    503 流量限制

    nginx gzip压缩配置

    网站通常在打开的时候加载各类图片,css等,这些内容可以被压缩显示,这里我会告诉大家如何配置压缩

    配置gzip压缩

    vim nginx.conf

    在http区块 或者 server区块种添加以下代码

    gzip on;
    gzip_min_length 1;        #小于1b 不会被压缩
    gzip_comp_level 2;        #压缩等级 2 压缩等级越高,图片质量越差 等级分为 [1-9],等级越高消耗时间越长
    gzip_types text/plain application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;      #允许被压缩的文件类型
    

    共享资源 显示目录和文件[显示文件列表]

    是指用户访问网站会显示出文件的列表

    [root@leilei html]# vim /application/nginx/conf/nginx.conf
    
    在server区块
    
    root /application/nginx/html/1;      ##指定一个绝对目录
    autoindex on;                        ##开启目录浏览
    autoindex_exact_size off;            ##关闭详细文件大小统计,让文件大小显示MB,GB单位,默认为b; 
    autoindex_localtime on;				 ##开启以服务器本地时区显示文件修改日期!
    
    

    nginx带宽限制

    配置想用户返回响应的速度,每秒传输的数据。
    
    通过内内置变量:
    
    location / {
    set $limit_rate 1k;
    }
    

    nginx日志配置

    定义日志格式

    模块:

    access_log所在的位置,决定了该位置的日志记录。
    
    日志格式:
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
                      
    
    注意: 这里的 main 就是记录的格式
    
    比如说:
    error.log   logs/access.log  main;
    
    这里的error.log就是使用的 main里定义的日志格式
    
    参数                      说明                                         示例
    $remote_addr             客户端地址                                    211.28.65.253
    $remote_user             客户端用户名称                                --
    $time_local              访问时间和时区                                18/Jul/2012:17:00:01 +0800
    $request                 请求的URI和HTTP协议                           "GET /article-10000.html HTTP/1.1"
    $http_host               请求地址,即浏览器中你输入的地址(IP或域名)     www.wang.com 192.168.100.100
    $status                  HTTP请求状态                                  200
    $upstream_status         upstream状态                                  200
    $body_bytes_sent         发送给客户端文件内容大小                        1547
    $http_referer            url跳转来源                                 https://www.baidu.com/
    $http_user_agent         用户终端浏览器等信息                           "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; SV1; GTB7.0; .NET4.0C;
    $ssl_protocol            SSL协议版本                                   TLSv1
    $ssl_cipher              交换数据中的算法                               RC4-SHA
    $upstream_addr           后台upstream的地址,即真正提供服务的主机地址     10.10.10.100:80
    $request_time            整个请求的总时间                               0.205
    $upstream_response_time  请求过程中,upstream响应时间                    0.002
    

    微信赞赏

    支付宝赞赏

  • 相关阅读:
    js函数柯理化
    Promise异步编程解决方案
    set和map结构,class类
    原创:用node.js搭建本地服务模拟接口访问实现数据模拟
    原创:微信小程序如何使用自定义组件
    原创:微信小程序开发要点总结
    Nodejs CMS——基于 NestJS/NuxtJS 的完整开源项目
    浅谈js对象之数据属性、访问器属性、Object.defineProperty方法
    Promise初步详解(resolve,reject,catch)
    原生js面向对象实现简单轮播
  • 原文地址:https://www.cnblogs.com/superlinux/p/12598500.html
Copyright © 2020-2023  润新知