广告图片
TOP云-靠谱的企业级公有云服务平台

云服务器、物理服务器、云安全、SSL证书限时3折抢购!

双路E5-2640V4(40核)64G内存480G SSD硬盘30M独享带宽物理机仅需368元;香港铂金云服务器2H/2G/15M仅需19.8元/月;4H/4G/25M仅需29.8元/月,

TOP云-靠谱的企业级公有云服务平台:双路E5-2640V4(40核)64G内存480G SSD硬盘30M独享带宽物理机仅需368元;香港铂金云服务器2H/2G/15M仅需19.8元/月;4H/4G/25M仅需29.8元/月,云服务器、物理服务器、云安全、SSL证书限时3折抢购!点击这里立即抢购! 展开广告

TOP云物理服务器特惠,CPU可选双路E5-2660(32核)、双路E5-2680v2(40核)、双路E5-2696/98 V4(88核)、双路Gold 6138(80核)、双路Platinum 8173(112核);
内存从32G-128G可选,带宽有单线、多线独享20M-200M,价格低至368元。
购买链接:https://c.topyun.vip/cart?fid=1&gid=236

  在服务器运维中,监控端口访问情况是排查故障、分析流量和保障安全的关键环节。无论是Web服务(如Nginx)的HTTP请求,还是数据库、API的TCP连接,通过日志和系统工具可以快速定位问题根源。本文将详细介绍两种核心方法:通过Nginx的access_log分析HTTP访问,以及使用netstat/ss命令查看实时端口连接,助您全面掌握服务器端口活动。推荐搭配TOP云物理服务器特惠机型(立即选购),享受高性能硬件与便捷日志管理的双重优势。

一、Nginx access_log:记录HTTP访问的详细日志

1. access_log的作用与位置

  • 作用:记录所有通过Nginx处理的HTTP/HTTPS请求,包括客户端IP、访问时间、请求URL、响应状态码、用户代理(User-Agent)等。
  • 默认路径:通常位于/var/log/nginx/access.log(Linux系统),具体路径可通过Nginx配置文件(nginx.conf或虚拟主机配置)确认:
    Nginx

    http {
        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 /var/log/nginx/access.log main;
    }

2. 查看access_log的常用命令

方法1:直接查看最新日志

Bash

# 实时跟踪日志更新(按Ctrl+C退出)
tail -f /var/log/nginx/access.log

# 查看最近100条日志
tail -n 100 /var/log/nginx/access.log

方法2:按关键词筛选日志

Bash

# 筛选特定IP的访问记录(如192.168.1.100)
grep "192.168.1.100" /var/log/nginx/access.log

# 统计404错误请求数量
grep " 404 " /var/log/nginx/access.log | wc -l

# 按访问量排序(统计每个URL的访问次数)
awk '{print $7}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -20

方法3:使用日志分析工具

  • GoAccess:实时生成可视化HTML报告,支持按IP、URL、状态码等维度分析。
    Bash

    # 安装GoAccess(Ubuntu/Debian)
    sudo apt install goaccess
    # 生成报告并输出到浏览器
    goaccess /var/log/nginx/access.log -a -o report.html --log-format=COMBINED

3. 自定义access_log格式

通过修改log_format可记录更多信息(如请求耗时、上游服务器响应时间):

Nginx

log_format extended '$remote_addr - $remote_user [$time_local] "$request" '
                   '$status $body_bytes_sent "$http_referer" "$http_user_agent" '
                   '$request_time $upstream_response_time';
access_log /var/log/nginx/access.log extended;
  • 字段说明
    • $request_time:请求处理总时间(秒)。
    • $upstream_response_time:后端服务器响应时间(适用于反向代理场景)。

二、系统工具netstat/ss:查看实时端口连接状态

1. netstat:传统网络状态工具

作用:显示所有活动的网络连接、路由表、接口统计等信息,支持TCP/UDP协议。

常用命令

Bash

# 查看所有监听中的端口(包括TCP/UDP)
netstat -tulnp

# 查看所有TCP连接(包括ESTABLISHED、TIME_WAIT等状态)
netstat -tanp

# 筛选特定端口的连接(如80端口)
netstat -tanp | grep ":80 "

# 统计每个端口的连接数
netstat -tan | awk '{print $4}' | cut -d: -f2 | sort | uniq -c | sort -nr

输出字段说明

  • Proto:协议类型(TCP/UDP)。
  • Local Address:本地监听地址和端口。
  • Foreign Address:远程客户端地址和端口。
  • State:连接状态(如LISTENESTABLISHEDTIME_WAIT)。
  • PID/Program name:占用端口的进程ID和名称(需-p参数)。

2. ss:netstat的现代替代工具

优势:速度更快、输出更简洁,支持更多过滤选项。

常用命令

Bash

# 查看所有监听端口(等效于netstat -tulnp)
ss -tulnp

# 查看所有TCP连接(等效于netstat -tanp)
ss -tanp

# 筛选特定状态的连接(如ESTABLISHED)
ss -tanp state established

# 显示详细的连接信息(包括收发队列长度)
ss -tanp -i

3. 结合日志与连接状态排查问题

场景示例

  1. 问题:Web服务(80端口)无法访问。
  2. 排查步骤
    • 使用ss -tulnp | grep ":80"确认Nginx是否监听端口。
    • 使用netstat -tanp | grep ":80"查看是否有异常连接(如大量TIME_WAITCLOSE_WAIT)。
    • 通过tail -f /var/log/nginx/access.log观察实时请求是否到达服务器。

三、TOP云物理服务器日志管理优化建议

为提升日志分析效率,推荐以下配置(立即购买):

  1. 选择高内存机型存储日志
    • 双路E5-2696/98 V4(88核)+ 128G内存:适合需要长期存储大量日志并实时分析的场景。
    • 双路Platinum 8173(112核):极致性能,支持日志处理工具(如ELK Stack)的并行化分析。
  2. 搭配多线独享带宽
    • 避免日志传输因网络拥堵延迟,多线(如BGP)可确保日志从服务器到监控系统的稳定传输。
    • 推荐带宽:日志量大的服务选100M以上独享带宽。
  3. 使用云平台日志服务
    • 在TOP云控制台开通日志服务,自动收集Nginx和系统日志,提供关键词告警、趋势分析等功能。

四、常见问题解答

Q1:access_log文件过大如何处理?

  • 日志轮转:通过logrotate工具定期切割日志(示例配置):
    Bash

    # /etc/logrotate.d/nginx
    /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
    }

Q2:netstat/ss显示端口被占用但无进程?

  • 可能原因:僵尸进程或内核模块占用端口。
  • 解决方案
    Bash

    # 查找占用端口的内核线程(以80端口为例)
    lsof -i :80 | grep -v "nginx"
    # 若为内核模块,尝试重启服务或卸载模块

Q3:如何记录HTTPS(SSL)请求的详细信息?

  • 在Nginx配置中为SSL站点单独设置access_log,并启用$ssl_protocol$ssl_cipher等字段:
    Nginx

    server {
        listen 443 ssl;
        server_name example.com;
        log_format ssl_log '$remote_addr - $remote_user [$time_local] "$request" '
                           '$status $body_bytes_sent "$http_referer" "$http_user_agent" '
                           '$ssl_protocol/$ssl_cipher';
        access_log /var/log/nginx/ssl-access.log ssl_log;
        # SSL配置...
    }

立即行动:选购TOP云物理服务器,通过精细化日志管理,打造高效、安全的服务器运维体系!
点击购买

阿, 信