2022/10/10

Nginx上傳模組

摘要

本文概要介紹使用Nginx上傳模組在沒有後端程式的時候進行檔案上傳。

本文

Nginx是一個網頁伺服器,可以附加上傳模組(Nginx Upload Module),來執行檔案的上傳。由於Nginx預設沒有上傳模組,所以需要手動建構Nginx。

於Ubuntu MATE 16.04建構包含相依套件暨上傳模組的Nginx的操作步驟如下所示。

wget -P ./ http://nginx.org/download/nginx-1.8.1.tar.gz
tar -zxvf nginx-1.8.1.tar.gz

wget -P ./ https://github.com/vkholodkov/nginx-upload-module/archive/refs/tags/2.3.0.tar.gz
tar -zxvf 2.3.0.tar.gz

wget -P ./ https://ftp.exim.org/pub/pcre/pcre-8.39.tar.gz --no-check-certificate
tar -zxvf pcre-8.39.tar.gz

wget -P ./ http://zlib.net/zlib-1.2.12.tar.gz
tar -zxvf zlib-1.2.12.tar.gz

wget -P ./ https://www.openssl.org/source/openssl-1.0.2u.tar.gz --no-check-certificate
tar -zxvf openssl-1.0.2u.tar.gz

cd nginx-1.8.1
./configure --add-module=../nginx-upload-module-2.3.0 --with-openssl=../openssl-1.0.2u --with-http_gzip_static_module --with-http_ssl_module --with-pcre=../pcre-8.39 --with-zlib=../zlib-1.2.12
make
sudo make install

 

使用上傳模組的預設組態設置。

sudo cp nginx-upload-module-2.3.0/nginx.conf /usr/local/nginx/conf/

 

修改組態設置,以便處理上傳檔案權限、以及逕自回覆狀態碼200 OK。

 

依據組態設置於/tmp/建立相應的目錄(/tmp/?)、並且設置相應的權限。

mkdir -p /tmp/0 /tmp/1 /tmp/2 /tmp/3 /tmp/4 /tmp/5 /tmp/6 /tmp/7 /tmp/8 /tmp/9
chmod a+rw /tmp/0 /tmp/1 /tmp/2 /tmp/3 /tmp/4 /tmp/5 /tmp/6 /tmp/7 /tmp/8 /tmp/9

 

啟動Nginx伺服端程式。

sudo /usr/local/nginx/sbin/nginx

 

於伺服端觀察當前的各個目錄的內容,/tmp/?都是空的。

 

使用curl作為客戶端程式進行初步測試;可以GET。


使用curl進行檔案上傳測試;可以POST。


於伺服端觀察上傳完畢的檔案;擺在/tmp/?底下。

 

其間沒有使用後端的CGI程式。

完成。

 

參考文獻

https://www.796t.com/content/1549294049.html
https://hui.lu/upload-file-with-nginx-upload-file/
https://owasp.org/www-community/vulnerabilities/Unrestricted_File_Upload
https://stackoverflow.com/questions/19116016/what-is-the-right-way-to-post-multipart-form-data-using-curl


沒有留言:

張貼留言