有没有办法使用nginx通过http将文件上传到服务器?
我有一个程序,基本上使用curl和通过http的POST方法将文件发送到完全不同的企业软件。我们想要复制类似的东西,但遇到了障碍。
我已经安装了nginx并做了基本配置,我希望能够上传/data/files/incoming下的文件
server {
listen testserv1;
location /upload/ {
limit_except POST PUT { deny all; }
client_body_temp_path /data/files/incoming/;
client_body_in_file_only on;
client_body_buffer_size 128k;
client_max_body_size 100M;
proxy_pass_request_headers on;
proxy_set_body $request_body_file;
proxy_pass http://127.0.0.1/upload;
proxy_redirect off;
}
我基本上保留了 nginx.conf 上的常规配置并添加了上面的内容。所以我的问题是,我怎么知道它实际上有效?我确实从另一台服务器尝试运行该程序,该程序据称会发布文件,但什么也没有。还有一种方法可以从另一个系统测试此配置吗?我在配置中遗漏了什么吗?
任何帮助,任何事情都非常感激。
您可以通过在 URL 中指定文件名来完成此操作,而无需使用任何外部模块。我在没有代理的情况下进行了测试,但它应该能够工作:
server {
listen testserv1;
location ~ "/upload/([0-9a-zA-Z-.]*)$" {
dav_methods PUT DELETE MKCOL COPY MOVE;
client_body_temp_path /tmp/incoming;
alias /data/files/incoming/$1;
create_full_put_path on;
dav_access group:rw all:r;
client_body_in_file_only on;
client_body_buffer_size 128k;
client_max_body_size 100M;
proxy_pass_request_headers on;
proxy_set_body $request_body_file;
proxy_pass http://127.0.0.1/upload;
proxy_redirect off;
}
}
并使用:curl -T test.zip http://testserv1/upload/text.zip
看看 nginx_upload_module:https://www.nginx.com/resources/wiki/modules/upload/
sudo apt install nginx
# create directory
sudo mkdir /nginx_files
sudo chmod 777 /nginx_files
sudo touch /nginx_files/{0..5}.txt
# add config
sudo tee /etc/nginx/sites-enabled/file_server.conf <<-'EOF'
server {
listen 8081;
server_name localhost;
charset utf-8;
location / {
alias /nginx_files/;
autoindex on;
autoindex_exact_size off;
autoindex_localtime on;
try_files $uri $uri/ =404;
}
location ~ "/api/([\s\S]*)$" {
dav_methods PUT DELETE MKCOL COPY MOVE;
client_body_temp_path /tmp/upload_tmp;
alias /nginx_files/$1;
create_full_put_path on;
dav_access group:rw all:r;
client_max_body_size 1000M;
}
}
EOF
# reload nginx config
sudo systemctl reload nginx
# upload file
curl -T test.txt http://localhost:8081/api/test.txt
# delete file
curl -X DELETE http://localhost:8081/api/test.txt
# download file ('-#' is a progress)
curl -O -# http://localhost:8081/api/test.txt