Nginx 限制上传速度
Nginx limit upload speed
我使用 Nginx 作为反向代理。
Nginx如何限制上传速度?
分享一下如何在Nginx中限制反向代理的上传速度。
限制下载速度是小菜一碟,但上传速度则不然。
这里是限制上传速度的配置
- 找到你的目录
/etc/nginx/nginx.conf
user www-data;
worker_processes auto;
pid /run/nginx.pid;
events {
worker_connections 1;
}
# 1)
# Add a stream
# This stream is used to limit upload speed
stream {
upstream site {
server your.upload-api.domain1:8080;
server your.upload-api.domain1:8080;
}
server {
listen 12345;
# 19 MiB/min = ~332k/s
proxy_upload_rate 332k;
proxy_pass site;
# you can use directly without upstream
# your.upload-api.domain1:8080;
}
}
http {
server {
# 2)
# Proxy to the stream that limits upload speed
location = /upload {
# It will proxy the data immediately if off
proxy_request_buffering off;
# It will pass to the stream
# Then the stream passes to your.api.domain1:8080/upload?$args
proxy_pass http://127.0.0.1:12345/upload?$args;
}
# You see? limit the download speed is easy, no stream
location /download {
keepalive_timeout 28800s;
proxy_read_timeout 28800s;
proxy_buffering off;
# 75MiB/min = ~1300kilobytes/s
proxy_limit_rate 1300k;
proxy_pass your.api.domain1:8080;
}
}
}
如果你的 Nginx 不支持stream
。
您可能需要添加一个模块。
静态:
$ ./configure --with-stream
$ make && sudo make install
动态
$ ./configure --with-stream=dynamic
- https://www.nginx.com/blog/compiling-dynamic-modules-nginx-plus/
注:
如果你有一个客户端,比如 HAProxy,和 Nginx 作为服务器。
您可能会在 HAProxy 中遇到 504 timeout
,在 Nginx 中遇到 499 client is close
,同时上传大文件并限制低上传速度。
您应该在 HAProxy 中增加或添加 timeout server: 605s
或更多,因为我们希望 HAProxy 在 Nginx 忙于上传到您的服务器时不要关闭连接。
部分参考资料:
- https://nginx.org/en/docs/stream/ngx_stream_proxy_module.html#proxy_upload_rate
- http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_limit_rate
你会找到一些其他的方法,通过添加第三方模块来限制上传速度,但是很复杂而且效果不佳
- https://www.nginx.com/resources/wiki/modules/
- https://www.nginx.com/resources/wiki/modules/upload/
- https://github.com/cfsego/limit_upload_rate
稍后谢谢我;)
我使用 Nginx 作为反向代理。
Nginx如何限制上传速度?
分享一下如何在Nginx中限制反向代理的上传速度。
限制下载速度是小菜一碟,但上传速度则不然。
这里是限制上传速度的配置
- 找到你的目录
/etc/nginx/nginx.conf
user www-data;
worker_processes auto;
pid /run/nginx.pid;
events {
worker_connections 1;
}
# 1)
# Add a stream
# This stream is used to limit upload speed
stream {
upstream site {
server your.upload-api.domain1:8080;
server your.upload-api.domain1:8080;
}
server {
listen 12345;
# 19 MiB/min = ~332k/s
proxy_upload_rate 332k;
proxy_pass site;
# you can use directly without upstream
# your.upload-api.domain1:8080;
}
}
http {
server {
# 2)
# Proxy to the stream that limits upload speed
location = /upload {
# It will proxy the data immediately if off
proxy_request_buffering off;
# It will pass to the stream
# Then the stream passes to your.api.domain1:8080/upload?$args
proxy_pass http://127.0.0.1:12345/upload?$args;
}
# You see? limit the download speed is easy, no stream
location /download {
keepalive_timeout 28800s;
proxy_read_timeout 28800s;
proxy_buffering off;
# 75MiB/min = ~1300kilobytes/s
proxy_limit_rate 1300k;
proxy_pass your.api.domain1:8080;
}
}
}
如果你的 Nginx 不支持stream
。
您可能需要添加一个模块。
静态:
$ ./configure --with-stream
$ make && sudo make install
动态
$ ./configure --with-stream=dynamic
- https://www.nginx.com/blog/compiling-dynamic-modules-nginx-plus/
注:
如果你有一个客户端,比如 HAProxy,和 Nginx 作为服务器。
您可能会在 HAProxy 中遇到 504 timeout
,在 Nginx 中遇到 499 client is close
,同时上传大文件并限制低上传速度。
您应该在 HAProxy 中增加或添加 timeout server: 605s
或更多,因为我们希望 HAProxy 在 Nginx 忙于上传到您的服务器时不要关闭连接。
部分参考资料:
- https://nginx.org/en/docs/stream/ngx_stream_proxy_module.html#proxy_upload_rate
- http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_limit_rate
你会找到一些其他的方法,通过添加第三方模块来限制上传速度,但是很复杂而且效果不佳
- https://www.nginx.com/resources/wiki/modules/
- https://www.nginx.com/resources/wiki/modules/upload/
- https://github.com/cfsego/limit_upload_rate
稍后谢谢我;)