摘要
本文概要介紹使用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
沒有留言:
張貼留言