【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;
}
}
}
关键配置说明
-
client_max_body_size 100M;
允许客户端上传最大 100MB 的文件。如果需要更大的文件,可以调整为500M
或1G
。 -
client_body_timeout 300s;
设置客户端请求体的超时时间为 300 秒,适用于大文件上传。 -
proxy_pass http://tomcat_backend;
将请求代理到后端的 Tomcat 服务器。 -
proxy_read_timeout 300s;
和proxy_send_timeout 300s;
设置与 Tomcat 通信的超时时间,避免大文件上传时超时。 -
proxy_set_header
确保正确的请求头信息传递给 Tomcat,特别是Host
和X-Real-IP
,以便 Tomcat 能够正确处理请求。 -
静态文件处理
如果有一些静态文件(如图片、CSS、JS),可以通过 Nginx 直接处理,减轻 Tomcat 的负担。
Tomcat 的配置建议
为了确保 Tomcat 能够正确处理大文件上传,还需要检查 Tomcat 的配置:
-
maxPostSize
在 Tomcat 的server.xml
中,确保<Connector>
的maxPostSize
参数足够大(例如设置为104857600
,即 100MB)。<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" maxPostSize="104857600" />
-
maxSwallowSize
如果上传的文件非常大,可以调整maxSwallowSize
参数(默认值为 2MB)。<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" maxPostSize="104857600" maxSwallowSize="104857600" />
-
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>
测试与验证
- 启动 Nginx 和 Tomcat。
- 使用工具(如
curl
或 Postman)上传一个大文件,确保不会超时。 - 检查 Nginx 和 Tomcat 的日志,确认没有错误。
通过以上配置,Nginx 和 Tomcat 可以协同工作,支持大文件上传并避免超时问题。