鱼C论坛

 找回密码
 立即注册
查看: 1102|回复: 4

如何在Linux中 安装Apache,搭建自己的web服务器?请求援助

[复制链接]
发表于 2022-10-21 12:47:51 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
如何在Linux中 安装Apache,搭建自己的web服务器?请求援助
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-10-21 17:29:14 | 显示全部楼层
这个可以去CSDN里找找教程,在操作之前记得做好快照(切记切记),有些Linux的发行版本自带有Apache,只不过名字叫httpd,没有的话就自行安装,不过楼主没有硬需的话可以试试Nginx这个我常用,而且部署方式简单快捷,轻量级的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2022-10-24 15:18:07 | 显示全部楼层
  1. #!/bin/bash
  2. ip=$(ifconfig | sed -n 2p | awk '{print $2}')
  3. #判断服务器能否访问外网
  4. check_net() {
  5.     ping -c 2 www.baidu.com > /dev/null 2>&1
  6.     if [ $? -eq 0 ];then
  7.         echo "网络畅通"
  8.     else
  9.         echo "网络不通!!!"
  10.     fi
  11. }
  12. install() {
  13.     echo "开始安装lamp所需组件"
  14.     yum -y install httpd php php-mysql php-gd mariadb mariadb-server > /dev/null
  15. }
  16. file() {
  17.     echo "修改Apache配置文件"
  18.     sed -i '164 s/index.html/index.php/' /etc/httpd/conf/httpd.conf
  19. }
  20. index() {
  21.     echo "创建测试页面"
  22.     echo "<?php phpinfo();?>" > /var/www/html/index.php
  23. }
  24. start_svc() {
  25.     echo "开启Apache服务"
  26.     systemctl start httpd
  27.     echo "开启mysql服务"
  28.     systemctl start mariadb
  29. }
  30. check_net
  31. install
  32. file
  33. index
  34. start_svc
  35. echo "请访问: http://$ip"
复制代码



随便从网上复制一个脚本。   执行就行了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-3-14 17:30:56 | 显示全部楼层
之前自己做的笔记,你可以按照笔记操作一下

1)Apache的目录别名

当apache 接受请求时,在默认情况下会将 DocumentRoot 目录中的文件送到客户端,如果想将某一不在 DocumentRoot 目录中的文件共享到网站上,并希望将它们留在本来位置而不需要进行移动的话,处理这种情况可以通过建立别名的方式将 URL 指向特定的目录

1.编辑主配置文件

#vim /usr/local/apache2/etc/httpd.conf

Include etc/extra/httpd-autoindex.conf         #去掉注释,开启调用子配置文件

2.编辑子配置文件

#vim /usr/local/apache2/etc/extra/httpd-autoindex.conf

Alias /icons/ "/usr/local/apache2/icons/"

结构: 别名  "真实目录"             #真实目录的结尾要有/,否则报错

<Directory "/usr/local/apache2/icons">

&#8203;        Options Indexes MultiViews

&#8203;    AllowOverride None

&#8203;    Require all granted

</Directory>

可以根据模板编写一个自己需要的目录别名

2)Apache的用户认证

有时候,我们需要给一些特殊的访问设置一个用户认证机制,增加安全。比如我们的个人网站,一般都是有一个管理后台的,虽然管理后台本身就有密码,但我们为了更加安全,可以再设置一层用户身份认证。

1.编辑配置文件

#vim /usr/local/apache2/etc/httpd.conf

在需要进行登录认证的目录标签中加入如下配置:

<Directory "/usr/local/apache2/htdocs/admin">                  #声明被保护目录
    Options Indexes FollowSymLinks
    AllowOverride **ALL**                                               #开启权限认证文件.htaccess
    Require all granted
</Directory>

2.在指定目录下创建权限文件

切换到/usr/local/apache2/htdocs/admin,创建 .htaccess 文件,并添加下面的内容

#vim .htaccess

AuthName"Welcome to "              

#提示信息

AuthType basic                                             

#加密类型

AuthUserFile /usr/local/apache2/htdocs/admin/apache.passwd

#密码文件,文件名自定义。(使用绝对路径)

require valid-user

#允许密码文件中所有用户访问

3.建立密码文件,加入允许访问的用户。 (此用户和系统用户无关)

#/usr/local/apache2/bin/htpasswd  -c  /usr/local/apache2/htdocs/admin/apache.passwd  test1

-c  建立密码文件,只有添加第一个用户时,才能-c

#/usr/local/apache2/bin/htpasswd  -m  /usr/local/apache2/htdocs/admin/apache.passwd  test2

-m 再添加更多用户时,使用-m 参数

注意: htpasswd 该命令是 httpd 的命令,需要绝对路径

4.重启apache服务

#/usr/local/apache2/bin/apachectl -t

#/usr/local/apache2/bin/apachectl stop

#/usr/local/apache2/bin/apachectl start

3)虚拟主机(重点)

虚拟主机,也叫“网站空间”,就是把一台运行在互联网上的物理服务器划分成多个“虚拟”服务器。虚拟主机技术极大的促进了网络技术的应用和普及。同时虚拟主机的租用服务也成了网络时代的一种新型经济形式。

虚拟主机的分类:

基于 IP的虚拟主机:一台服务器,多个 ip,搭建多个网站

基于端口的虚拟主机:一台服务器,一个 ip,搭建多个网站,每个网络使用不同端口访问

基于域名的虚拟主机:一台服务器,一个 ip,搭建多个网站,每个网站使用不同域名访问

实验准备:

1.域名解析:准备两个域名

#/etc/hosts

ip地址   www.sohu.com

ip地址   www.sina.com

#使用本地hosts文件进行解析

2.网站主页目录规划

在/htdocs/目录下分别创建 sohu 和 sina 两个目录并在新建录内创建index.html 文件(分别写不一样的内容)

/usr/local/apache2/htdocs/

实验步骤:

1.修改主配置文件开启文件关联

#vim /usr/local/apache2/etc/httpd.conf

Include etc//extra/httpd-vhosts.conf                #此行取消注释

2.编辑子配置文件,编写虚拟主机标签

#vim /usr/local/apache2/etc/extra/ httpd-vhosts.conf

添加下方内容,有几个虚拟主机就写几组(添加之前先把原先存在的示例删除掉)

<Directory "/usr/local/apache2/htdocs/sina">            ---注释掉
    Options Indexes FollowSymLinks
    AllowOverride None
    Require all granted
</Directory>

#目录权限标签根据需要自行添加

<VirtualHost ip地址:80>                      #虚拟主机标签

&#8203;        ServerAdmin webmaster@sina.com                 #管理员邮箱

&#8203;        DocumentRoot ""/usr/local/apache2/htdocs/sina"              #网站主目录

&#8203;        ServerName www.sina.com                             #完整域名

&#8203;        ErrorLog "logs/sina-error log"                          #错误日志

&#8203;        CustomLog "logs/sina-access log" common            #访问日志

</VirtualHost>

3.重启服务,验证结果

#/usr/local/apache2/bin/apachectl -t

#/usr/local/apache2/bin/apachectl stop

#/usr/local/apache2/bin/apachectl start

windows下:浏览器下输入两个不同的域名验证网页内容(提前修改 windows 的 hosts 文件)

Linux下:通过elinks/curl命令验证: elinks/curl URL 地址(提前修改windows 的hosts 文件)

4)域名跳转

一个站点难免会有多个域名,而多个域名总得有一个主次,比如我的网站可以用两个域名访问:www.sina.com 和ww.sohu.cn 但大家发现不管我用哪个域名访问,最终都会跳转到www.sina.com 上来。这个行为就叫做域名跳转,状态码:301 是永久跳转,302 是临时跳转,网站上一定要设置为 301,这样对搜索引擎是比较友好的。

实验条件:

1.虚拟主机能正常访问

2.打开主配置文件开启重写模块

&#8203;        LoadModule rewrite_module modules/mod_rewrite.so                 #取消注释

实验步骤:

1.修改虚拟主机配置文件

#vim /usr/local/apache2/etc/httpd.conf

<Directory "/usr/local/apache2/htdocs/sohu">
    Options Indexes FollowSymLinks
    AllowOverride All
    Require all granted
</Directory>

2.创建规则匹配文件

#vim /usr/local/apache2/htdocs/sohu/.htaccess

&#8203;        在指定的网站目录下创建文件,并添加以下内容

&#8203;        RewriteEngine on

&#8203;        #开启rewrite功能

&#8203;        RewriteCond %{HTTP_HOST}  ^www.sohu.com

&#8203;        #把以www.sina.com   开头的内容赋值给HTTP_HOST变量

&#8203;        RewriteRule  ^(.*)$  http://www.sina.com/$1  [R=permanent,L]

&#8203;        #“(.*)$ 指代客户端要访问的资源,

&#8203;        #$1 把.* 所指代的内容赋值到$1变量中

&#8203;        #R=permanent 永久重定向 = 301

&#8203;        #L 指定该规则为最后一条生效的规则,以后的不再生效

3.重启服务器并测试

#/usr/local/apache2/bin/apachectl -t

#/usr/local/apache2/bin/apachectl stop

#/usr/local/apache2/bin/apachectl start

5)Apache+openssl实现https(重点)

HTTPS(全称:Hypertext Transfer ProtocolSecurel 超文本传输安全协议),是以安全为目标的HTTP通道,简单讲是 HTTP 的安全版。即 HTTP 下加入 SSL层,用于安全的 HTTP 数据传输。这个系统被内置于浏览器中,提供了身份验证与加密通讯方法。现在它被广泛用于万维网上安全敏感的通讯,例如交易支付方面。

1.准备工作:

检查 Apache 是否支持 SSL,检查相应模块是否安装,若安装则将模块启用模块存放目录:/usr/local/apache2/modules

检查模块是否启用:apachectl -M

2.CA证书申请:

&#8203;        a.openssl genrsa -out ca.key 2048

&#8203;        #建立服务器私钥,生成 RSA 密钥

&#8203;        b.openssl req -new -key ca.key -out atguigu.csr

&#8203;        #需要依次输入国家,地区,城市,组织,组织单位,Email 等信息。最重要的是有一个 commonname,可以写你的名字或者域名。        如果为了 https 申请,这个必须和域名吻合,否则会引发浏览器警报。生成的 csr 文件交给 CA 签名后形成服务端自己的证书

&#8203;        c. openssl x509 -req -days 365 -sha256 -in atguigu.csr -signkey ca.key -out atguigu.crt

&#8203;        #使用 CA 服务器签发证书,设置证书的有效期等信息

&#8203;        注意 1: 生成完秘钥和证书文件后,将文件存放在 Apache 的安装目录下的 cert 目录下

&#8203;        注意 2: 在生产环境中必须要在 https 证书厂商注册否则浏览器不识别)

3.配置文件修改:

&#8203;        a.调用 ssl 模块,并启用 ssl 独立配置文件

&#8203;        #vim /usr/local/apache2/etc/httpd.conf        

&#8203;                LoadModule ssl_module modules/mod_ssl.so                #取消掉注释即可使用

&#8203;                Include etc/extra/httpd-ssl.conf                       #取消注释

&#8203;        b.修改 etc/extra/httpd-ssl.conf配置文件,调用证书等文件

&#8203;                #添加 SSL 协议支持协议,去掉不安全的协议

&#8203;                SSLProtocolall -SSLV2 -SSLV3

&#8203;                #修改加密套件如下

&#8203;                SSLCipherSuite HIGH:!RC4:MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!EXP:+MEDIUM.

&#8203;                SSLHonorCipherOrder on

&#8203;                #证书公钥配置(签字的)

&#8203;                SSLCertificateFile cert/atguigu.crt

&#8203;                #证书私钥配置

&#8203;                SSLCertificateKeyFile cert/ca.key

&#8203;        c.修改主配置文件,添加虚拟主机

&#8203;                #vim /usr/local/apache2/etc/httpd.conf

&#8203;                        `<VirtualHost_default_:443>`

&#8203;                        #DocumentRoot 目录位置要和 httpd.conf 里面的一致

&#8203;                        DocumentRoot "/usr/local/apache2/htdocs"

&#8203;                        ServerName localhost:443

&#8203;                        SSLCertificateFile cert/atguigu.crt.

&#8203;                        SSLCertificateKeyFile cert/ca.key

&#8203;                        SSLCertificateChainFile cert/atguigu.crt

</VirtualHost>

4.结果验证:

#apachectl -t           #检查配置文件语法

#apachectl  restart           #重启apache,并测试是否可以使用 https 访问

报错提示: AH00526: Syntax error on line 78 of /usr/local/apache2/etc/extra/httpd-ssl.conf:SSLSessionCache: 'shmcb' session cache not supported (known names: ). Maybe you need to load theappropriate socache module(mod socache shmcb?)

解决方案:要么不调用此模块,要么让调用的模块加载上

5.强制跳转 https:

有些时候为了安全,网站不允许使用 http 访问,仅允许使用 https 访问,目的是为了更加安全

在http 部分的目录权限标签中添加一下内容

#vim /usr/local/apache2/etc/httpd.conf

找到DOC,不能出了范围

<Directory "/usr/local/apache2/htdocs">

&#8203;        RewriteEngine on                          #开启转发规则

&#8203;        RewriteCond %{SERVER_PORT}  !^443$                       #检查访问端口只要目标不是443的

&#8203;        RewriteRule  ^(.*)?$ https://%{SERVER_NAME}/$1   [R=301,L]              #全都使用https重新访问

</Directory>

在做后面实验时为了更加方便理解,我们可以先把 https 关闭掉

需要关闭: 跳转&虚拟主机&ssl 配置文件调用        

6)Apache日志切割

我们每访问一次网站,那么就会记录若干条日志。如果日志不去管理,时间长了日志文件会越来越大,如何避免产生大的日志文件?其实 apache 有相关的配置,使日志按照我们的需求进行归档,比如每天一个新日志,或者每小时一个新的日志。

1.首先简单设置日志的路径名称

#vim /usr/local/apache2/etc/httpd.conf

编辑添加内容如下:

ErrorLog    ”logs/error.log“

CustomLog ”logs/access.log“ combined

指定了日志存放在/usr/local/apache2/logs 目录下分别为error.log 和access.log,combined 为日志显示的格式,日志格式可以参考配置文件 httpd.conf 中格式的指定,如下:

LogFormat "%h %l %u %t \\"%r" %>s %b  \\"%{Referer}i\\" \\"%{User-Agent}i"" combined

LogFormat "%h %l %u %t \\"%r\\" %>s %b" common

2.设置apache 日志分割

ErrorLog "|/usr/local/apache2/bin/rotatelogs -l /usr/local/apache2/logs/error_%Y%m%d. log 86400"

CustomLog "|/usr/local/apache2/bin/rotatelogs -l /usr/local/apache2/logs/access_%Y%m%d. log 86400" common

注意 : 若开启了 https,则需要修改 http-ssl.conf 配置文件中的日志记录条目

ErrorLog 是错误日志,CustomLog 是访问日志。 就是管道符,意思是把产生的日志交给 rotatelog这个工具,而这个工具就是 apache 自带的切制日志的工具。-1 的作用是校准时区为UTC,也就是北京时间。86400,单位是秒,正好是一天,那么日志会每天切割一次。而最后面的 combined 为日志的格式,在httpd.conf 中有定义。

7)不记录指定文件类型的日志

如果一个网站访问量特别大,那么访问日志就会很多,但有一些访问日志我们其实是可以忽略掉的,比如网站的一些图片,还有 js、css 等静态对象。而这些文件的访问往往是巨量的,而且即使记录这些日志也没有什么用,那么如何忽略不记录这些日志呢?

1.配置日志不记录图片的访问

#vim /usr/local/apache2/etc/httpd.conf

找到DOC,不能出了范围

SetEnvIf Request_URI ".*\\.gif" image-request

SetEnvIf Request_URI ".*\\.jpg" image-request

SetEnvIf Request_URI ".*\\.png" image-request

SetEnvIf Request_URI ".*\\.bmp" image-request

SetEnvIf Request_URI ".*\\.swf" image-request

SetEnvIf Request_URI ".*\\.js" image-request

SetEnvIf Request_URI ".*\\.css" image-request

CustomLog "|/usr/local ... _%Y%d .log 86400" combined env=!image-request

说明:在原来的访问日志配置基础上,增加了一些 image-request 的定义,比如把 gif、jpg、bmp、swf、is、css 等结尾的全标记为image-request,然后在配置日志后加一个标记env=!image-request,表示取反。

tailf 日志文件              --监控日志

8)Apache配置静态缓存

所说的静态文件指的是图片、js、css 等文件,用户访问一个站点,其实大多数元素都是图片、js、css 等,这些静态文件其实是会被客户端的浏览器缓存到本地电脑上的,目的就是为了下次再请求时不再去服务器上下载,这样就加快了速度,提高了用户体验。但这些静态文件总不能一直缓存,它总有一些时效性,那么就得设置这个过期时间。

1.配置静态缓存

#vim /usr/local/apache2/conf/httpd.conf

<IfModule mod_expires.c>              #此模块默认未启用,请手动启用

&#8203;        ExpiresActive on

&#8203;        ExpiresByType image/gif "access plus 1 days"

&#8203;        ExpiresByType image/jpeg "access plus 24 hours"

&#8203;        ExpiresByType image/png "access plus 24 hours"

&#8203;        ExpiresByType text/css "now plus 2 hours"

&#8203;        ExpiresByType application/x-javascript "now plus 2 hours"

&#8203;        ExpiresByType application/javascript "now plus 2 hours"

&#8203;        ExpiresByType application/x-shockwave-flash "now plus 2 hours"

&#8203;        ExpiresDefault "now plus 0 min"

</IfModule>

或者使用 mod_headers 模块实现:该模块默认启用

<IfModule mod_headers.c>

#htm、html、txt 类的文件缓存一个小时

<filesmatch "\\.(html|htm|txt)$">

&#8203;        header set cache-control "max-age=3600"

</filesmatch>



#css、js、swf 类的文件缓存一个星期

<filesmatch "\\.(css|js|swf)$">

&#8203;        header set cache-control "max-age=604800"

</filesmatch>



#jpg、gif、jpeg、png、ico、flv、pdf 等文件缓存一年

<filesmatch "\\.(jpg|gif|jpeg|png|ico|flv|pdf)$">

&#8203;        header set cache-control "max-age=29030400"

</filesmatch>

说明:这里的时间单位可以 days、hours 甚至是 min,两种不同的方法,上面使用的是 mod_expires;而下面用的是 mod headers,要想使用这些模块,必须要事先已经支持。如何查看是否支持,使用命令:

#/usr/local/apache2/bin/apachectl -M

2.重启服务器并验证

#/usr/local/apache2/bin/apachectl -t

#/usr/local/apache2/bin/apachectl stop

#/usr/local/apache2/bin/apachectl start

验证:

#curl -x服务器IP地址:80 'http://www.sohu.com/image/a.jpg' -I

9)禁止解析PHP

某个目录下禁止解析 PHP,这个很有作用,我们做网站安全的时候,这个用的很多,比如某些目录可以上传文件,为了避免上传的文件有木马,所以我们禁止这个目录下面的访问解析 PHP。

配置禁止解析 php

<Directory /usr/local/apache2/htdocs/data>

&#8203;        php_admin_flag engine off

&#8203;        <filesmatch "(.*)php">

&#8203;                Order deny,allow

&#8203;                Deny from all

&#8203;        </filesmatch>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-19 17:43:53 | 显示全部楼层
自己搭建如果只是玩玩
简单点   自己百度一下 找一个堡垒机 app    宝塔 直接可以安装

从头的化 建议看一下视频 自己手动操作一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-26 00:20

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表