LAMP 特性1

虚拟主机


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

image

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

image

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

image

[root@localhost ~]# mkdir /data/dota.com
[root@localhost ~]# vim /data/dota.com/dota.php

<?php
echo "hello world! hello dotaer";

OK 访问成功 (事先要保证httpd服务开启,80端口已经打开,而且防火墙要过才行)

image


用户认证

  • 针对整个网站认证:

第一步:添加配置文件

配置案例如下:

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

image

第二步:创建密码文件

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

image

第二步:直接测试

[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)

image

配置案例如下:

需求,把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

image

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格式。

image

[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"

image

访问日志不记录指定类型的文件

如果不去做限制,每个请求都包含很多无意义的元素。然后系统就会去记录日志,导致无端消耗内存和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>

image

测试现象

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

image

测试现象

[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

打开模块

image

贴上脚本

image

测试

[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

转载于:https://my.oschina.net/u/3997678/blog/2994398

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值