虚拟主机
- 301 永久重定向
- 302 临时重定向
- 304 文件缓存未过期
- 200 请求成功
- 404 网页不存在
- 401 需要认证
- 403 拒绝请求
[root@localhost ~]# vim /usr/local/httpd/conf/httpd.conf //no 掉 #

[root@localhost ~]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf //进入虚拟主机配置文件

其中ServerAdmin用来设置服务器返回给客户端的错误信息中包含的管理员邮件地址。便于用户在收到错误信息后能及时与管理员取得联系。==ServerName为配置的域名,如果外网用户根据DNS解析到该服务器,而该服务器又没有相对应的域名系统就认定由该虚拟主机来响应,也就是默认虚拟主机的意思了!== 然后我们根据自己的自定义来修改配置文件。注意你定义的ServerName要事先在自己的hosts目录下进行说明!不然会解析到外网DNS服务器上去的。

[root@localhost ~]# mkdir /data/dota.com
[root@localhost ~]# vim /data/dota.com/dota.php
<?php
echo "hello world! hello dotaer";
OK 访问成功 (事先要保证httpd服务开启,80端口已经打开,而且防火墙要过才行)

用户认证
- 针对整个网站认证:
第一步:添加配置文件
配置案例如下:
<VirtualHost *:80>
DocumentRoot "/data/dota.com/"
ServerName dota.com
<Directory /data/dota.com> //指定认证的目录
AllowOverride AuthConfig //这个相当于打开认证的开关
AuthName "123.com user auth" //自定义认证的名字,作用不大
AuthType Basic //认证的类型,一般为Basic
AuthUserFile /data/.htpasswd //指定密码文件所在位置
require valid-user //指定需要认证的用户为全部可用用户
</Directory>
</VirtualHost>

第二步:创建密码文件
[root@localhost shuxue]# touch /data/pass
[root@localhost shuxue]# /usr/local/httpd/bin/htpasswd -c -m /data/pass hello //-c 是创建新密码 -m是md5加密
New password:
Re-type new password:
第三步:测试现象
[root@localhost shuxue]# curl -x127.0.0.1:80 shuxue.com/111.php -I
HTTP/1.1 401 Unauthorized
Date: Thu, 27 Dec 2018 06:08:45 GMT
Server: Apache/2.4.37 (Unix) PHP/5.5.38
WWW-Authenticate: Basic realm="access auth"
Content-Type: text/html; charset=iso-8859-1
[root@localhost shuxue]# curl -u hello:hello shuxue.com/111.php -I
HTTP/1.1 200 OK
Date: Thu, 27 Dec 2018 06:11:27 GMT
Server: Apache/2.4.37 (Unix) PHP/5.5.38
X-Powered-By: PHP/5.5.38
Content-Type: text/html
- 针对个别页面认证
第一步:添加配置
配置案例如下:
<VirtualHost *:80>
ServerAdmin lol.com
DocumentRoot "/data/lol.com"
ServerName lol.com
<FilesMatch admin.php>
AllowOverride AuthConfig
AuthName "123.com user auth"
AuthType Basic
AuthUserFile /data/.htpasswd
require valid-user
</FilesMatch>
ErrorLog "logs/dummy-host2.example.com-error_log"
CustomLog "logs/dummy-host2.example.com-access_log" common
</VirtualHost>

第二步:直接测试
[root@localhost yuwen]# curl yuwen.com/111.php -I
HTTP/1.1 200 OK
Date: Thu, 27 Dec 2018 06:19:06 GMT
Server: Apache/2.4.37 (Unix) PHP/5.5.38
X-Powered-By: PHP/5.5.38
Content-Type: text/html
[root@localhost yuwen]# curl yuwen.com/222.php -I
HTTP/1.1 401 Unauthorized
Date: Thu, 27 Dec 2018 06:19:16 GMT
Server: Apache/2.4.37 (Unix) PHP/5.5.38
WWW-Authenticate: Basic realm="access auth"
Content-Type: text/html; charset=iso-8859-1
[root@localhost yuwen]# curl -u hello:hello yuwen.com/222.php -I
HTTP/1.1 200 OK
Date: Thu, 27 Dec 2018 06:19:36 GMT
Server: Apache/2.4.37 (Unix) PHP/5.5.38
X-Powered-By: PHP/5.5.38
Content-Type: text/html
域名跳转
多个域名绑定一个ip,可以使用ServerAlias对域名进行跳转,但是有时候为了网站的SEO需要对网站进行跳转操作!

第一步:加载rewrite模块
[root@localhost ~]# vim /usr/local/apache2.4/conf/httpd.conf
[root@localhost ~]# /usr/local/apache2.4/bin/apachectl -M |grep rewrite
rewrite_module (shared)

配置案例如下:
需求,把123.com域名跳转到www.123.com,配置如下:
<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://www.123.com/$1 [R=301,L] //定义rewrite规则,当满足上面的条件时,这条规则才会执行
</IfModule>
</VirtualHost>
/usr/local/apache2/bin/apachectl -M|grep -i rewrite //若无该模块,需要编辑配置文件httpd.conf,删除rewrite_module (shared) 前面的#
[root@localhost yuwen]# curl -x127.0.0.1:80 www.xxoo.com/333.php -I
HTTP/1.1 301 Moved Permanently
Date: Thu, 27 Dec 2018 07:26:43 GMT
Server: Apache/2.4.37 (Unix) PHP/5.5.38
Location: http://shuxue.com/333.php
Content-Type: text/html; charset=iso-8859-1

Apache访问日志
[root@localhost ~]# tail /usr/local/apache2.4/logs/123.com-access_log
[root@localhost ~]# vim /usr/local/apache2.4/conf/httpd.conf
默认的日志格式是common,我们可以修改虚拟主机的配置文件来更改为combined格式。

[root@localhost ~]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf //修改为combined
[root@localhost data]# cat/usr/local/apache2.4/logs/dummy-host.example.com-access_log
127.0.0.1 - - [12/Dec/2018:21:45:52 +0800] "HEAD HTTP://war3.com/dota.php HTTP/1.1" 301 - "-" "curl/7.29.0"
192.168.139.1 - - [12/Dec/2018:21:46:58 +0800] "GET /dota.php HTTP/1.1" 301 235 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36"
192.168.139.1 - hello [12/Dec/2018:21:49:39 +0800] "GET /dota.php HTTP/1.1" 200 25 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36"
192.168.139.1 - hello [12/Dec/2018:21:49:42 +0800] "GET /dota.php HTTP/1.1" 200 25 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36"
127.0.0.1 - - [12/Dec/2018:21:50:06 +0800] "GET HTTP://war3.com/dota.php HTTP/1.1" 301 232 "-" "curl/7.29.0"
192.168.139.1 - - [12/Dec/2018:21:50:24 +0800] "-" 408 - "-" "-"
192.168.139.1 - - [12/Dec/2018:21:50:25 +0800] "-" 408 - "-" "-"
192.168.139.1 - hello [12/Dec/2018:21:51:54 +0800] "GET /dota.php HTTP/1.1" 200 25 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36"
127.0.0.1 - - [12/Dec/2018:21:55:46 +0800] "GET HTTP://war3.com/dota.php HTTP/1.1" 301 232 "-" "curl/7.29.0"

访问日志不记录指定类型的文件
如果不去做限制,每个请求都包含很多无意义的元素。然后系统就会去记录日志,导致无端消耗内存和cpu。而这些日志又是无意义的。
<VirtualHost *:80>
DocumentRoot "/data/wwwroot/www.123.com"
ServerName www.123.com
ServerAlias 123.com
SetEnvIf Request_URI ".*\.gif$" img
SetEnvIf Request_URI ".*\.jpg$" img
SetEnvIf Request_URI ".*\.png$" img
SetEnvIf Request_URI ".*\.bmp$" img
SetEnvIf Request_URI ".*\.swf$" img
SetEnvIf Request_URI ".*\.js$" img
SetEnvIf Request_URI ".*\.css$" img
CustomLog "logs/123.com-access_log" combined env=!img
</VirtualHost>

测试现象
[root@localhost yuwen]# curl -x127.0.0.1:80 yuwen.com/tu.jpg -I
HTTP/1.1 200 OK
Date: Thu, 27 Dec 2018 08:35:58 GMT
Server: Apache/2.4.37 (Unix) PHP/5.5.38
Last-Modified: Fri, 21 Sep 2018 00:38:40 GMT
ETag: "216b4-57656dc5e8400"
Accept-Ranges: bytes
Content-Length: 136884
Content-Type: image/jpeg
[root@localhost yuwen]# curl -x127.0.0.1:80 yuwen.com/111.php -I
HTTP/1.1 200 OK
Date: Thu, 27 Dec 2018 08:36:26 GMT
Server: Apache/2.4.37 (Unix) PHP/5.5.38
X-Powered-By: PHP/5.5.38
Content-Type: text/html
[root@localhost yuwen]# !tail
tail /usr/local/httpd/logs/dummy-host.example.com-access_log
192.168.182.1 - - [27/Dec/2018:16:31:44 +0800] "GET /111.php HTTP/1.1" 200 8 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36"
127.0.0.1 - - [27/Dec/2018:16:36:26 +0800] "HEAD HTTP://yuwen.com/111.php HTTP/1.1" 200 - "-" "curl/7.29.0"
访问日志切割
日志日复一日的写到日志文件里,总有一天会写满,
配置案例如下:
<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 env=!img //关键句
</VirtualHost>

测试现象
[root@localhost ~]# /usr/local/httpd/bin/apachectl -t
Syntax OK
[root@localhost ~]# /usr/local/httpd/bin/apachectl graceful
[root@localhost ~]# curl -x 127.0.0.1:80 yuwen.com/111.php
homepage[root@localhost ~]#
[root@localhost ~]# ls /usr/local/httpd/logs/
access_log dummy-host.example.com-access_20181227.log error_log
dummy-host2.example.com-access_log dummy-host.example.com-access_log httpd.pid
dummy-host2.example.com-error_log dummy-host.example.com-error_log
[root@localhost logs]# cat dummy-host.example.com-access_20181227.log
127.0.0.1 - - [27/Dec/2018:22:03:30 +0800] "GET HTTP://yuwen.com/111.php HTTP/1.1" 200 8 "-" "curl/7.29.0"
配置静态元素过期时间
浏览器访问网站的图片时会把静态的文件缓存在本地电脑里,这样下次再访问时就不用去远程下载了
配置案例如下:
<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 hour"
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>
需要expires_module
curl测试,看cache-control: max-age
打开模块

贴上脚本

测试
[root@localhost httpd]# /usr/local/httpd/bin/apachectl -t
Syntax OK
[root@localhost httpd]# /usr/local/httpd/bin/apachectl graceful
[root@localhost httpd]# curl -x127.0.0.1:80 shuxue.com/3g.jpg -I
HTTP/1.1 200 OK
Date: Thu, 27 Dec 2018 14:42:47 GMT
Server: Apache/2.4.37 (Unix) PHP/5.5.38
Last-Modified: Fri, 21 Sep 2018 00:38:34 GMT
ETag: "10d53-57656dc02f680"
Accept-Ranges: bytes
Content-Length: 68947
Cache-Control: max-age=86400 //缓存时间
Expires: Fri, 28 Dec 2018 14:42:47 GMT
Content-Type: image/jpeg
2万+

被折叠的 条评论
为什么被折叠?



