nginx代理下载日志

背景:

我们公司在客户环境部署了一套业务系统,前端是一台单独的nginx服务器,后端有四台业务服务器跑java程序。因为客户那边是纯内网环境,每次出问题看日志都是个麻烦事,所以研发提出了这个需求。

IP 服务
192.168.2.10 nginx
192.168.2.11 java1
192.168.2.12 java2

一、nginx暴露日志目录

在业务机器上部署一个nginx来提供http方式访问日志目录和文件。宿主机日志路径是/root/logs

docker run -d \
  --name nginx-logs \
  -p 7100:80 \
  -v /root/logs:/usr/share/nginx/html:ro \
  -v /root/nginx/nginx.conf:/etc/nginx/nginx.conf:ro \
  nginx:1.25.0

nginx配置内容如下

events {}

http {
    server {
        listen 80;
        server_name localhost;

        # 专门匹配以 .log 结尾的文件,设置为下载
        location ~ \.log$ {
            root /usr/share/nginx/html;
            add_header Content-Type application/octet-stream;
            add_header Content-Disposition 'attachment; filename="$uri"';
        }

        location / {
            root /usr/share/nginx/html;
            autoindex on;
            autoindex_exact_size off;
            autoindex_localtime on;
        }
    }
}

访问验证

所有后端业务服务器上都是以上的操作,用nginx暴露http日志路访问。

二、在前端nginx上代理访问

 我这边也启动一个nginx做示例

docker run -d \
  --name nginx-proxy \
  -p 7100:80 \
  -v /root/nginx/nginx.conf:/etc/nginx/nginx.conf:ro \
  nginx:1.25.0

nginx配置内容如下:

events {}

http {
    server {
        listen 7100;

        location /yewu1/ {
            proxy_pass http://192.168.2.11:7100/;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

            # 修正路径匹配问题
            proxy_redirect off;
        }

        location /yewu2/ {
            proxy_pass http://192.168.2.12:7100/;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

            # 修正路径匹配问题
            proxy_redirect off;
        }
  } 
}

 此处设计的是浏览器访问http://192.168.2.10/yewu1/跳转到第一台业务服务器的日志web,访问http://192.168.2.10/yewu2/跳转到第二台业务服务器的日志web。

posted @ 2025-05-23 11:31  高佳丰  阅读(35)  评论(0)    收藏  举报