教你使用Apache搭建Http下載服務器
前言
前段時間因為某些原因,幾大網盤都不可用,手頭正好有一個閑置的云服務器,所以想建立一個文件下載服務,用戶只需要通過一個鏈接就可以下載軟件。
Apache快速上手
經過調查,我發現使用Apache2,Ubuntu可以很快滿足我的需求。
安裝Apache2
apt-get install apache2安裝后,啟動Apache2服務:
/etc/init.d/apache2 start檢查啟動狀態:
/etc/init.d/apache2 status然后,訪問服務器的公共ip或域名,可以看到如下界面,說明Apache工作正常:
最后,在/var/www/html路徑中,刪除index.html,上傳想要下載的文件,再次訪問即可下載。
(注意:如果是云服務器,需要在安全組中打開端口號80和443)
同時可以直接通過域名/文件名給別人鏈接下載。
如果有一個單獨的服務器來共享臨時文件,這將很快完成。
讓我們繼續深入研究,考慮一個更現實的場景。
修改端口號
Apache2默認使用端口號80,因此可以通過公共ip或域名直接訪問。現實中很多服務器本身部署了很多其他服務,端口號80經常被占用,所以需要將Apache2改為其他接入端口。
要修改端口,需要先修改文件/etc/apache2/ports.conf:
這里把80改成其他不沖突的端口號。我以1024為例。
然后修改/etc/Apache 2/sites-available/000-default . conf。
#<VirtualHost *:80><VirtualHost *:1024> # The ServerName directive sets the request scheme, hostname and port that # the server uses to identify itself. This is used when creating注意:這個文件中還有一個DocumentRoot。修改此參數可以調整文件系統的根路徑。
修改后,重新啟動apache2:
/etc/init.d/apache2 restart此時,你可以通過訪問域名:1024來訪問相同的內容,比如我的服務器訪問url是http://xdxsb.top:1024。
設置訪問限制
個人服務器很容易被他人攻擊。如果有人做多線程反復請求下載,會導致流量的巨大帶寬消耗,甚至會使服務器宕機。因此,長期提供下載服務的服務器必須設置訪問限制。
配置文件參數的詳細說明
訪問限制主要涉及配置文件/etc /etc/apache2/apache2.conf首先要對文件進行解釋。
該文件的內容如下:
#這是主要的Apache服務器配置文件。
它包含#配置指令,為服務器提供指令。
#有關
#指令和/usr/share/doc/apache2/README的詳細信息,請參見http://httpd.apache.org/docs/2.4/。Debian關于Debian特定的
#提示。
#
#
# Apache 2配置在Debian中如何工作的總結:
# Debian中的Apache 2 web服務器配置與
# upstream & # 39;這是配置web服務器的建議方式。這是因為Debian & # 39s
#默認的Apache2安裝試圖盡可能靈活地添加和刪除模塊、
#虛擬主機和額外的配置指令,以便盡可能容易地
#自動執行更改和管理服務器。
#它被分成幾個文件,形成下面
#概述的配置層次結構,所有文件都位于/etc/apache2/目錄中:
#
#[/div]/etc/Apache 2/
#[/div]|-Apache 2 . conf
#[/div]load
#|`-*。conf
#|-conf-enabled
#|`-*。conf
#`-啟用了站點的
#[/div]`-*。conf
#
#
# * Apache 2 . conf是主配置文件(此文件)。它通過在啟動
# web服務器時包含所有剩余的配置文件,將各個部分
# 組合在一起。
#
# * ports.conf始終包含在主配置文件中。應該
# 確定傳入連接的監聽端口,這些端口可以隨時
# 定制。
#
# * MODS-enabled/、conf-enabled/和sites-enabled/
# 目錄中的配置文件包含特定的配置片段,分別管理模塊、
#全局配置片段或虛擬主機配置。
#
# 它們是通過從它們各自的*-available/副本符號鏈接可用的配置文件來激活的。這些應該通過使用我們的
# 助手a2enmod/a2dismod、a2ensite/a2dissite和a2enconf/a2disconf來管理。有關詳細信息,請參見
# 它們各自的手冊頁。
#
# *二進制文件稱為apache2。由于環境變量的使用,在
# 默認配置中,apache2需要用
#/etc/init . d/Apache 2或apache2ctl來啟動/停止。直接調用/usr/bin/apache2無法
# 使用默認配置。
#全局配置
#
#
# server root:服務器& # 39;s
#保留配置、錯誤和日志文件。
#
#注意!如果您打算將它放在NFS(或其他網絡)
#掛載的文件系統上,那么請閱讀互斥體文檔(可從
# at & lt;網址:http://httpd . Apache . org/docs/2.4/mod/core . html # mutex & gt;);
#你會省去很多麻煩。
#
#不要在目錄路徑的末尾添加斜杠。
#
# server root & quot;/etc/apache2"
#
#接受序列化鎖定文件必須存儲在本地磁盤上。
#
#互斥文件:${APACHE_LOCK_DIR}默認
#
#將存儲shm和其他運行時文件的目錄。
#
DefaultRuntimeDir $ { APACHE _ RUN _ DIR }
#
# PID file:服務器啟動時應記錄其進程
#標識號的文件。
#這需要在/etc/APACHE 2/env vars
#
PID FILE $ { APACHE _ PID _ FILE }
#
# time out:接收和發送超時前的秒數。
#
超時300
#
# KeepAlive:是否允許持久連接(每個連接超過
#個請求)。設置為& quot關閉& quot去激活。
#
KeepAlive On
#
# MaxKeepAliveRequests:持久連接期間允許的最大請求數
#。設置為0以允許無限制的數量。
#為了獲得最佳性能,我們建議您將該數值設得較高。
#
MaxKeepAliveRequests 100
#
# KeepAliveTimeout:在同一連接上等待來自
#同一客戶端的下一個請求的秒數。
#
KeepAliveTimeout 5
#這些需要在/etc/APACHE 2/env vars
User $ { APACHE _ RUN _ User }
Group $ { APACHE _ RUN _ Group }
#
# hostname lookups:記錄客戶端的名稱或僅記錄其IP地址
#例如,www.apache.org(開)或204.62.129.132(關)。
#默認值為off,因為它& # 39;d .如果人們
#不得不有意打開此功能,那么對網絡來說總體上更好,因為啟用它意味著
#每個客戶端請求將導致至少一個對
#名稱服務器的查找請求。
#
主機名Lookups Off
# ErrorLog:錯誤日志文件的位置。
#如果沒有在& lt虛擬主機& gt
#容器,與該虛擬主機相關的錯誤消息將
#記錄在此處。如果您*確實*為& lt虛擬主機& gt
#容器,即主機& # 39;的錯誤將被記錄在那里,而不是這里。
#
error LOG $ { APACHE _ LOG _ DIR }/error . LOG
#
# LOG level:控制記錄到error_log中的消息的嚴重性。
#可用值:trace8,...,trace1,debug,info,notice,warn,
# error,crit,alert,emerg。
#還可以為特定模塊配置日志級別,例如
# & quot;日志級別信息SSL:warn & quot;
#
日志級別警告
#包含模塊配置:
包含可選mods-enabled/*。load
include可選mods-enabled/*。conf[/br/ ]# Include要監聽的端口列表
Include ports.conf
#設置Apache2 HTTPD服務器的默認安全模型。它不
#允許訪問/usr/share和/var/www之外的根文件系統。
#前者由Debian中打包的web應用程序使用,
#后者可能用于由web服務器提供服務的本地目錄。如果
#您的系統從/ srv中的子目錄提供內容,您必須允許
#訪問此處或任何相關的虛擬主機。
& lt;目錄/>;
選項如下symlinks
[div]
& lt;/Directory & gt;
& lt;目錄/usr/share & gt;
allow override None
要求全部授予
& lt;/Directory & gt;
& lt;directory/var/www/& gt;
Options Indexes follow symlinks
[div]
& lt;/Directory & gt;
# & lt;Directory /srv/>
#Options Indexes follow symlinks
#
#[div]
# & lt;/Directory & gt;
# AccessFileName:要在每個目錄中查找的文件的名稱
#用于附加配置指令。另請參見AllowOverride
#指令。
#
AccessFileName。htaccess
#
#以下行阻止。htaccess和。Web客戶端無法
#查看htpasswd文件。
#
& lt;文件匹配& quot^\.ht & quot& gt
要求全部拒絕
& lt;/files match & gt;
#
#以下指令定義了一些與
# a CustomLog指令一起使用的格式昵稱。
#
#這些不同于常見的日志格式定義,因為它們使用%O
#(發送的實際字節數,包括標頭)而不是% b(
#請求文件的大小),因為后者使得無法檢測部分
#請求。
#
#請注意,不建議使用%{X-Forwarded-For} i而不是%h。
#請改用mod_remoteip。
#
log format & quot;% v:% p % h % l % u % t \ & quot;% r \ & quot% & gts % O \ & quot% { Referer } i \ & quot\ & quot% {用戶代理} i \ & quot"vhost _ combined
log format & quot;% h % l % u % t \ & quot% r \ & quot% & gts % O \ & quot% { Referer } i \ & quot\ & quot% {用戶代理} i \ & quot"組合
log format & quot;% h % l % u % t \ & quot% r \ & quot% & gts % O & quot通用
log format & quot;% { Referer } I-& gt;% U & quotreferer
log format & quot;% {用戶代理} i & quot目錄的代理
# Include忽略編輯器& # 39;還有dpkg & # 39的備份文件,
#請參閱自述文件。Debian了解詳情。
# Include語句的一般片段
Include可選conf-enabled/*。conf
#包括虛擬主機配置:
包括可選站點-enabled/*。conf
# vim:syntax = Apache ts = 4 SW = 4 STS = 4 Sr noet
參數解釋:
PidFile:記錄服務器啟動進程號的文件。
超時:接收和發送前的秒數。
KeepAlive:是否允許穩固連接(每個連接有多個請求),設置為“Off & quot然后停用。
MaxKeepAliveRequests:在固定連接期間允許的最大請求數。設置為0表示無限制訪問。
KeepAliveTimeout:在同一連接上從同一客戶接收請求的秒數。
用戶/組:運行的用戶和組。
HostnameLookups:指定是否記錄客戶端的名稱或IP地址
例如,當此命令打開時,記錄主機名,如www.apache.org。關閉時,記錄IP地址,204.62.129.132。缺省值為off,這比將其設置為on好得多,因為如果將其設置為on,每個客戶機請求將導致至少一次對名稱服務器的查詢。
錯誤日志:錯誤日志文件位置
LogLevel:控制錯誤日志文件中記錄的日志信息
可選值:調試、信息、通知、警告、錯誤、關鍵、警報、緊急
目錄:您可以設置標簽對中每個文件夾的屬性。
選項:控制將在特定目錄中使用哪些服務器功能。
All:除MultiViews之外的所有特性,這是默認設置ExecCG:允許使用mod_cgi執行CGI腳本FollowSymLinks:服務器允許在此目錄中使用符號連接,如果此配置位于配置段中,則會被忽略Includes:允許使用mod_include提供的服務器端包含IncludesNOEXEC:允許服務器端包含,但禁用"#exec cmd"和"#exec cgi",但仍可以從ScriptAlias目錄使用"#include virtual"虛擬CGI腳本Indexes:如果一個映射到目錄的URL被請求,而此目錄中又沒有DirectoryIndex(例如:index.html),那么服務器會返回由mod_autoindex生成的一個格式化后的目錄列表MultiViews:允許使用mod_negotiation提供內容協商的"多重視圖"(MultiViews)SymLinksIfOwnerMatch:服務器僅在符號連接與其目的目錄或文件的擁有者具有相同的uid時才使用它。 如果此配置出現在配置段中,則將被忽略AllowOverride:確定。htaccess file
語法:allow override all | None | directive-type[directive-type]
如果此指令設置為None,則。htaccess文件將被完全忽略。
指令類型可以是下列指令組之一:
Order:控制默認訪問狀態以及允許和拒絕指令生效的順序。
Deny,Allow : Deny指令在Allow指令之前被評估。默認允許所有訪問。任何不匹配Deny指令或者匹配Allow指令的客戶都被允許訪問Allow,Deny : Allow指令在Deny指令之前被評估。默認拒絕所有訪問。任何不匹配Allow指令或者匹配Deny指令的客戶都將被禁止訪問Mutual-failure : 只有出現在Allow列表并且不出現在Deny列表中的主機才被允許訪問。這種順序與"Order Allow,Deny"具有同樣效果允許:控制哪些主機可以訪問服務器的這個區域。可以根據主機名、IP地址、IP地址范圍或其他環境變量中捕獲的客戶端請求的特征對其進行控制。
語法:allow from all | host | env = env-變量[host | env = env-變量]
拒絕:控制禁止哪些主機訪問服務器的這個區域。可以根據主機名、IP地址、IP地址范圍或其他環境變量中捕獲的客戶端請求的特征對其進行控制。
語法:deny from all | host | env = env-變量[host | env = env-變量]
require:access restriction
-all granted:表示允許所有主機訪問
- all denied:表示拒絕所有主機訪問
- local:表示僅允許本地主機訪問
-[not] host <或主機名列表>: :表示允許或拒絕對指定主機或域名
-[not] IP < IP地址或網段列表>:表示允許或拒絕對指定IP地址或網段的訪問。
AccessFileName:設置分布式概要文件的名稱,默認為。htaccess
如果為某個目錄啟用了分布式配置文件功能,則服務器在將文檔返回給客戶端時,將在文檔所在的所有目錄級別中查找該配置文件。
& lt文件匹配& quot。ht & quot& gt:拒絕訪問。ht啟動文件來保護。htaccess文件。
LogFormat:定義訪問日志的格式。
有限連接數量
通過上面對配置文件參數的研究,注意到這個參數MaxKeepAliveRequests將單個連接的最大訪問次數限制在100次,所以不用擔心單線程腳本重復頻繁請求的問題。
那么Apache有針對高并發請求的默認策略嗎?是的,從2.0開始,apache引入了MPM(Multi-Processing Module),它有三種模式:prefork、worker和event [4]。您可以通過以下命令檢查apache采用的當前模式:
默認情況下應采用事件模式。
該模式的配置文件位于/etc/Apache 2/MODS-available pmm _ event . conf
默認參數:
參數解釋:
StartServers:啟動時進程數MinSpareThreads:最小空閑線程數MaxSpareThreads:最大空閑線程數ThreadLimit:每個進程可以啟動的線程數量上限值ThreadsPerChild:每個進程可以啟動的線程數量MaxRequestWorkers:線程數量最大值MaxConnectionsPerChild:最大連接數限制我這里沒調。首先我用JMeter進行了一個多線程并發測試:
JMeter下載地址:https://jmeter.apache.org/download_jmeter.cgi
解壓后運行Apache-jmeter-5.5/bin/jmeter . bat,就可以啟動了。
為了創建一個線程組,我設置了1000個線程,并將時間設置為0.01秒。
然后設置HTTP請求,填寫請求的域名、端口號和文件路徑。
測試結果顯示請求失敗率為16%,所以基本上1000個并發請求在我的小服務器上很難滿足。
禁止ip
如果面對惡意攻擊,最快解決問題的方法無疑是封禁其ip。在此,嘗試封禁原生ip,看看是否可行。
首先查詢本地ip,直接在百度搜索ip,就可以找到公網ip。注意這必須是公有ip,內部ip是通過ipconfig找到的。
修改配置文件:
vim /etc/apache2/apache2.conf修改/var/www/ file內容:
<Directory /var/www/> Options Indexes FollowSymLinks AllowOverride None <RequireAll> Require all granted Require not ip 111.11.81.152 </RequireAll></Directory>重新啟動服務:
/etc/init.d/apache2 restart再次發現權限受限,說明設置成功。
擴展:如果只允許固定ip訪問,可以修改如下:
<Directory /var/www/> Options Indexes FollowSymLinks AllowOverride None # Require all granted Require ip 111.11.82.8</Directory>設置帳戶密碼訪問
對于一些私有文件,您可以進一步配置帳戶密碼進行身份驗證。
首先,創建一個文件夾來保存用戶信息:
mkdir -p /usr/local/conf然后創建一個用戶:
htpasswd -c /usr/local/conf/.usr zstarZstar是我創建的用戶名。
輸入密碼后,Apache會以密文形式存儲密碼。您可以通過以下方式查看用戶名和密碼密文:
cat /usr/local/conf/.usr再次修改配置文件:
vim /etc/apache2/apache2.conf修改的內容:
<Directory /var/www/> Options Indexes FollowSymLinks AllowOverride All AuthName "apache" AuthType Basic AuthUserFile "/usr/local/conf/.usr" Require user zstar</Directory>重新啟動服務:
/etc/init.d/apache2 restart再次訪問,登錄驗證成功彈出,表示配置成功。
參考
[1]ubuntu構建http服務器下載ubuntu文件:https://blog . csdn . net/YY 1695990107/article/details/116976994
[2]Apache 2 httpd . conf配置詳情:https://blog.csdn.net/·阿西尼西/article/details/78854139
[3]Apache的訪問控制:https://blog.csdn.net/m0 _ 54434140/article/details/122249712
這就是這篇關于如何用Apache構建Http下載服務器的文章。有關使用Apache構建Http下載服務器的更多信息,請搜索Script House以前的文章或繼續瀏覽下面的相關文章。希望大家以后多多支持劇本之家!
如果您的問題還未解決可以聯系站長付費協助。

有問題可以加入技術QQ群一起交流學習
本站vip會員 請加入無憂模板網 VIP群(50604020) PS:加入時備注用戶名或昵稱
普通注冊會員或訪客 請加入無憂模板網 技術交流群(50604130)
客服微信號:15898888535
聲明:本站所有文章資源內容,如無特殊說明或標注,均為采集網絡資源。如若內容侵犯了原著者的合法權益,可聯系站長刪除。