首页 > Web开发 > 详细

Apache 配置

时间:2019-12-27 16:58:17      阅读:97      评论:0      收藏:0      [点我收藏+]

2.1默认虚拟主机

2.1.1介绍

 

虚拟主机是一种在单一主机或主机群上,实现多网域服务的方法,可以运行多个网站或服务的技术。

虚拟主机使用特殊的软硬件技术,把一台计算机主机分成一台台“虚拟”的主机,每一台虚拟主机都具有独立的域名IP地址(或共享的IP地址),具有完整的Internet服务器功能。好比把一座房子分为了若干房间

虚拟主机的关键技术在于,即使在同一台硬件、同一个操作系统上,运行着为多个用户打开的不同的服务器程式,也互不干扰。而各个用户拥有自己的一部分系统资源(文档存储空间、内存、CPU等)。

各个虚拟主机之间完全独立,在外界看来,每一台虚拟主机和一台单独的主机的表现完全相同。所以,这种被虚拟化的逻辑主机被形象地称为“虚拟主机”也叫网站空间

 

2.1.2配置

编辑配置文件 httpd.conf

#vim /usr/local/apache2.4/conf/httpd.conf  //搜索关键词httpd.vhost ,找到这行把井号删除

保存主配置文件,然后编译虚拟机配置文件:

# vim /usr/local/apache2.4/conf/extra/hpptd-vhsts.conf

//这个配置文件就是主配置文件了,后面操作都是在这个里面完成的

<VirtualHost *:80>

ServerAdmin admin@aminglinux.com

DocumentRoot “ /data/wwwroot/aming.com”

ServerName aming.com

ServerAlias www.aming.com

Errorlog “/logs/aming.com-error_log”

CustomLog “ logs/aming.com-access_log ”common

</VirtualHost>

<VirtualHost *:80>

DocumentRoot “/data/wwwroot/www.123.com”

ServerName  www.123.com

</VirtualHost>

 

# mkdir -p /data/wwwroot/aming.com  /data/wwwroot/www.123.com

#echo “aming.com” > /data/wwwroot/aming.com/index.html   //网页默认主页就是index.html

# echo “123.com” > /data/wwwroot/123.com/index.html

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

#/usr/local/apache2.4/bin/apachectl  graceful  //这个操作是重新加载httpd服务,避免重启

#curl -x127.0.0.1:80 aming.com

  Aming.com

#curl -x127.0.0.1:80 www.123.com

123.com

#curl -x127.0.0.1:80 www.abc.com

Aming.com

 

 

2.1.3配置验证

 技术分享图片

 

 

2.1.3遇到的问题

 

2.2用户认证

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

<VirtualHost *:80>

DocumentRoot “ /data/wwwroot/www.123.com”

ServerName www.123.com

<Directory /data/wwwroot/www.123.com> //指定认证目录

AllowOverride AuthConfig //这个相当于打开认证的开关

AuthName “123.com user auth” //自定义认证名字 ,作用不

AuthType Basic  //认证的类型,一般为Basic

AuthUserFile /data/.htpasswd //指定密码文件所在位置

Require valid-user //指定需要认证的用户为全部可用用户

</Directory>

</VirtualHost>

 

配置文件完成,但还需要创建密码文件。

#/usr/local/apache2.4/bin/htpasswd -cm /data/.htpasswd aming

// htpasswd命令为创建用户的工具, -c为create -m指定密码加密方式为MD5

// /data/.htpasswd为密码文件,aming为要创建的用户,第一次执行该命令需要加-c

// 第二次创建新用户时,就不用加-c了

否则/data/.htpasswd文件就会被重置,之前的用户被清空

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

//验证没有问题后才能重启或者重新加载

# /usr/local/apache2.4/bin/apachectl graceful

配置完成后需要到宿主机上去修改一下hosts文件,类似linux上的/etc/hosts 把www.123.com域名指向你的这台linux机器 这样才能通过浏览器访问到www.123.com

#192.168.195.135 www.123.com

//左边的ip地址为你的linux IP ,

保存hosts文件后,就可以用浏览器进行访问 www.123.com

输入用户和密码将会进入www.123.com 。上面操作是针对整个站点做的认证,其实也可以针对某个目录或者某个文件进行认证,比如要对www.123.com/admin目录进行认证,只需要修改一个地方,把<Directory  /data/wwwroot/www.123.com>改为<Directory  /data/wwwroot/www.123.com/admin>。如果是一个文件,比如www.123.com/admin.php

<VirtualHost *:80>

DocumentRoot “ /data/wwwroot/www.123.com”

ServerName www.123.com

   <FilesMatch admin.php>

AllowOverride AuthConfig

AuthType Basic

AuthName “123.com user auth”

AuthUserFile /data/.htpasswd

require valid-user

</FileMatch>

</VirtualHost>

但这样会有一个问题 ,网址中带有admin.php的链接都会弹出认证窗口

 

2.3域名跳转

123.com 域名跳转到www.123.com 下, 配置如下  :

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

#<VirtualHost *:80>

# DocumentRoot "/data/wwwroot/www.123.com"

# ServerName www.123.com

 #ServerAlias 123.com

 #<IfModule mod_rewrite.c> //需要mod_rewrite模块支持

 #     RewriteEngine on //打开rewrite

 #     RewriteCond %{HTTP_HOST} !^www.123.com$

//定义rewrite的条件,当主机名(域名)不是www.123.com时满足条件

 #     RewriteRule ^/(.*)$ http://123.com/$1 [R=301,L]

//定义rewrite规则,当满足上面条件时,这条规矩才会执行

# </IfModule>

#</VirtualHost>

 

# /usr/local/apache2.4/bin/apachectl -M|grep -i rewrite

//如果没有任何输出,则需要编译配置文件

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

//搜索rewrite ,找到那行把前面的#删除

# /usr/local/apache2.4/bin/apachectl graceful

#/usr/local/apache2.4/bin/apachectl graceful -M |grep -i rewrit

配置完后,进行测试,在这里用curl就可以看到效果

#curl -x127.0.0.1:80 -I 123.com

 

 技术分享图片

 

 

 

2.4访问日志

#vim /usr/local/apache2.4/conf/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

%h为访问网站ip;%l为远程登录名,这个字段上基本为-;%u为用户名,当使用用户认证时,这个字段为认证的用户名;%t为时间;%r为请求的动作(比如curl -I时九尾HEADE);%s为请求的状态码,写成%>s为最后的状态码;%b为传输数据大小;%{Referer}i为referer信息(请求本地上一次的地址就为referer);%{User-Agent}i为浏览器标识

#vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf //把123.com虚拟主机改写如下

#<VirtualHost *:80>

# DocumentRoot "/data/wwwroot/www.123.com"

# ServerName www.123.com

 #ServerAlias 123.com

 #<IfModule mod_rewrite.c>

 #     RewriteEngine on

 #     RewriteCond %{HTTP_HOST} !^www.123.com$

 #     RewriteRule ^/(.*)$ http://123.com/$1 [R=301,L]

# </IfModule>

# CustomLog "logs/123.com-access_log" combined

 

#</VirtualHost>

 

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

# /usr/local/apache2.4/bin/apachectl graceful

#curl -x127.0.0.1:80 -I 123.com

#tail /usr/local/apache2.4/logs/123.com-access_log

发现生成日志并且有相关日志

限制图片js css 等静态文件写入到日志中,防止日志文件过大

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

#<VirtualHost *:80>

# DocumentRoot "/data/wwwroot/www.123.com"

# ServerName www.123.com

# ServerAlias 123.com

#<IfModule mod_rewrite.c>

 #  RewriteEngine on

 #     RewriteCond %{HTTP_HOST} !^www.123.com$

 #     RewriteRule ^/(.*)$ http://123.com/$1 [R=301,L]

#</IfModule>

#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/apache2.4/bin/rotatelogs -l logs/123.com-access_%Ym%d.log 86400"combined env=!image-request

</VirtualHost>

先定义了一个image-request环境变量,把gif、jpg、 png、bmp. swf、js、 Css等格式的文件全部归

类到image- request里,后面的env=!image-request有用到- -个"!", 这相当于取反了,意思是把image . request以外的类型文件记录到日志里。

 

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

 技术分享图片

 

 

# /usr/local/apache2.4/bin/apachectl graceful

#curl -x127.0.0.1:80 /logs/   //再次访问 才会生成新的日志

# ls /usr/local/apache2.4/logs

#touch /data/wwwroot/www.123.com/aming.jpg

#touch /data/wwwroot/www.123.com/aming.txt

# curl -x127.0.0.1:80 www.123.com/aming.jpg

# curl -x127.0.0.1:80 www.123.com/aming.txt

# cat /usr/local/apache2.4/logs/132.com-access_20170318.log  //查看日志

 

 技术分享图片

 

 

 

 

2.5访问日记不记录静态文件

 技术分享图片

 

 

2.6访问日记切割

静态元素过期时间

 技术分享图片

 

 

配置防盗链

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

#<VirtualHost *:80>

#    DocumentRoot "/data/wwwroot/www.123.com

#    ServerName www.123.com

#    ServerAlias 123.com

#    CustomLog "|/usr/local/apache2.4/bin/rotatelogs -l logs/123.com-access_%Ym%d.log 86400"combined

# <Directory /data/wwwroot/www.123.com>

#    SetEnvIfNoCase Referer "http://www.123.com" local_ref

#    SetEnvIfNoCase Referer "http://123.com " local_ref

#    SetEnvIfNoCase Referer "^$" local_ref

# <filesmatch "\.(txt|doc|mp3|zip|rar|jpg|gif)">

#     Order Allow,Deny

#     Allow from env=local_ref

# </filesmatch>

# </Directory>

#</VirtualHost>

 

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

 

# /usr/local/apache2.4/bin/apachectl graceful

# curl -x127.0.0.1:80 -I -e  “http:// www.123.com/123.txt  ”http://www.123.com/aming.jpg

 技术分享图片

 

 

# curl -x127.0.0.1:80  -I  -e  “http://www.1234.com/1.txt” http://www.123.com/aming.jpg

 技术分享图片

 

 

# curl -x127.0.0.1:80  -I  -e  “http://www.1234.com/1.txt” http://www.123.com/index.html

 

 技术分享图片

 

 

访问控制Diretory

 

 技术分享图片

 

 

 技术分享图片

 

 技术分享图片

 

 

访问控制Diretory\FileMatch

限制某个目录禁止解析PHP

也可以单独针对某个文件来做限制:

<Directory /data/wwwroot/www.123.com>

<Filesmatch  “admin.php(.*)”>

   Order deny,allow

Deny from all

   Allow from 127.0.0.1

</Filesmatch>

</Directory>

为了避免让黑客拿到服务器权限,我们需要把能上传文件的目录直接禁止解析PHP代码(不用担心会影响网站访问,若这种目录也需要解析PHP,那说明程序员不合格)配置如下

#<VirtualHost *:80>

#         DocumentRoot "/data/wwwroot/www.123.com

#        ServerName www.123.com

#        ServerAlias 123.com

#        CustomLog "|/usr/local/apache2.4/bin/rotatelogs -l logs/123.com-access_%Ym%d.log 86400"combined

#    <Directory /data/wwwroot/www.123.com/upload>

#       php_admin_flag engine off

#    </Directory>

#</virtualHost>

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

 技术分享图片

 

 

# /usr/local/apache2.4/bin/apachectl graceful

#cp /usr/local/apache2.4/htdocs/1.php  /data/wwwroot/www.123.com/upload/

#curl -x127.0.0.1:80 www.123.com/upload/1.php

这说明1.php是不能正常解析的

多台电脑同时访问一个网站会耗尽服务器资源,从而使之不能正常工作。我们可以通过限制user_agent发挥防攻击作用。

修改user_agent

 

#vim  /usr/local/apache2.4/conf/extra/httpd-vhosts.conf   //编辑虚拟主机配置文件

//内容改为如下

 

#<VirtualHost *:80>

#        DocumentRoot "/data/wwwroot/www.123.com"

#        ServerName www.123.com

#        ServerAlias 123.com

#        CustomLog "|/usr/local/apache2.4/bin/rotatelogs -l logs/123.com-access_%Y%m%d.log 86400"combined

#        <IfModule mod_rewrite.c>

#               RewriteEngine on

#               RewriteCond %{HTTP_USER_AGENT} .*curl.* [NC,OR]

#                RewriteCond %{HTTP_USER_AGENT} .*baidu.com.* [NC]

#                RewriteRule .* - [F]

#        </IfModule>

#</VirtualHost>

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

 技术分享图片

 

 

# /usr/local/apache2.4/bin/apachectl graceful

# curl -I -x127.0.0.1:80 www.123.com/ipload/1.php

#curl -A “123123” -I -x127.0.0.1:80 www.123.com/upload/1.php

Curl -A 选项指定user_agent  第一个请求,user_agent“curl/7.29”匹配了第一个条件,所以会403;杜尔哥请求,user_agent以自定义的“123123”没有匹配任何条件,所以状态码为200

Apache 配置

原文:https://www.cnblogs.com/y0620/p/12107977.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!