Apache用户认证
1、编辑文件
[root@centos7 ~]# vi /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
#打开网页时,让你输入Apache认证的用户名,密码
<VirtualHost *:80>
DocumentRoot "/data/wwwroot/111.com"
ServerName 111.com
ServerAlias www.111.com www.example.com
<Directory /data/wwwroot/111.com>
#指定认证的目录
Allowoverride AuthConfig
#该行相当于打开用户认证的开关
AuthName "111.com user auth"
#自定义认证的名字
AuthType Basic
#认证类型,一般为basic
AuthUserFile /data/.htpasswd
#指定密码文件所在位置(需要手动添加)
require valid-user
#设定需要认证的用户为“AuthUserFile”中定义的所有可用用户
</Directory>
ErrorLog "logs/111.com-error_log"
CustomLog "logs/111.com-access_log" common
</VirtualHost>
2、创建认证的用户名(shenjie),密码(自己输入)
htpasswd 第一次创建输入 -c
第二次就只输入 -m
[root@centos7 ~]# /usr/local/apache2.4/bin/htpasswd -c -m /data/.htpasswd shenjie
New password:
Re-type new password:
Adding password for user shenjie
3、[root@centos7 ~]# /usr/local/apache2.4/bin/apachectl graceful
4、更改window下的hosts
192.168.3.74 www.111.com
5、访问
6、输入认证的用户密码报错
7、查看错误日志
提示说权限问题
[root@centos7 data]# chmod 755 .htpasswd
8、再次访问
htpasswd 用法如下:
-c:=create,创建一个加密文件
-n:不更新加密文件,只将更新后的用户名密码显示在屏幕上
-m:使用MD5算法对密码进行加密(默认)
-d:使用CRYPT算法对密码进行加密
-p:不对密码进行加密,即明文密码
-s:使用SHA算法对密码进行加密
-b:在命令行一并输入用户名和密码,而不是根据提示输入密码
-D:删除指定用户
对网站指定的页面做认证权限
1、新增这些内容
[root@centos7 111.com]# vi /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
<VirtualHost *:80>
DocumentRoot "/data/wwwroot/111.com"
ServerName 111.com
ServerAlias www.111.com www.example.com
<FilesMatch 123.html>
AuthName "111.com user auth"
AuthType Basic
AuthUserFile /data/.htpasswd
require valid-user
</FilesMatch>
ErrorLog "logs/111.com-error_log"
CustomLog "logs/111.com-access_log" common
</VirtualHost>
2、[root@centos7 111.com]# vi 123.html
<h1>this is 123.php</h1>
3、[root@centos7 111.com]# /usr/local/apache2.4/bin/apachectl restart
4、验证
访问:http://111.com/123.html需要认证;http://111.com则不需要
域名跳转
301:永久跳转
302:临时跳转
区别:永久跳转后的网站会被搜索引擎判断为是后面的域名的权重,加大了后面跳转的权重比例
而临时跳转会被判断是第一个输入域名的权重;如:访问http://123.com 跳转到http://abc.com时,搜索引擎会加大abc.com的权重,比如你在百度上搜索linux时,权重高的排名越靠前。
1、[root@centos7 111.com]# vi /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
<VirtualHost *:80>
DocumentRoot "/data/wwwroot/111.com"
ServerName 111.com
ServerAlias www.111.com www.example.com
<IfModule mod_rewrite.c> #需要rewrite模块
RewriteEngine on #开启rewrite功能
RewriteCond %{HTTP_HOST} !^111.com$ #定义rewrite条件:所有非111.com的域名
RewriteRule ^/(.*)$ http://111.com/$1 [R=301,L]
#规则:^/:表示若是访问http://111.com/123.html这个域名的话,就是指的http://111.com/
(.*):表示123.html ,对应后面的$1
^/(.*)/(.*)$:后面的对应的就是$2
301:永久跳转;
L是last,即最后一个rewrite规则,如果请求被此规则命中,将不会继续再向下匹配其他规则。
</IfModule>
ErrorLog "logs/111.com-error_log"
CustomLog "logs/111.com-access_log" common
</VirtualHost>
2、查看需要开启rewrite模块
[root@centos7 111.com]# cat /usr/local/apache2.4/conf/httpd.conf| grep rewrite
LoadModule rewrite_module modules/mod_rewrite.so
3、[root@centos7 111.com]# /usr/local/apache2.4/bin/apachectl graceful
4、验证
访问:www.example.com跳转到http://111.com
访问:www.example.com/123.html跳转到http://111.com/123.html
Apache访问日志
日志在的目录:/usr/local/apache2.4/logs/
系统自带的格式
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
#h表示host来源IP,l表示login用户,u表示user用户密码,t表示time时间,r表示request(行为),s表示status状态码,b表示byte大小
#user-agent:用户代理(浏览器版本)
#referer:跳转到当前位置的上一个网址(比如:在一个论坛发的贴,贴信息是www.123.com,记录的referer为论坛地址)
1、修改配置文件日志为combined
[root@centos7 apache2.4]# vi /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
2、[root@centos7 apache2.4]# /usr/local/apache2.4/bin/apachectl graceful
3、看下变化:
默认情况下log日志格式为:
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
其中%h 是记录访问者的IP,如果在web的前端有一层代理,那么这个%h其实就是代理机器的IP,这不是我们想要的。在这种情况下,
%{X-FORWARDED-FOR}i 字段会记录客户端真实的IP。所以log日志改为:
LogFormat "%h %{X-FORWARDED-FOR}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
apache虚拟主机开启php的短标签
1、在php.ini中设置
short_open_tag on
2、重启httpd
3、设置了之后才能解析:
<?
phpinfo()
?>
否则只能解析以下的:
<?php
phpinfo()
?>
本文转自 jiekegz 51CTO博客,原文链接:http://blog.51cto.com/jacksoner/1980227