wy521@ 发表于 2022-10-21 12:47:51

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

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

当初约定 发表于 2022-10-21 17:29:14

这个可以去CSDN里找找教程,在操作之前记得做好快照(切记切记),有些Linux的发行版本自带有Apache,只不过名字叫httpd,没有的话就自行安装,不过楼主没有硬需的话可以试试Nginx{:10_256:}这个我常用,而且部署方式简单快捷,轻量级的

wcx1279971605 发表于 2022-10-24 15:18:07

#!/bin/bash
ip=$(ifconfig | sed -n 2p | awk '{print $2}')
#判断服务器能否访问外网
check_net() {
    ping -c 2 www.baidu.com > /dev/null 2>&1
    if [ $? -eq 0 ];then
      echo "网络畅通"
    else
      echo "网络不通!!!"
    fi
}
install() {
    echo "开始安装lamp所需组件"
    yum -y install httpd php php-mysql php-gd mariadb mariadb-server > /dev/null
}
file() {
    echo "修改Apache配置文件"
    sed -i '164 s/index.html/index.php/' /etc/httpd/conf/httpd.conf
}
index() {
    echo "创建测试页面"
    echo "<?php phpinfo();?>" > /var/www/html/index.php
}
start_svc() {
    echo "开启Apache服务"
    systemctl start httpd
    echo "开启mysql服务"
    systemctl start mariadb
}
check_net
install
file
index
start_svc
echo "请访问: http://$ip"



随便从网上复制一个脚本。   执行就行了

上杉绘梨衣wq 发表于 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">

​        Options Indexes MultiViews

​    AllowOverride None

​    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.passwdtest1

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

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

-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>                      #虚拟主机标签

​        ServerAdmin webmaster@sina.com               #管理员邮箱

​        DocumentRoot ""/usr/local/apache2/htdocs/sina"            #网站主目录

​        ServerName www.sina.com                           #完整域名

​        ErrorLog "logs/sina-error log"                        #错误日志

​        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.打开主配置文件开启重写模块

​        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

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

​        RewriteEngine on

​        #开启rewrite功能

​        RewriteCond %{HTTP_HOST}^www.sohu.com

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

​        RewriteRule^(.*)$http://www.sina.com/$1

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

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

​        #R=permanent 永久重定向 = 301

​        #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证书申请:

​        a.openssl genrsa -out ca.key 2048

​        #建立服务器私钥,生成 RSA 密钥

​        b.openssl req -new -key ca.key -out atguigu.csr

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

​        c. openssl x509 -req -days 365 -sha256 -in atguigu.csr -signkey ca.key -out atguigu.crt

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

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

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

3.配置文件修改:

​        a.调用 ssl 模块,并启用 ssl 独立配置文件

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

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

​                Include etc/extra/httpd-ssl.conf                     #取消注释

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

​                #添加 SSL 协议支持协议,去掉不安全的协议

​                SSLProtocolall -SSLV2 -SSLV3

​                #修改加密套件如下

​                SSLCipherSuite HIGH:!RC4:MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!EXP:+MEDIUM.

​                SSLHonorCipherOrder on

​                #证书公钥配置(签字的)

​                SSLCertificateFile cert/atguigu.crt

​                #证书私钥配置

​                SSLCertificateKeyFile cert/ca.key

​        c.修改主配置文件,添加虚拟主机

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

​                        `<VirtualHost_default_:443>`

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

​                        DocumentRoot "/usr/local/apache2/htdocs"

​                        ServerName localhost:443

​                        SSLCertificateFile cert/atguigu.crt.

​                        SSLCertificateKeyFile cert/ca.key

​                        SSLCertificateChainFile cert/atguigu.crt

</VirtualHost>

4.结果验证:

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

#apachectlrestart         #重启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">

​        RewriteEngine on                        #开启转发规则

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

​        RewriteRule^(.*)?$ https://%{SERVER_NAME}/$1               #全都使用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>            #此模块默认未启用,请手动启用

​        ExpiresActive on

​        ExpiresByType image/gif "access plus 1 days"

​        ExpiresByType image/jpeg "access plus 24 hours"

​        ExpiresByType image/png "access plus 24 hours"

​        ExpiresByType text/css "now plus 2 hours"

​        ExpiresByType application/x-javascript "now plus 2 hours"

​        ExpiresByType application/javascript "now plus 2 hours"

​        ExpiresByType application/x-shockwave-flash "now plus 2 hours"

​        ExpiresDefault "now plus 0 min"

</IfModule>

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

<IfModule mod_headers.c>

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

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

​        header set cache-control "max-age=3600"

</filesmatch>



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

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

​        header set cache-control "max-age=604800"

</filesmatch>



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

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

​        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>

​        php_admin_flag engine off

​        <filesmatch "(.*)php">

​                Order deny,allow

​                Deny from all

​        </filesmatch>

tengke 发表于 2023-4-19 17:43:53

自己搭建如果只是玩玩
简单点   自己百度一下 找一个堡垒机 app    宝塔 直接可以安装

从头的化 建议看一下视频 自己手动操作一下
页: [1]
查看完整版本: 如何在Linux中 安装Apache,搭建自己的web服务器?请求援助