从安装到上线:一份 Nginx 实战指南,让你的 Web 应用稳建安全(五)


引言


在之前的四篇文章中,我们详细探讨了 Nginx 的安装、基础配置、性能优化以及安全加固等多个方面。从最初的安装步骤,到配置文件的深入解析,再到性能调优的技巧,以及安全防护的实践,每一步都旨在帮助读者构建一个稳定、高效且安全的 Web 应用环境。现在,我们迎来了第五篇,将聚焦于 Nginx 的监控与日志管理,这是确保 Web 应用持续稳定运行的关键环节。通过有效的监控和日志分析,我们可以及时发现潜在问题,优化性能,并增强安全性。


监控 Nginx 性能

使用内置模块监控


Nginx 提供了丰富的内置模块,其中 ngx_http_stub_status_module 是一个强大的工具,用于监控服务器的实时状态。要启用该模块,首先需要在编译 Nginx 时添加 --with-http_stub_status_module 参数。如果已经安装 Nginx,可以通过检查编译参数来确认是否支持:


bash

Copy Code

nginx -V | grep --color=auto http_stub_status_module



如果输出中包含 http_stub_status_module,则表示支持。接下来,在 http 块中添加以下配置:


nginx

Copy Code

server {

    listen 80;

    server_name localhost;


    location /nginx_status {

        stub_status on;

        access_log off;

        allow 127.0.0.1;

        deny all;

    }

}



配置完成后,重启 Nginx 并访问 http://localhost/nginx_status,你将看到类似以下的输出:


text

Copy Code

Active connections: 1 

server accepts handled requests

 2 2 3 

Reading: 0 Writing: 1 Waiting: 0


Active connections‌:当前活跃的连接数。

server accepts handled requests‌:服务器接受、处理和完成的请求数。

Reading/Writing/Waiting‌:分别表示正在读取、写入和等待的请求数。

使用第三方工具监控


除了内置模块,还可以利用第三方工具如 nginx-module-vts(Virtual Host Traffic Status Module)进行更详细的监控。该模块提供了丰富的指标,包括请求数、响应时间、带宽使用等。安装步骤如下:


下载并编译模块:

bash

Copy Code

git clone https://github.com/vozlt/nginx-module-vts.git

cd nginx-module-vts

./configure --with-http_stub_status_module

make && make install


在 Nginx 配置中添加:

nginx

Copy Code

http {

    vhost_traffic_status_zone zone=one:10m;

    server {

        listen 80;

        server_name localhost;

        location /status {

            vhost_traffic_status_display;

            vhost_traffic_status_display_filter_by_set_key $host;

            access_log off;

            allow 127.0.0.1;

            deny all;

        }

    }

}



访问 http://localhost/status 将显示详细的监控数据,包括每个虚拟主机的请求统计。


日志管理

访问日志


访问日志记录了所有请求的详细信息,包括客户端 IP、请求时间、请求方法、URL 等。默认情况下,访问日志位于 /var/log/nginx/access.log。可以通过以下配置自定义日志格式:


nginx

Copy Code

http {

    log_format main '$remote_addr - $remote_user [$time_local] '

                    '"$request" $status $body_bytes_sent '

                    '"$http_referer" "$http_user_agent"';


    server {

        access_log /var/log/nginx/access.log main;

    }

}


错误日志


错误日志记录了 Nginx 运行过程中的错误和警告信息,对于排查问题至关重要。默认位置为 /var/log/nginx/error.log。可以通过以下配置调整日志级别:


nginx

Copy Code

error_log /var/log/nginx/error.log warn;



日志级别从低到高依次为:debug、info、notice、warn、error、crit、alert、emerg。


日志切割


随着时间推移,日志文件会变得越来越大,因此需要定期切割。可以使用 logrotate 工具:


创建配置文件 /etc/logrotate.d/nginx:

text

Copy Code

/var/log/nginx/*.log {

    daily

    missingok

    rotate 14

    compress

    delaycompress

    notifempty

    create 0640 www-data adm

    sharedscripts

    postrotate

        [ -f /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid`

    endscript

}


测试配置:

bash

Copy Code

logrotate -f /etc/logrotate.d/nginx


日志分析与优化

使用 awk 分析日志


awk 是一个强大的文本处理工具,可以用于分析日志。例如,统计访问量最高的 URL:


bash

Copy Code

awk '{print $7}' access.log | sort | uniq -c | sort -nr | head -n 10


使用 GoAccess 实时分析


GoAccess 是一个实时日志分析工具,支持多种日志格式。安装步骤如下:


安装:

bash

Copy Code

sudo apt-get install goaccess


运行:

bash

Copy Code

goaccess access.log -o /var/www/html/access_report.html --log-format=COMBINED



访问 http://localhost/access_report.html 查看实时分析报告。


使用 ELK Stack 集中管理


对于大型应用,可以使用 ELK Stack(Elasticsearch、Logstash、Kibana)进行集中日志管理:


安装 Elasticsearch:

bash

Copy Code

sudo apt-get install elasticsearch


安装 Logstash:

bash

Copy Code

sudo apt-get install logstash


配置 Logstash:


创建配置文件 /etc/logstash/conf.d/nginx.conf:


text

Copy Code

input {

    file {

        path => "/var/log/nginx/access.log"

        start_position => "beginning"

    }

}


filter {

    grok {

        match => { "message" => "%{COMBINEDAPACHELOG}" }

    }

}


output {

    elasticsearch {

        hosts => ["localhost:9200"]

    }

}


启动 Logstash:

bash

Copy Code

sudo systemctl start logstash


安装 Kibana:

bash

Copy Code

sudo apt-get install kibana


配置 Kibana:


编辑 /etc/kibana/kibana.yml,设置 elasticsearch.hosts: ["http://localhost:9200"],然后启动 Kibana:


bash

Copy Code

sudo systemctl start kibana



访问 http://localhost:5601 查看日志数据。


总结


通过本篇指南,我们深入探讨了 Nginx 的监控与日志管理。从使用内置模块和第三方工具进行实时监控,到配置访问日志和错误日志,再到利用 awk、GoAccess 和 ELK Stack 进行日志分析与优化,每一步都旨在帮助读者构建一个稳定、高效且安全的 Web 应用环境。有效的监控和日志管理不仅能够及时发现和解决问题,还能为性能优化和安全加固提供数据支持。希望本指南能够帮助读者更好地掌握 Nginx 的监控与日志管理技巧,为 Web 应用的稳定运行保驾护航。