1. 程式人生 > 其它 >nginx開啟目錄下載

nginx開啟目錄下載

nginx 開啟目錄下載

概要

  • 使用場景
  • 修改配置檔案以及引數含義
  • 啟動nginx 測試下載
  1. 使用場景

    們需要對使用者提供檔案下載功能,比如不同版本的軟體列表,或者對外提供的一些公開的報表下載

  2. 配置檔案

2.1 軟體版本

[root@localhost nginx]# cat  /etc/redhat-release 
CentOS Linux release 7.9.2009 (Core)

[root@localhost nginx]# yum  install  nginx   -y

[root@localhost nginx]# nginx  -version
nginx version: nginx/1.20.1

2.2 新增配置檔案

在conf.d目錄下新增配置檔案download.conf

server {
        listen       8082;
        server_name  localhost;
        access_log /data/download.log;
        location /download {

            charset utf-8,gbk,gb2312;
            root /data/;   # 伺服器 檔案存放 /data/download, 訪問路徑為 ip:8082/download
            
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header   Host $host;

            client_max_body_size     100m;  # 允許客戶端請求的最大單檔案位元組數

            # 緩衝區代理緩衝使用者端請求的最大位元組數,
            # 如果把它設定為比較大的數值,例如256k
            # 那麼,無論使用firefox還是IE瀏覽器,來提交任意小於256k的圖片,都很正常。
            # 如果註釋該指令,使用預設的client_body_buffer_size設定
            # 也就是作業系統頁面大小的兩倍,8k或者16k,問題就出現了。
            #無論使用firefox4.0還是IE8.0
            # 提交一個比較大,200k左右的圖片,都返回500 Internal Server Error錯誤
            client_body_buffer_size  128k;

            # 後端伺服器連線的超時時間_發起握手等候響應超時時間
            proxy_connect_timeout    1200;

            # 連線成功後_等候後端伺服器響應時間_其實已經進入後端的排隊之中等候處理
            # (也可以說是後端伺服器處理請求的時間)
            proxy_read_timeout       1200;

            # 後端伺服器資料回傳時間_就是在規定時間之內後端伺服器必須傳完所有的資料
            proxy_send_timeout       6000;

            # Nginx使用該大小申請read_buf
            # 即大小指定了 upstream header 最大長度,
            # 如果響應頭超過了這個長度,Nginx會報upstream sent too big header錯誤,
            # 然後client收到的是502
            proxy_buffer_size        32k;

            # 開闢256個長度為8k大小的read_buf用來儲存body
            # 當然不是連線建立初始化時就開闢256個
            # 而是噹噹前buf不夠存響應body時才會新申請一個,最多申請256個
            # 預設值:proxy_buffers 256 8k
            proxy_buffers            4 64k;

            # 如果完整資料大小小於busy_buffer大小,當資料傳輸完成後,馬上傳給客戶端;
            # 如果完整資料大小不小於busy_buffer大小,則裝滿busy_buffer後,馬上傳給客戶端;
            proxy_busy_buffers_size 128k;

            # 是一次訪問能寫入的臨時檔案的大小
            # 預設是proxy_buffer_size和proxy_buffers中設定的緩衝區大小的2倍,Linux下一般是8k
            proxy_temp_file_write_size 128k;

            autoindex on;  # 開啟目錄
            autoindex_exact_size   off; # 顯示出檔案的大概大小,單位是kB或者MB或者GB
            autoindex_localtime    on;  # 改為on後,顯示的檔案時間為檔案的伺服器時間
            limit_rate_after 15m; # 達到最大頻寬時開始限制
						
	    allow 192.168.1.0/24;    #新增允許訪問下載 IP 地址段
	    allow 172.17.0.0/16;
	    deny  all;            
            # 正則 如果檔案是這些為字尾 則下載
            #if ($request_filename ~* ^.*?\.(txt|doc|pdf|rar|gz|zip|docx|exe|xlsx|ppt|pptx)$){
            #    add_header Content-Disposition: 'attachment;';
            #}
            if ($request_filename ~* ^.*?\.(txt)$){
            add_header Content-Disposition 'attachment';
            add_header Content-Type: 'APPLICATION/OCTET-STREAM';}
        }
}

2.3 啟動nginx 測試下載

1. systemctl  restart  nginx
2. 使用瀏覽器訪問 ip:8082/download