当前位置: 首页 > news >正文

【NGINX代理附件上传服务配置优化】

如果后端是 Tomcat,并且你需要处理大文件上传,以下是一个完整的 Nginx 配置文件示例。这个配置文件会处理大文件上传的超时问题,并将请求代理到后端的 Tomcat 服务器。

完整的 Nginx 配置文件

# 全局配置
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /var/run/nginx.pid;

events {
    worker_connections 1024;
}

http {
    # 设置客户端请求体的最大大小(例如 100MB)
    client_max_body_size 100M;

    # 设置读取客户端请求体的超时时间(例如 300 秒)
    client_body_timeout 300s;

    # 设置客户端请求头的超时时间(例如 300 秒)
    client_header_timeout 300s;

    # 设置 Nginx 发送响应到客户端的超时时间(例如 300 秒)
    send_timeout 300s;

    # 启用高效文件传输模式
    sendfile on;

    # 开启 TCP_NOPUSH,减少网络包数量
    tcp_nopush on;

    # 开启 TCP_NODELAY,禁用 Nagle 算法
    tcp_nodelay on;

    # 设置 keepalive 超时时间
    keepalive_timeout 65;

    # 设置 MIME 类型
    include /etc/nginx/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 /var/log/nginx/access.log main;

    # 定义上游服务器(Tomcat)
    upstream tomcat_backend {
        server 127.0.0.1:8080;  # 假设 Tomcat 运行在本地 8080 端口
    }

    # 虚拟主机配置
    server {
        listen 80;
        server_name example.com;  # 替换为你的域名或 IP

        # 设置上传路径
        location /upload {
            # 代理到 Tomcat
            proxy_pass http://tomcat_backend;

            # 设置代理超时时间
            proxy_connect_timeout 300s;  # 连接 Tomcat 的超时时间
            proxy_read_timeout 300s;     # 读取 Tomcat 响应的超时时间
            proxy_send_timeout 300s;     # 发送请求到 Tomcat 的超时时间

            # 设置代理头信息
            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_set_header X-Forwarded-Proto $scheme;
        }

        # 静态文件处理
        location /static/ {
            alias /path/to/static/files/;  # 替换为静态文件的实际路径
            expires 30d;  # 设置缓存时间
        }

        # 默认错误页面
        error_page 500 502 503 504 /50x.html;
        location = /50x.html {
            root /usr/share/nginx/html;
        }
    }
}

关键配置说明

  1. client_max_body_size 100M;
    允许客户端上传最大 100MB 的文件。如果需要更大的文件,可以调整为 500M1G

  2. client_body_timeout 300s;
    设置客户端请求体的超时时间为 300 秒,适用于大文件上传。

  3. proxy_pass http://tomcat_backend;
    将请求代理到后端的 Tomcat 服务器。

  4. proxy_read_timeout 300s;proxy_send_timeout 300s;
    设置与 Tomcat 通信的超时时间,避免大文件上传时超时。

  5. proxy_set_header
    确保正确的请求头信息传递给 Tomcat,特别是 HostX-Real-IP,以便 Tomcat 能够正确处理请求。

  6. 静态文件处理
    如果有一些静态文件(如图片、CSS、JS),可以通过 Nginx 直接处理,减轻 Tomcat 的负担。


Tomcat 的配置建议

为了确保 Tomcat 能够正确处理大文件上传,还需要检查 Tomcat 的配置:

  1. maxPostSize
    在 Tomcat 的 server.xml 中,确保 <Connector>maxPostSize 参数足够大(例如设置为 104857600,即 100MB)。

    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443"
               maxPostSize="104857600" />
    
  2. maxSwallowSize
    如果上传的文件非常大,可以调整 maxSwallowSize 参数(默认值为 2MB)。

    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443"
               maxPostSize="104857600"
               maxSwallowSize="104857600" />
    
  3. uploadTimeout
    在 Tomcat 的 web.xml 中,可以为文件上传设置超时时间。

    <multipart-config>
        <max-file-size>104857600</max-file-size>
        <max-request-size>104857600</max-request-size>
        <file-size-threshold>0</file-size-threshold>
    </multipart-config>
    

测试与验证

  1. 启动 Nginx 和 Tomcat。
  2. 使用工具(如 curl 或 Postman)上传一个大文件,确保不会超时。
  3. 检查 Nginx 和 Tomcat 的日志,确认没有错误。

通过以上配置,Nginx 和 Tomcat 可以协同工作,支持大文件上传并避免超时问题。

相关文章:

  • java项目之基于ssm的旅游论坛(源码+文档)
  • k8s搭建kube-prometheus
  • 在 Ubuntu 中用 Docker 安装 RAGFlow
  • 相同Vlan间的通信
  • HBase启动问题排查指南:解决HMaster和HRegionServer未运行的常见错误
  • 【C语言】使用结构体实现位段
  • Redis之单线程与多线程
  • ASP.NET Core 使用 MongoDB
  • Git Flow 分支管理策略
  • LeetCode算法题(Go语言实现)_01
  • GR00T N1——英伟达开源的通用人形VLA:类似Helix的快与慢双系统,且可类似ViLLA利用海量的无标注视频做训练
  • Docker和Dify学习笔记
  • c++简单实现redis
  • 使用LLaMA Factory微调导出模型,并用ollama运行,用open webui使用该模型
  • 基于javaweb的SpringBoot成绩管理系统设计与实现(源码+文档+部署讲解)
  • 优化广告投放算法
  • Unity Shader编程】之渲染流程之深度及pass详解
  • Umi-OCR- OCR 文字识别工具,支持截图、批量图片排版解析
  • Oracle 19C reverse反向索引测试
  • 安防监控视频平台EasyNVR级联视频上云系统EasyNVS出现“Login error”报错的原因排查
  • 全中国最好的十个博物馆展陈选出来了!
  • 十年牢狱倒计时,一名服刑人员的期待与惶恐
  • 菲律宾选举委员会公布中期选举结果,马科斯阵营选情未达预期
  • 泉州围头湾一港区项目炸礁被指影响中华白海豚,官方:已叫停重新评估
  • 昆明公布3起经济犯罪案例:一人持有820余万假美元被判刑十年
  • 中国—美国经贸合作对接交流会在华盛顿成功举行