zoukankan      html  css  js  c++  java
  • Nginx实践:(1) Nginx安装及日志配置

    1. 安装

    (1)  Nginx下载地址:https://nginx.org/download/nginx-1.14.0.tar.gz

    (2)  安装时可能出现依赖库不存在,比如prec包,可以使用yum install pcre pcre-devel进行安装。安装的整体命令如下:

    cd /usr/local/src
    # 下载
    wget https://nginx.org/download/nginx-1.14.0.tar.gz
    tar -zxvf nginx-1.14.0.tar.gz
    cd nginx-1.14.0
    # 编译安装
    ./configure --prefix=/usr/local/nginx
    make && make install  

    2. 启动

    (1) 安装后,进入/usr/local/nginx可以看到如下目录:

      a. conf: 配置文件

      b. html: 网页文件

      c. logs: 日志文件

      d. sbin: 主要二进制程序

      注意:启动时可能会遇到 nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use) 异常,表示80端口已被占用,原因可能是先前已经安装了nginx、apache等,更多情况是操作系统自带了apache并作为服务启动。解决方法是将占用80端口的软件或服务关闭即可。

    3. Nginx信号控制

    (1) Nginx控制信号选项如下: 

    TERM, INT 快速关闭
    QUIT 优雅关闭进程,即等待请求结束后再关闭
    HUP 配置文件更改后,平滑地重读配置文件
    USR1 重读日志,在日志按月/日分割时有用
    USR2 平滑地升级
    WINCH 优雅地关闭旧的进程(配合USR2来进行升级)

      具体命令格式:1) kill -信号选项 nginx的主进程号 或 2) kill -信号选项 `cat /your/path/log/nginx.pid`

      例:

      1) 快速关闭nginx:kill -INT `cat ./logs/nginx.pid`

      2) 平滑重读配置文件:

      a. 在nginx.conf中增加ab.html的配置(如下)

    server {
            listen       80;
            server_name  localhost;
    
        access_log  logs/host.access.log  main;
    
            location / {
                root   html;
                index  ab.html index.html index.htm;
            }
    
            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                root   html;
            }      
        }
    View Code

      b. ab.html的内容如下:

    <html>
    only test for HUP
    <script>
         <!-- 链接赋值给自身,执行刷新操作 -->
         window.location.href = "/";
    </script>
    </html>
    View Code  

      c. 访问localhost,使用kill -HUP `cat ./logs/nginx.pid`重读配置文件,等待几秒,即可看到页面信息从"Welcome to nginx!"转换为"only test for HUP"页面信息

      3) 重读日志:

      a. 查看2)中配置的host.access.log,如果使用mv host.access.log host.access.log.bak,可以发现日志仍然会向host.access.log.bak文件中记录,原因是linux的文件指向的是Inode文件标识符,名称的改变并不能改变inode信息。

      b. 使用kill -USR1 `cat ./logs/nginx.pid`,再访问localhost,即可发现日志不再向host.access.log.bak中写入,而向新建的host.access.log中写入

     4. Nginx配置

    Nginx配置段如下:

    ##### 全局区
    # 有1个工作子进程,可以自行修改,但太大无益,因为要争夺CPU,一般设置为CPU数*核数
    worker_processes 1; events {
    // 此处一般配置nginx连接的特性,如一个worker能同时允许多少链接 worker_connections
    1024; // 一个子进程最大允许连1024个连接 } http {
    // 此处是配置http服务器的主要段 include mime.types; default_type application
    /octet-stream; 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; sendfile on; keepalive_timeout 65; server {
         // 此处为虚拟主机段 listen
    80; // 监听端口 server_name localhost; // 监听域名 access_log logs/host.access.log main; location / {
           // 定位,把特殊的路径或文件再次定位,如image目录单独处理 root html; // 根目录定位 index ab.html index.html index.htm; } error_page
    500 502 503 504 /50x.html; location = /50x.html { root html; } } }

     5. 日志管理

    基于nginx配置文件,可以看到nginx的Server段包含"access_log logs/host.access.log main;"信息,其含义为该server的访问日志的文件是logs/host.access.log,使用的格式为"main"格式。除了"main"格式,也可以自定义格式。main格式的信息如下:

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                          '$status $body_bytes_sent "$http_referer" '
                          '"$http_user_agent" "$http_x_forwarded_for"';

    main格式是我们定义好的日志格式,并起个名字,便于引用。

    (1) 日志格式包含的选项:

    a. $remote_addr是指远程地址

    b. $remote_user是指远程用户

    c. $time_local是指用户时间

    d. $request是指请求方法,如GET/POST

    e. $status是指请求状态,如200, 404

    f. $body_bytes_sent是指请求体body长度

    g. $http_referer是指referer来源信息,如上一级页面

    h. $http_user_agent是指用户代理信息,如代理信息、浏览器信息等

    i. $http_x_forwarded_for是指经过代理时,代理将本来的IP加在此头信息中,传输你的原始IP

    (2) 自定义日志格式

    自定义日志格式的形式为:log_format mylog '$remote_addr'。Nginx允许针对不同的server制定不同的日志格式(lighttp)。在server段,可以使用如下格式来记录该server对应的日志:

    声明log log位置 log格式; 例如:access_log logs/access_8080.log mylog; 

    (3) 实际应用,定时按照日志存储某个server日志

    run.sh脚本信息如下:

    #!/bin/bash
    
    base_path='/usr/local/nginx/log'
    log_path=$(date -d yesterday +"%d")
    mkdir -p $base_path/$log_path
    mv $base_path/access.log $base_path/$log_path/access_$day.log
    kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`
    View Code

    crontab 定时任务:01 00 * * * /***/path/run.sh,即每天0时1分执行(建议在02-04点之间执行,系统负载较小)

  • 相关阅读:
    C# DES加密解密
    VC SOCKET 压缩通信学习
    ASPX一句话爆破工具
    VC读取文件内容
    VC查找字符串
    (学习记录)代码注入之远程线程篇
    WINSOCK 传送文件
    VC数据类型
    占用字节数求法
    HDU
  • 原文地址:https://www.cnblogs.com/mengrennwpu/p/9403768.html
Copyright © 2011-2022 走看看