教你使用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
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若内容侵犯了原著者的合法权益,可联系站长删除。