标签 "apache" 下的文章

一、Xampps Tomcat模块使用中需要jdk支持的安装方法:

由于jdk的包真心大 180MB, 也无法压缩, 所以不可能集成在xampps环境包中, 需要后期自行连网下载.
(当然, 我是希望大家预先下载安装好.)

以下是使用过程中的截图, 基本上述说了整个流程.(注:以下截图来之Xampps官网)

01
假如你的系统中没有安装jdk组件, 控制面板会提示, 并且引向官网下载地址.下载地址见下!

02
请选择第一个java图标即可,

03

1: 选择同意协议.
2: 选择自己环境包的位数, 如32位, 64位, 是xampps的位数. 不是系统的.

04
安装即可, 基本上, 一路下一步...

05
安装过程中...

06
安装jdk后, 再回来点击图标, 功能就可以正常了.

07
模块也启动成功..

08
在核心功能中>版本信息中会有jdk版本的一些信息, 仅供参考...

二、Xampps Tomcat模块使用中完美整合mod_jk.so的安装方法:

对于Apache+Tomcat+jsp+php的整合,针对不同的Tomcat和apache的版本,稍微有些区别。

1、所需软件
JDK:jdk-8u66-windows-x64.exe
JRE:jre-8u66-windows-x64.exe

jdk的版本关系倒不是很大,不影响Apache和Tomcat的整合,配置环境变量时注意一些就行了.
下载地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html

mod_jk.so
apache版本对整合影响不是太大,需要注意的是整合Tomcat时加载模块(modules)时 mod_jk.so 文件的版本。 apche的版本必须与mod_jk-**.so的版本相同.主要就是不同版本使得配置麻烦,而且还没用

下载地址:
http://www.apachelounge.com/download/
http://tomcat.apache.org/download-connectors.cgi

2、mod_jk.so安装方法:
解压:mod_jk-1.2.41-win64.zip
将:mod_jk.so
复制到:
D:\xampps\apache\modules 目录

3. 环境配置

(1) 在D:\xampps\apache\conf 目录下新建文件:workers.properties, 编辑 workers.properties

workers.tomcat_home=D:\xampps\tomcat #让mod_jk模块知道Tomcat的位置
workers.java_home=D:\Java\jdk #让mod_jk模块知道jre的位置
ps=\
worker.list=ajp13 #模块版本
worker.ajp13.port=8009 #工作端口,若没占用则不用修改
worker.ajp13.host=localhost #本机,若上面的Apache主机不为localhost,作相应修改
worker.ajp13.type=ajp13 #类型
worker.ajp13.lbfactor=1 #代理数,不用修改

(2) 在D:\xampps\apache\conf目录,修改http.conf
在文件末尾加上:

LoadModule jk_module modules/mod_jk.so
JkWorkersFile "conf/workers.properties"
JkLogFile "D:/xampps/tomcat/logs/mod_jk.log"
JkLogLevel info
JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories
JkRequestLogFormat "%w %V %T"
JkMount /servlet/* ajp13
JkMount /*.jsp ajp13
JkMount /*.do ajp13
JkMount /*.jsp ajp13
JkMount /*.do ajp13
JkMount /*.jhtml ajp13
JkMount /*.jspx ajp13
JkMount /dbfile.svl ajp13

到此配置文件修改完毕,然后通过Xampps控制面板,重新启动apache和tomcat服务就可以了!

Apache附带的ab工具(本机使用的PHP环境是WAMP集成环境,ab工具位于D:\wamp\bin\apache\Apache2.2.21\bin)非常容易使用,ab可以直接在Web服务器本地发起测试请求,这至关重要,因为有些时候我们需要测试的仅仅是服务器的处理性能,并不想掺杂着网络传输时间的影响。ab进行一切测试的本质都是基于HTTP的,所以可以说ab对于Web服务器软件的黑盒性能测试,获得的一切数据和计算结果,都是可以通过HTTP来解释的。

测试本机是否正确安装ab工具,在cmd想将当前目录定位到bin,输入 .\ab –V 命令,如果安装正确,则会将其版本信息打印出来。

D:\wamp\bin\apache\Apache2.2.21\bin> .\ab -V
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech
Licensed to The Apache Software Foundation, <a href="http://www.apache.org/">http://www.apache.org/</a>

好了,一切就绪,下面提供一个压力测试的实例:

输入命令 PS D:\wamp\bin\apache\Apache2.2.21\bin> .\ab -n1000 -c10 http://localhost/index.php

This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking localhost (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
Completed 600 requests
Completed 700 requests
Completed 800 requests
Completed 900 requests
Completed 1000 requests
Finished 1000 requests

Server Software: Apache/2.2.21
Server Hostname: localhost
Server Port: 80

Document Path: /index.php
Document Length: 211 bytes

Concurrency Level: 10
Time taken for tests: 0.496 seconds
Complete requests: 1000
Failed requests: 0
Write errors: 0
Non-2xx responses: 1000
Total transferred: 400000 bytes
HTML transferred: 211000 bytes
Requests per second: 2015.93 [#/sec] (mean)
Time per request: 4.960 [ms] (mean)
Time per request: 0.496 [ms] (mean, across all concurrent requests)
Transfer rate: 787.47 [Kbytes/sec] received

Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.4 0 1
Processing: 2 5 1.1 4 12
Waiting: 2 4 1.1 4 12
Total: 2 5 1.1 5 12

Percentage of the requests served within a certain time (ms)
50% 5
66% 5
75% 5
80% 6
90% 6
95% 7
98% 8
99% 9
100% 12 (longest request)

下面开始解析这条命令语句:启动ab,并出入三个参数(PS D:\wamp\bin\apache\Apache2.2.21\bin> .\ab -n1000 -c10 http://localhost/index.php )

-n1000 表示请求总数为1000

-c10 表示并发用户数为10

http://localhost/index.php 表示这写请求的目标URL

测试结果也一目了然,测试出的吞吐率为:Requests per second: 2015.93 [#/sec] (mean) 初次之外还有其他一些信息。

Server Software 表示被测试的Web服务器软件名称

Server Hostname 表示请求的URL主机名

Server Port 表示被测试的Web服务器软件的监听端口

Document Path 表示请求的URL中的根绝对路径,通过该文件的后缀名,我们一般可以了解该请求的类型

Document Length 表示HTTP响应数据的正文长度

Concurrency Level 表示并发用户数,这是我们设置的参数之一

Time taken for tests 表示所有这些请求被处理完成所花费的总时间

Complete requests 表示总请求数量,这是我们设置的参数之一

Failed requests 表示失败的请求数量,这里的失败是指请求在连接服务器、发送数据等环节发生异常,以及无响应后超时的情况。如果接收到的HTTP响应数据的头信息中含有2XX以外的状态码,则会在测试结果中显示另一个名为 “Non-2xx responses”的统计项,用于统计这部分请求数,这些请求并不算在失败的请求中。

Total transferred 表示所有请求的响应数据长度总和,包括每个HTTP响应数据的头信息和正文数据的长度。注意这里不包括HTTP请求数据的长度,仅仅为web服务器流向用户PC的应用层数据总长度。

HTML transferred 表示所有请求的响应数据中正文数据的总和,也就是减去了Total transferred中HTTP响应数据中的头信息的长度。

Requests per second 吞吐率,计算公式:Complete requests / Time taken for tests

Time per request 用户平均请求等待时间,计算公式:Time token for tests/(Complete requests/Concurrency Level)

Time per requet(across all concurrent request) 服务器平均请求等待时间,计算公式:Time taken for tests/Complete requests,正好是吞吐率的倒数。也可以这么统计:Time per request/Concurrency Level

Transfer rate 表示这些请求在单位时间内从服务器获取的数据长度,计算公式:Total trnasferred/ Time taken for tests,这个统计很好的说明服务器的处理能力达到极限时,其出口宽带的需求量。

Percentage of requests served within a certain time(ms) 这部分数据用于描述每个请求处理时间的分布情况,比如以上测试,80%的请求处理时间都不超过6ms,这个处理时间是指前面的Time per request,即对于单个用户而言,平均每个请求的处理时间。

我们运行在apache的虚拟主机,有时候为了安全,需要为每个网站以不同的用户运行,这样当虚拟主机中的一个网站被入侵时,而不会影响到其它的虚拟主机。我们这里使用apache2-mpm-itk补丁来实现这种功能。

1、下载apache2和itk

到apache2-mpm-itk网站下载最新版的补丁:http://mpm-itk.sesse.net/

wget http://apache.ziply.com//httpd/httpd-2.2.21.tar.gz
tar xzvf httpd-2.2.21.tar.gz
wget http://mpm-itk.sesse.net/apache2.2-mpm-itk-2.2.17-01.patch

2、为apache2打上mpm-itk补丁

cd httpd-2.2.21
patch -p1 < ../apache2.2-mpm-itk-2.2.17-01.patch
autoconf

3、编译apache2

编译apache2时,带上编译选项--with-mpm=itk,如:

./configure --with-mpm=itk
make
make install

4、配置apache2

<VirtualHost *:80>
ServerName piaoyun.cc
...

<IfModule mpm_itk_module>
AssignUserId siteuser sitegroup
</IfModule>
</VirtualHost>

sitesuer是指apache以siteuser用户运行
sitegroup是指apache以sitegroup用户组运行

最近管理的服务器,结果,打开phpmyadmin的时候就出现了这样的错误,在网上看了很多解答,看起来都对,但是我还是费了很大的劲才搞好,所以写下来已帮助记忆。

首先:在php的目录下建立个文件夹temp,这个有权限的问题,如果是ntfs的分区,就一定要添加evryone的控制权限,否则是没用的。

其次:在php.ini找到:

;session.save_path

这一行,修改成:

session.save_path = "C:/php/tmp"

把分号弄掉。这里要注意,php.ini里面有三处session.save_path ,如果只修改一个地方,还是不行的。

将php.ini中的session.auto_start的值改为1(启动),默认是0(禁用),

最后,是在phpmyadmin中找到:

config.sample.inc.php

修改成:config.inc.php

找到 $cfg['blowfish_secret'] 将后面的赋值,加入数字和字母组合。

全部修改完以后,重启iis或者apache,就可以看到熟悉的phpmyadmin的登陆界面了。

最近不知道什么原因公司服务器上的Apache服务会莫名其妙的挂掉,Apache就这样,压力大了就罢工,考虑找别的软件代替Apache。。现在有个问题:要在Apache 挂掉时自动启动Apache,呵呵,又搬出强大的CMD,简单的写了一段命令,直接运行成功~~

@echo off
net start | find /c /i "apache2.2" > nul
if "%errorlevel%" == "1" goto startapache
goto exit

:startapache
net start apache2.2

:exit

把上面代码保存为 apache.bat ,运行一下,如果Apache正常的话不会有任何提示,如果挂掉的话会自动启动Apache,注意Apache的服务名(这里是 apache2.2),不分大小写,打开系统服务先确认一下,改成相应的名字。

至于怎么定时运行,更简单了,拉出系统的计划任务,设定1分钟运行一次,不登陆也运行,用最高权限的用户运行就行了。

最近浏览有关互联网的资讯多了,发现了一个不少人提到的问题,为什么网址结尾会加上反斜杠呢?又为什么我们在浏览器地址栏上打出一个网址(如我的主页piaoyun.cc),按回车后地址末尾会自动加上一个反斜杠(部分浏览器如chorme会自动隐藏网址末尾的反斜杠)。很诡异是吧!好了,进入正题,推广一下小知识。

在传统意义上说,网址末尾是没有反斜杠的。有没有反斜杠的意义在于该url是指向一个文件还是一个目录,例如:
http://piaoyun.cc/piaoyun 指向的是网站根目录下一个名为piaoyun的文件
http://piaoyun.cc/piaoyun/ 指向的是网站根目录下一个名为piaoyun的目录

于是在网址末尾加了反斜杠是能加快网站载入,因为网址末尾加了反斜杠会直接告知浏览器现在指向的是一个目录,浏览器就能直接读取该目录下如index或home等默认文件。而没有加上反斜杠时浏览器首先会尝试读取根目录下的一个文件,如果没有该文件再查找一个与该文件同名的目录,最后才读取目录下的默认文件。这样一来加上反斜杠就会加快网站加载速度。对于网站所在的服务器,网址没有加上反斜杠会给服务器增加一个查找是否有同名文件的过程,这明显会增加服务器的负担,当然这个影响并不会很大,但如果你的网站的直接流量很大,那么给url末尾加上反斜杠便能较大的减轻服务器的负担了。

当然给网址末尾加上反斜杠还有其他的好处:1.在seo方面考虑,习惯性的给自己网站的网址末尾加上反斜杠能避免重复内容。正如域名中是否带”www”的问题,url末尾是否有反斜杠也会造成重复内容的问题,这对于网站的seo无疑是不利的,要知道,重复内容绝对是seo的大忌。
2.因为服务器对url不能正确解析,有可能会出现404错误,习惯地给网址末尾加上反斜杠则可以避免这种情况。

总的来说给网址末尾加上反斜杠对对网站建设者是有很大好处的,这可以说是网站建设者应该养成的一个好习惯。当然,在交换友情链接时别忘了提醒一下对方,记得为你的网站url末尾加上反斜杠了。

为什么很多网站都是采用在网址的结尾后加上反斜杠,比如百度 sina都是这样的处理方法。为什么要给网址结尾加上反斜杠,这样做对于用户体验,以及速度优化有什么好处呢。

网站使用反斜杠和不使用反斜杠的区别不加斜杠指向的是网站根目录下一个名为的文件,加了斜杠指向的是网站根目录下一个名为的目录,也就是目录与文件的区别

 

首页网站使用反斜杠的好处使用斜杠能加快网站载入,原因是因为网址末尾加了反斜杠会直接告知浏览器现在指向的是一个目录,目录的话会直接读取index。或者home等默认文件。没有加上反斜杠时浏览器首先会尝试读取根目录下的一个文件,如果没有该文件再查找一个与该文件同名的目录,最后才读取目录下的默认文件。网址没有加上反斜杠会给服务器增加一个查找是否有同名文件的过程.

seo方面考虑
网站只存在带斜杠的模式,避免网站权重流失(和不带www和带www的概念相同)。同时有另外一种理解:有加了是一个文件夹 默认情况下应该是目录的权重大于网站页面权重

最后附上Apache开启自动将不同的url以301重定向至一个标准的url上的.htaccess代码(前提是你的服务器开启了mod_rewrite,至于IIS,就没有方便的方法去实现这个功能了):

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ http://piaoyun.cc/$1/ [L,R=301]

说明:
* RewriteCond %{REQUEST_FILENAME} !-f : 指定操作仅针对目录,对指向文件的url不进行rewrite操作;
* RewriteCond %{REQUEST_URI} !(.*)/$ :判断url是否以斜杠“/”结尾;
* RewriteRule ^(.*)$ http://piaoyun.cc/$1/ [L,R=301] : 自动将符合上述条件的url以301跳转重定向至以斜杠结尾的版本,比如说将“http://piaoyun.cc/piaoyun”重定向至 “http://piaoyun.cc/piaoyun/”,其中“L”指该行为规则的最后一行,而“R=301”则指明采用301 Redirect。当然,您在使用时应将“http://piaoyun.cc/”替换成自己网站的url。

当然我的网站并没有对于该使用目录的时候使用目录,当时是处于扁平状网站布局考虑而有所失误。而现在想要修改对于网站结构变动较大而不是很现实所以还是以后考虑进一步修改。

一,Rewrite重写时带“?”(问号)参数的传递

很多人都会遇到需要将网站以前的旧URL转换到新版本的新URL来,但是有一些带有参数的地址由于涉及到参数名的变更,需要通过伪静态的方式实现跳转。但Apache和Ngnix的方法是不支持带参数的URL地址重写的(即:RewriteRule不会去匹配“?”后面的字符串的,需要用RewriteCond来匹配)。

例如:把 /abc?id=123 重定向到 /def.php?id=123 的写法:
方式一:
RewriteEngine on
RewriteBase /
RewriteCond %{QUERY_STRING} ^id=(.+)$
RewriteRule ^/abc$ /def.php?sid=%1 [L]
#注释1:RewriteCond %{QUERY_STRING} ^id=(.+)$ ,得到url中的变量,并通过“%N”的方式获取(参数名可以重写,而且参数值可以匹配)
#注释2:RewriteCond 里面需要提取的值可以用 %N 进行反向引用值,而RewriteRule里面还是需要用$N的来反向引用值

方式二:
RewriteEngine on
RewriteBase /
RewriteRule ^/abc$ /def.php [L,QSA]
#注释1:[QSA]表示保留重写url时“?”后面的参数(但参数名不可以重写,只会原样的保留)

官方文档解释(查询字符串):
Pattern不会按照查询字符串进行匹配。为了达到这个目的,你必须使用一个带有% {QUERY_STRING}变量的RewriteCond指令。当然,你也可以在替换字符串中创建包含查询字符串的URL:在替换字符串串中使用问号,以标明其后的部分应该被重新注入到QUERY_STRING中。而要删除一个已有的请求串,则可以用问号来终结替换字符串。为了联合新旧查询字符串,请使用[QSA]标志。

二、apache rewrite 终结篇:apache %{QUERY_STRING}
1.$n取得第n个参数值
RewriteRule ^sss/(.*)/(.*)$ zdz/index.php?arg1=$1&arg2=$2

2.query_string(%{QUERY_STRING}后为匹配的正则)
URL参数(Query String)是URL里面“?”后面的部分,它通常用于传输参数给CGI脚本或者其它动态页面。在Apache中,该值存储在环境变量QUERY_STRING中(在PHP中,可以通过$_SERVER['QUERY_STRING']访问到)。
在Apache中,大多对URL进行操作的指令,如、Redirect、Alias和RewriteRule,都不能直 接访问该数据;不过,mod_rewrite模块却可以对URL参数进行添加、删除和修改。其中的关键就是使用RewriteCond来匹配% {QUERY_STRING}变量,如果需要的话,还可以使用[QSA]标志来附加URL参数。

eg.1
如果 http://piaoyun.cc/rewrite/jeecn.zdz?par=helloforbworld 中的 query_string 包含字符串forb ,则禁止访问
RewriteCond %{QUERY_STRING} forb
RewriteRule ^(.*)\.(.*)$ preg.php?%{QUERY_STRING} [F]

eg.2
通过[QSA]标志保留原有URL参数的同时,在后面增加新的URL参数:param=value
RewriteRule ^/page /page?param=value [QSA]

eg3.
当URL参数包含字符串parm时
将URL:http://jeecn.com/ask?param=value 重写为: http://jeecn.com/answer?param=value
RewriteCond %{QUERY_STRING} parm
RewriteRule ^/ask /answer

eg4.%n反向引用
1)当访问 /path 时,将字符串 parm修改为 showparm
RewriteCond %{QUERY_STRING} ^(.*)parm(.*)$
RewriteRule /path /path?%1showparm%2
上面的%1和%2是反向引用,来自之前的RewriteCond中正则表达式的匹配结果

2)将http://jeecn.com/path?key=value 转换为: http://piaoyun.cc/path/key/value
RewriteCond %{QUERY_STRING} ^(\w+)=(\w+)$
RewriteRule ^/path /path/%1/%2?

电影《社交网络》中,facebook创始人马克.扎克失恋后入侵哈佛大学宿舍楼服务器,窃取数据库资料,并在两个小时内完成了一个给校内女生评分的交互网站,该网站一天内点击数过10W,直接导致学校服务器崩溃。。。。。。
其实,构建那样一个网站并不需要很多高深的技术,任何一个有一定网络编程基础的人都可以做到。马克构建网站所用的是Apache服务器和PHP服务器脚本语言,我曾经用三天时间学习PHP,然后用了两个星期为学校写了一个网站,可见PHP是很简单的,而facebook后台也是用php写的,当然,大家现在看到的我的wordpress博客后台也是php~~。

话说回来,很多人可能已经用上ubuntu了,大家可能花了大量时间在ubuntu的美化上,这无可厚非,但是,ubuntu应该给我们的工作和学习带来更多的便利和方便。ubuntu作为linux,为我们提供了强大的网络方面的功能,其中的服务器技术尤其强大,安全。如果不学习linux的网络技术,很难说自己掌握了linux。

今天,我在ubuntu下配置了一个Apache服务器。通过Apache我们可以学习php网络编程,可以用它来部署自己本地的wordpress博客,从而进一步通过网络和朋友交流。从此,你将深刻体会到网络带个我们的神奇力量,至少我是这样觉得的~~

步骤一、安装apache2

sudo apt-get install apache2

安装完成。

运行如下命令重启下:

sudo /etc/init.d/apache2 restart

在浏览器里输入http://localhost或者是http://127.0.0.1,如果看到了It works!,那就说明Apache就成功的安装了,Apache的默认安装,会在/var下建立一个名为www的目录,这个就是Web目录了,所有要能过浏览器访问的Web文件都要放到这个目录里。

步骤二、安装php

sudo apt-get install libapache2-mod-php5 php5 php5-curl php5-dev php5-gd php5-gmp php5-imap php5-ldap php5-mcrypt

此外,建议安装扩展php5-gd php5-mysql,安装方式同上.

安装完后,我们要重新启动Apache,让它加载PHP模块:

sudo /etc/init.d/apache2 restart

接下来,我们就在Web目录下面新建一个test.php文件来测试PHP是否能正常的运行,命令:

sudo gedit /var/www/test.php

然后输入:

<?php
echo phpinfo();
?>

接着保存文件,在浏览器里输入http://127.0.0.1/test.php,如果在网页中显示hello,world!!,那就说明PHP已经正常运行了。

步骤三、安装mysql数据库:

sudo apt-get install mysql-server mysql-client

apt-get程序会自动下载安装最新的mysql版本。在安装的最后,它会要求里输入root的密码,注意,这里的root密码可不是Ubuntu的root密码啊,是你要给MySQL设定的root密码。

步骤四、安装phpmyadmin-Mysql数据库管理

sudo apt-get install phpmyadmin

phpmyadmin设置:

在安装过程中会要求选择Web server:apache2或lighttpd,使用空格键选定apache2,按tab键然后确定。然后会要求输入设置的Mysql数据库密码连接密码Password of the database’s administrative user。

然后将phpmyadmin与apache2建立连接,以我的为例:www目录在/var/www,phpmyadmin在/usr/share /phpmyadmin目录,所以就用命令:

sudo ln -s /usr/share/phpmyadmin /var/www

建立链接。

phpmyadmin测试:在浏览器地址栏中打开http://localhost/phpmyadmin。

以上ALMP的基本组件就安装完毕了,下面我们再来看一些其他的设置:

步骤五、设置Ubuntu文件执行读写权限

LAMP组建安装好之后,PHP网络服务器根目录默认设置是在:/var/www。由于Linux系统的安全性原则,改目录下的文件读写权限是只允许root用户操作的,所以我们不能在www文件夹中新建php文件,也不能修改和删除,必须要先修改/var/www目录的读写权限。在界面管理器中通过右键属性不能修改文件权限,得执行root终端命令:

sudo chmod 777 /var/www

然后就可以写入html或php文件了。777是linux中的最高权限,表示可读,可写,可执行。

sudo apt-get install apache2 libapache2-mod-php5 php5 php5-curl php5-dev php5-gd php5-gmp php5-imap php5-ldap php5-mcrypt mysql-server mysql-client phpmyadmin

apache日志为什么不记录百度蜘蛛?这个问题相信很多初学者都基本碰到了,apache日志默认是不记录百度蜘蛛、谷歌和各大搜索引擎的蜘蛛程序的,但只需要修改一个地方就可以解决这个问题,现在就直接将答案写出来:

比如曾经有个朋友在百度知道中提问:

<IfModule log_config_module>
LogFormat “%h %l %u %t \”%r\” %>s %b \”%{Referer}i\” \”%{User-Agent}i\”" combined
LogFormat “%h %l %u %t \”%r\” %>s %b” common
<IfModule logio_module>
LogFormat “%h %l %u %t \”%r\” %>s %b \”%{Referer}i\” \”%{User-Agent}i\” %I %O” combinedio
</IfModule>
CustomLog “logs/access.log” common
</IfModule>

这是我目前的设置,不记住主机名
哪位给我提供个范本 记录访问明细和主机头记录蜘蛛的

1、打开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、接着我们继续向下移动,找到虚拟主机配置段,也就是VirtualHost段,这个是由你自己来配置的。本站的虚拟主机的日志文件是这样设置的:
如果你想记录百度蜘蛛的访问全称,就按色部分设置:

CustomLog /var/html/logs/piaoyun.cc-access.log combined

如果不想记录百度蜘蛛的头部分,则如下设置:

CustomLog /var/html/logs/piaoyun.cc-access.log common

按照以上设置一下,看看你的日志文件是否发生变化了。

apache错误日志显示:File does not exist,本文提供一个解决方法,供参考。

查看apache日志:

Wed Feb 18 14:01:18 2014] [error] [client 58.22.112.116] File does not exist: /www/piaoyun.cc/web.rar
[Wed Feb 18 14:01:18 2014] [error] [client 58.22.112.116] File does not exist: /www/piaoyun.cc/web.zip
[Wed Feb 18 14:01:18 2014] [error] [client 58.22.112.116] File does not exist: /www/piaoyun.cc/www.rar
[Wed Feb 18 14:01:18 2014] [error] [client 58.22.112.116] File does not exist: /www/piaoyun.cc/www.zip
[Wed Feb 18 14:01:19 2014] [error] [client 58.22.112.116] File does not exist: /www/piaoyun.cc/wwwroot.rar
[Wed Feb 18 14:01:19 2014] [error] [client 58.22.112.116] File does not exist: /www/piaoyun.cc/wwwroot.zip

解决办法:
修改httpd.conf文件,将 LogLevel warn 改为 LogLevel crit即可。
即修改下apache的报错级别。

因为开启 Gzip 压缩会消耗额外的 CPU 资源,这个可以视自己的VPS或者服务器的资源情况来看,是否需要开启,开启的步骤很简单,只需修改 Apache 的配置文件并重启一下 Apache 即可。

在开启 Gzip 之前,需先确认 Apache 的配置文件中有没有加载 mod_deflate 和 mod_headers 模块。
LAMP一键安装脚本的 Apache 配置文件路径是:/usr/local/apache/conf/httpd.conf

打开此文件查找如下两行代码:

LoadModule deflate_module modules/mod_deflate.so
LoadModule headers_module modules/mod_headers.so

前面没有#符号即为正常的,若是有#符号则表示被注释掉了,删除前面的#符号即可。

在 Apache 配置文件 /usr/local/apache/conf/httpd.conf 的最后添加:

<IfModule deflate_module>
SetOutputFilter DEFLATE
SetEnvIfNoCase Request_URI .(?:gif|jpe?g|png)$ no-gzip dont-vary
SetEnvIfNoCase Request_URI .(?:exe|t?gz|zip|bz2|sit|rar)$ no-gzip dont-vary
SetEnvIfNoCase Request_URI .(?:pdf|doc|avi|mov|mp3|rm)$ no-gzip dont-vary
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css
AddOutputFilterByType DEFLATE application/x-javascript
</IfModule>

注解:
IfModule deflate_module 是判断如果 deflate_module 模块加载的话,执行里面的配置。
SetOutputFilter DEFLATE 是设置输出为 deflate 压缩算法。
SetEnvIfNoCase Request_URI 是排除一些常见的图片,影音,文档等类型的后缀,不压缩。
AddOutputFilterByType DEFLATE 是对常见的文本类型,如html,txt,xml,css,js做压缩处理。

保存以上修改好的配置文件,重启 Apache 即可。

service httpd restart

或者

/etc/init.d/httpd restart

apache

在浏览一些镜像文件站的时候,会发现网站目录是可以浏览文件(夹)列表的。举两个例子:网易开源镜像Ubuntu。只要 Web 服务器是基于 Apache 的网站都可以开启或禁止索引(目录浏览),那么如何实现禁止和开启显示目录索引呢?

一、禁止 Apache 显示目录索引

方法1、修改Apache配置文件[httpd.conf]
(1)目录配置

<Directory /home/www/teddysun">
#Options Indexes FollowSymLinks
Options FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>

Options Indexes FollowSymLinks 改成Options FollowSymLinks 即可以禁止 Apache 显示该目录结构。
解释:Indexes 的作用就是当该目录下没有指定 index.html 文件时,就显示目录结构,去掉 Indexes ,Apache 就不会显示该目录的列表了。

(2)虚拟机配置

<virtualhost *:80>
ServerName piaoyun.cc
ServerAlias www.piaoyun.cc
DocumentRoot /home/www/www.piaoyun.cc
CustomLog /home/www/www.piaoyun.cc/logs/access.log combined
DirectoryIndex index.php index.html
<Directory /home/www/www.piaoyun.cc>
Options +Includes -Indexes
AllowOverride All
Order Deny,Allow
Allow from All
</Directory>
</virtualhost>

此处,在Indexes前面加上 – 符号也是可以禁止 Apache 显示该目录结构。
解释:在Indexes前,加 + 代表允许目录浏览;加 – 代表禁止目录浏览。

方法2、修改.htaccess文件
在网站根目录修改 .htaccess 文件,增加如下代码(若无.htaccess 文件则新建):

<Files *>
Options -Indexes
</Files>

解释:在Indexes前,加 + 代表允许目录浏览;加 – 代表禁止目录浏览。

二、开启并定制 Apache 显示目录索引样式

(1)修改Apache配置文件[httpd.conf]

<Directory /home/www/piaoyun.cc">
Options Indexes FollowSymLinks
IndexStyleSheet "/css/style.css"
IndexOptions FancyIndexing HTMLTable ScanHTMLTitles FoldersFirst NameWidth=85 DescriptionWidth=128 IconWidth=16 IconHeight=16 VersionSort Charset=UTF-8
AllowOverride all
Order allow,deny
Allow from all
</Directory>

解释:在 Options 选项中写入 Indexes,即是打开了目录浏览功能。CentOS6中通过yum安装的 Apache 默认是打开了目录浏览的,但是使用浏览器访问首页,却不能显示出目录,原因在于/etc/httpd/conf.d/welcome.conf文件中的 Indexes 前面有个 – 符号,即 Apache 默认禁止了首页的目录浏览功能。

(2)自定义索引(目录浏览)样式
上一步的 IndexOptions 选项可以自定义索引(目录浏览)样式,如下:
FancyIndexing 开启目录浏览修饰
HTMLTable 此选择与FancyIndexing一起构建一个简单的表来进行目录浏览修饰。
ScanHTMLTitles 搜索HTML标题
FoldersFirst 目录优先排在前面
NameWidth=85 表示文件名可以最多显示85个英文字符
DescriptionWidth=128 表示描述可以显示的字符数
IconWidth=16 Icon的宽度(像素)
IconHeight=16 Icon的高度(像素)
VersionSort 版本排序,如果没有此项,将按照拼音顺序排序
Charset=UTF-8 字符集

其他诸如:
AddAltClass、IconsAreLinks、IgnoreCase、IgnoreClient、ShowForbidden、SuppressColumnSorting、SuppressDescription、SuppressHTMLPreamble、SuppressIcon、SuppressLastModified、SuppressRules、SuppressSize、TrackModified、Type等请阅读参考链接。

参考链接:http://httpd.apache.org/docs/2.4/en/mod/mod_autoindex.html#indexoptions

至于为什么设置上传目录无权限这个我就不累赘了,现在比较流行的web服务有iis,apache,nginx,使用操作系统无非是windows和linux

我们来看俩段通常对上传目录设置无权限的列子,配置如下:
代码如下:

<Directory "/var/www/upload">
<FilesMatch ".php">
Order Allow,Deny
Deny from all
</FilesMatch>
</Directory>

这些配置表面上看起来是没什么问题的,确实在windows下可以这么说。
但是linux就不同了,大家都是知道的linux操作系统是区分大小写的,这里如果换成大写后缀名*.phP一类就pass了

这里我说下我个人的解决方法,代码如下:

<Directory "要去掉PHP执行权限的目录路径,例如:D:/piaoyun.cc/upload">
ErrorDocument 404 /404/404.html
ErrorDocument 403 /404/403.html
<FilesMatch "\.(?i:php|php3|php4)$"> // ?是尽可能多的匹配.php的字符串,i是不区分大小写,然后冒号后面跟上正则表达式,也可以写成:<FilesMatch "\.(php|php3)$">
Order allow,deny
Deny from all
</FilesMatch>
</Directory>

上面的意思就是说,<Directory "要去掉PHP执行权限的目录路径,例如:D:/piaoyun.cc/upload"> 内目录路径下所有php文件不区分大小写,通过order,allow,deny原则判断拒绝执行php文件,对nginx同样也是可应用的

另外一种方法,是设置在htaccess里面的,这个方法比较灵活一点,针对那些没有apapche安全操作权限的网站管理员:
Apache环境规则内容如下:Apache执行php脚本限制 把这些规则添加到.htaccess文件中
代码如下:

RewriteEngine on RewriteCond % !^$
RewriteRule uploads/(.*).(php)$ – [F]
RewriteRule data/(.*).(php)$ – [F]
RewriteRule templets/(.*).(php)$ –[F]

另外一种方法,代码如下:

<Directory "/var/www/upload">
php_admin_flag engine off
</Directory>

此方法我在win系统下面测试失败了,重新启动apapche出现下面的错误信息:
The Apache service named reported the following error:
>>> Invalid command 'php_flag', perhaps misspelled or defined by a module not included in the server configuration.

这里我就不具体说明这个解决办法了,因为禁止php执行的方法,大家看自己的需求去设置就可以了!

【apache配置禁止访问】
1. 禁止访问某些文件/目录
增加Files选项来控制,比如要不允许访问 .inc 扩展名的文件,保护php类库:

<Files ~ "\.inc$">
Order allow,deny
Deny from all
</Files>

禁止访问某些指定的目录:(可以用 <DirectoryMatch> 来进行正则匹配)

<Directory ~ "^/var/www/(.+/)*[0-9]{3}">
Order allow,deny
Deny from all
</Directory>

通过文件匹配来进行禁止,比如禁止所有针对图片的访问:

<FilesMatch \.(?i:gif|jpe?g|png)$>
Order allow,deny
Deny from all
</FilesMatch>

针对URL相对路径的禁止访问:

<Location /dir/>
Order allow,deny
Deny from all
</Location>

针对代理方式禁止对某些目标的访问(<ProxyMatch> 可以用来正则匹配),比如拒绝通过代理访问cnn.com:

<Proxy http://piaoyun.cc/*>
Order allow,deny
Deny from all
</Proxy>

2. 禁止某些IP访问/只允许某些IP访问
如果要控制禁止某些非法IP访问,在Directory选项控制:

<Directory "/var/www/web/">
Order allow,deny
Allow from all
Deny from 10.0.0.1 #阻止一个IP
Deny from 192.168.0.0/24 #阻止一个IP段
</Directory>

只允许某些IP访问,适合比如就允许内部或者合作公司访问:

<Directory "/var/www/web/">
Order deny,allow
Deny from all
All from example.com #允许某个域名
All from 10.0.0.1 #允许一个iP
All from 10.0.0.1 10.0.0.2 #允许多个iP
Allow from 10.1.0.0/255.255.0.0 #允许一个IP段,掩码对
All from 10.0.1 192.168 #允许一个IP段,后面不填写
All from 192.168.0.0/24 #允许一个IP段,网络号
</Directory>

Apache:解决办法;

<Directory "/home/domain/public_html">
Options -Indexes FollowSymLinks
AllowOverride All
<Files ~ ".txt">
Order allow,deny
Deny from all
</Files>
</Directory>

一般情况下,软件的漏洞信息和特定版本是相关的,因此,软件的版本号对攻击者来说是很有价值的。
在默认情况下,系统会把Apache版本模块都显示出来(http返回头信息)。如果列举目录的话,会显示域名信息(文件列表正文),如:

[root@localhost tmp]# curl -I 192.168.80.128:88
HTTP/1.1 403 Forbidden
Date: Wed, 21 Jul 2010 13:09:33 GMT
Server: Apache/2.2.15 (CentOS)
Accept-Ranges: bytes
Content-Length: 5043
Connection: close
Content-Type: text/html; charset=UTF-8

隐藏方法:

1、隐藏Apache版本号的方法是修改Apache的配置文件,如RedHat系的Linux默认是:

vim /etc/httpd/conf/httpd.conf

分别搜索关键字ServerTokens和ServerSignature,修改:

ServerTokens OS 修改为 ServerTokens ProductOnly
ServerSignature On 修改为 ServerSignature Off

修改好的如下:

ServerTokens ProductOnly
ServerSignature Off

2、重启或重新加载Apache就可以了。

测试一下,如下:

[root@localhost tmp]# curl -I 192.168.80.128:88
HTTP/1.1 403 Forbidden
Date: Wed, 21 Jul 2010 13:23:22 GMT
Server: Apache
Accept-Ranges: bytes
Content-Length: 5043
Connection: close
Content-Type: text/html; charset=UTF-8

版本号与操作系统信息已经隐藏了。
下面的方法只适合于用源码编译安装的Apache版本,里面版本的信息可以自定义修改。
目的: 对Apache源码文件进行简单修改,以诱骗普通攻击者,或者自娱自乐!
方法:修改Apache的几个源代码文件,然后自己编译安装。

一、文件操作
1、修改文件:srcdir/include/ap_release.h

#define AP_SERVER_BASEVENDOR “这里填写开发组织名,例如:Microsoft Corp.”
#define AP_SERVER_BASEPRODUCT “这里填写服务器软件名,例如:Microsoft-IIS”
#define AP_SERVER_MAJORVERSION “主版本,例如:6″
#define AP_SERVER_MINORVERSION “次版本,例如:0″
#define AP_SERVER_PATCHLEVEL “修正版本,例如:0″

2、修改文件:srcdir/include/os.h

#define PLATFORM “这里填写操作系统的名称,例如:Win32″

3、修改文件:srcdir/os/PLATFORM/os.h

#define PLATFORM “这里填写操作系统的名称,例如:Win32″

4、修改文件:srcdir/modules/generators/mod_info.c

Search “Apache Server Information” replace with “这里填写在查看server-info现实的页面标题,例如:Microsoft-IIS Information”

5、修改文件:srcdir/modules/generators/mod_status.c

Search “Apache Server Status” replace with “这里填写在查看server-status现实的页面标题,例如:Microsoft-IIS Status”

说明:
1、path/to/filename 表示要对这个文件进行操作
2、Search “A” replace with “B” 表示在文件之中搜索A,然后使用B替换

二、编译操作
按照一般正常步骤编译安装
结果:
/server-info:

Microsoft-IIS Information

Server Version: Microsoft-IIS/6.0/7.0 (Win32)

/server-status:

Apache Server Status for 127.0.0.1
Server Version: Microsoft-IIS/6.0/7.0 (Win32)
Server Built: July 26 2010 15:20:36

页面底部显示:(例如在以上两个测试和indexes情况之下)

Microsoft-IIS/6.0/7.0 (Win32) Server at 127.0.0.1 Port 80

PHP隐藏版本号的修改方法如下:

php屏蔽浏览器头信 X-Powered-By
将php.ini中

expose_php = On

改为:

expose_php = Off

如果没有找到上面的代码,就新添加一个!

众所周知,在windows下当Apache第一次被安装为服务后,它会以用户“System”(本地系统账号)运行。如果web服务器的所有资源都在本地系统上,这样做会问题比较少,但是将会具有很大的安全权限来影响本地机器,因此千万不能开启System帐号的网络权限。

于是要创建一个新的帐户来替代这个帐号启动apache并设置相应的权限:
1、在计算机管理里的本地用户和组里面创建一个帐户,例如:apache,密码设置为:apacheuser,加入guests组(如果出现问题,可以赋予user权限);
2、打开开始->管理工具->本地安全策略,在用户权限分配中选择“作为服务登陆”,添加apache用户;
3、计算机管理里面选择服务,找到apache2.2,先停止服务,右击->属性,选择登陆,把单选框从本地系统帐户切换到此帐户,然后查找选择apache,输入密码apacheuser,然后点确定(这个时候apache还不能正常启动,一般情况肯定会报错:Apache2.2 服务因 1 (0x1) 服务性错误而停止。);
4、赋予apache安装目录(比如:D:/apache2.2)以及web目录(比如D:/wwwroot)apache帐号的可读写权限,去除各磁盘根目录除administror与system以外的所有权限,赋予apache安装目录所在的磁盘根目录apache帐户的可读取列目录权限(我开始觉得没必要,但后来发现:这是导致上面出错的关键。错误信息:Apache2.2 服务因 1 (0x1) 服务性错误而停止)
5、启动apache,一切OK了。
6、php.ini中指定的PHP临时上传目录和session保存目录,并给予目录apache完 全控制权限,例如:

upload_tmp_dir = "E:/PHP/uploadtmp/"
session.save_path = "E:/PHP/sessiontmp/"

7、给予D:/php目录读取与运行的权限;
8、给予zend安装目录读取与运行的权限;
9.限制读取访问的目录,修改apache安装目录下conf文件夹下的 httpd.conf,加上:

php_admin_value open_basedir "D:/wwwroot"
php_admin_value safe_mode On

httpd.conf配置(假如将PHP读写权限限制在E:\smis目录下)
Apache2.0配置示例代码如下:

<VirtualHost *:80>
ServerName www.piaoyun.cc
DocumentRoot "E:/piaoyun"
Options FollowSymLinks IncludesNOEXEC Indexes
DirectoryIndex index.html index.htm default.htm index.php default.php
AllowOverride None
Order Deny,Allow
Allow from all
php_admin_value open_basedir "E:/piaoyun/;E:/APMServ5.2.0/PHP/uploadtemp/;E:/APMServ5.2.0/PHP/sessiondata/"
php_admin_value safe_mode On
</VirtualHost>

Apache2.2配置示例代码如下:

<VirtualHost *:80>
ServerName www.piaoyun.cc
DocumentRoot "E:/piaoyun"
</VirtualHost>
<Directory "E:/smis">
Options FollowSymLinks IncludesNOEXEC Indexes
DirectoryIndex index.html index.htm default.htm index.php default.php
AllowOverride None
Order Deny,Allow
Allow from all
php_admin_value open_basedir "E:/piaoyun/;E:/APMServ5.2.0/PHP/uploadtemp/;E:/APMServ5.2.0/PHP/sessiondata/"
php_admin_value safe_mode On
</Directory>

PS:需要赋予apache所在目录的独立帐号权限,还有apache所在的磁盘独立帐号权限!

PHP目录结构以及NTFS格式下安全的目录权限设置:
当前目录结构为:

D:\php
|
+———————+————————+—————————+—————————+
php4(php5)           temp                     MySQL                           Zend                     phpMyAdmin

以下的是针对IIS设置的:
D:\php设置为管理员和SYSTEM完全权限即可,其他用户均无权限(users 组读取和运行权限。 )
对于其下的二级目录
php4(或者php5)、 tmp 给EVERYONE完全权限,SYSTEM权限未确定
MySQL 、Zend 管理员和SYSTEM完全权限
phpMyAdmin 在继承上级 PHP 目录权限的基础上,增加一个 Internet 来宾帐户读取和运行的权限。

以下的是针对Apache设置的:
目前暂时给予D:\php目录管理员和apapche独立帐号所有权限,对于其的目录读写权限,后期在进行单独的测试设置!

最近遇到LNMPA一键安装包的Apache无法启动的问题,Apache提示以下信息:
(98)Address already in use: make_sock: could not bind to address 127.0.0.1:88
no listening sockets available, shutting down
Unable to open logs

英文的主要意思是apache需要的端口被占用(可能是异常启动),导致apache无法使用需要的的端口(这里演示为88,自行安装的apache为80)。

一、检查端口被哪个进程占用
netstat -lnp|grep 88 #88请换为你的apache需要的端口,如:80

SSH执行以上命令,可以查看到88端口正在被哪个进程使用。如下图,进程号为 。

二、查看进程的详细信息
ps 1777

SSH执行以上命令。查看相应进程号的程序详细路径。

三、杀掉进程,重新启动apache
kill -9 1777 #杀掉编号为1777的进程(请根据实际情况输入)
service httpd start #启动apache

SSH执行以上命令,如果没有问题,apache将可以正常启动。

Options
指令控制了在特定目录中将使用哪些服务器特性。
可选项能设置为:
None:在这种情况下,将不启用任何额外特性。或设置为以下选项中的一个或多个:
All:除MultiViews之外的所有特性。这是默认设置。
ExecCGI:允许执行CGI脚本.
FollowSymLinks :服务器会在此目录中使用符号连接。

注意:即便服务器会使用符号连接,但它不会改变用于匹配<Directory>配置段的路径名。
注意:如果此配置位于<Location>配置段中,则此设置会被忽略。

Includes 允许服务器端包含。
IncludesNOEXEC 允许服务器端包含,但禁用#exec命令和#exec CGI。但仍可以从ScriptAliase目录使用#include 虚拟CGI脚本。
Indexes 如果一个映射到目录的URL被请求,而此目录中又没有DirectoryIndex(例如:index.html),那么服务器会返回一个格式化后的目录列表。
MultiViews 允许内容协商的多重视图。
SymLinksIfOwnerMatch 服务器仅在符号连接与其目的目录或文件拥有者具有同样的用户id时才使用它。

注意:如果此配置出现在<Location>配置段中,此选项将被忽略。

一般来说,如果一个目录被多次设置了

Options,则最特殊的一个会被完全接受,而各个可选项的设定彼此并不融合。然而,如果所有施用于Options指令的可选项前都加有+或-符号,此 可选项将被合并。所有前面加有+号的可选项将强制覆盖当前可选项设置,而所有前面有-号的可选项将强制从当前可选项设置中去除。

比如说,没有任何+和-符号:

<Directory /web/docs>
Options Indexes FollowSymLinks
</Directory>
<Directory /web/docs/spec>
Options Includes
</Directory>

则只有Includes设置到/web/docs/spec目录上。然而如果第二个Options指令使用了+和-符号:

<Directory /web/docs>
Options Indexes FollowSymLinks
</Directory>
<Directory /web/docs/spec>
Options +Includes -Indexes
</Directory>

那么就会有FollowSymLinks和Includes设置到/web/docs/spec目录上。

一、什么是.htaccess文件

.htaccess文件是Apache服务器上的一个设置文件。它是一个文本文件,可以使用任何文本编辑器进行编写。.htaccess文件提供了针对目录改变配置的方法,即通过在一个特定的文档目录中放置一个包含一个或多个指令的文件(.htaccess文件),以作用于此目录及其所有子目录。.htaccess的功能包括设置网页密码、设置发生错误时出现的文件、改变首页的文件名(如index.html)、禁止读取文件名、重新导向文件、加上MIME类别、禁止列目录下的文件等。

在需要针对目录改变服务器的配置,而对服务器系统没有root权限时,应该使用.htaccess文件。如果服务器管理员不愿意频繁修改配置,则可以允许用户通过.htaccess文件自己修改配置,尤其是ISP在一台机器上提供多个用户站点,而又希望用户可以自己改变配置的情况下,一般会开放部分.htaccess的功能给使用者自行设置。
注意:.htaccess是一个完整的文件名,不是***.htaccess或其它格式(当然也有管理员把其设置成其它名字,但一般都是使用.htaccess)。另外,上传.htaccess文件时,必须使用ASCII模式,并使用chmod命令改变权限为:644(RW_R__R__)。每一个放置.htaccess的目录和其子目录都会被.htaccess影响。例如,在/abc/目录下放置了一个.htaccess文件,那么/abc/和 /abc/def/内所有的文件都会被它影响,但/index.html不会被它影响,这一点是很重要的。

二、使用.htaccess配置文件

在配置Apache时,除了可以在主配置文件(http.conf)中配置访问控制之外,还可以使用.htaccess 文件配置对指定目录的访问控制。使用.htaccess文件可以改变主配置文件中的配置,但是它只能设置对指定目录的访问控制,这个目录就是.htaccess文件存放的目录。在一个目录下设置了.htaccess文件之后,当用户使用浏览器访问此目录时,Apache会读取该文件的配置来覆盖主配置文件(http.conf)的配置。
注意:
1.修改.htaccess文件无需重新启动Apache服务器,而是立即生效。
2.在可能的情况下应该尽量避免使用.htaccess文件,因为使用.htaccess文件会降低服务器的运行性能。

何时使用.htaccess文件:
有如下两种情况需要使用.htaccess文件:
*在多个用户之间分割配置
*想在不重新启动服务器的情况下改变服务器配置
使用.htaccess文件必须经过两个配置步骤:
*首先在主配置文件中的启用并控制对.htaccess文件的使用
*然后在需要覆盖主配置文件的目录下生成.htaccess文件
在主配置文件中的启用并控制对.htaccess文件的使用
1.设置文件名称
必须保证在主配置文件中包含如下的配置语句:

AccessFileName .htaccess
<Files ~ “^.htaccess”>
Order allow,deny
Deny from all
</Files>

2.控制在.htaccess文件中可以使用的指令组
要控制在.htaccess文件中可以使用的指令组,需要在主配置文件中使用AllowOverride指令。下面列出了可以在AllowOverride指令所使用的指令组。
指令组 可用指令 说明
============================
AuthConfig
AuthDBMGroupFile, AuthDBMUserFile, AuthGroupFile, AuthName, AuthType, AuthUserFile, Require
进行认证、授权以及安全的相关指令
=============================
FileInfo
DefaultType, ErrorDocument, ForceType, LanguagePriority, SetHandler, SetInputFilter, SetOutputFilter
控制文件处理方式的相关指令
=============================
Indexes
AddDescription, AddIcon, AddIconByEncoding, AddIconByType, DefaultIcon, DirectoryIndex, FancyIndexing, HeaderName, IndexIgnore, IndexOptions, ReadmeName
控制目录列表方式的相关指令
==============================
Limit
Allow,Deny,Order
进行目录访问控制的相关指令
==============================
Options
Options, XBitHack
启用不能在主配置文件中使用的各种选项
=============================
All
全部指令组
可以使用以上所有指令
=============================
None
禁止使用所有指令
禁止处理.htaccess文件
==============================
3、生成.htaccess文件
当在主配置文件中配置了对.htaccess文件的启用和控制之后,接下来就可以在需要覆盖主配置文件的目录下生成.htaccess文件。.htaccess文件中可以使用的配置指令取决于主配置文件中AllowOverride指令的设置。

4、使用.htaccess文件举例
下面举一个简单的例子说明.htaccess文件的使用。
首先在文档根目录下生成一个private目录,并创建测试文件

# cd /var/www/html
# mkdir private
# cd private
# touch test

修改配置前,在客户浏览器查看结果。
修改主配置文件

# vi /etc/httpd/conf/httpd.conf

添加如下配置语句

<Directory “/var/www/html/private”>
AllowOverride Options
</Directory>

重新启动httpd

# service httpd restart

在/var/www/html/private目录下生成.htaccess文件

# vi /var/www/html/private/.htaccess

添加如下配置语句

Options –Indexes

在客户浏览器中查看结果。

即对private目录的访问不生成文件列表

三、.htaccess文件的配置说明

Apache可以使用分布在整个网页结构中的特殊文件来进行配置,这些特殊文件通常叫.htaccess,也可以用AccessFileName指令来改变。.htaccess 文件中的指令的作用域是存放它的那个目录及其所有子目录。.htaccess 文件的语法与主配置文件相同。由于对每次请求都会读取.htaccess 文件,所以对这些文件的改变会立即生效。
可以查阅Context了解可以放在.htaccess文件中的指令;服务器管理员可以通过AllowOverride指令,来决定.htaccess 文件中可以生效的指令。
.htaccess 文件(或者”分布式配置文件”)提供了针对目录改变配置的方法,即在一个特定的文档目录中放置一个包含一个或多个指令的文件,以作用于此目录及其所有子目录。作为用户,所能使用的命令受到限制。管理员可以通过Apache的AllowOverride指令来设置。
子目录中的指令会覆盖更高级目录或者主服务器配置文件中的指令。
- .htaccess必须以ASCII模式上传,最好将其权限设置为644。

1、错误文档的定位
常用的客户端请求错误返回代码:
401 Authorization Required
403 Forbidden
404 Not Found
405 Method Not Allowed
408 Request Timed Out
411 Content Length Required
412 Precondition Failed
413 Request Entity Too Long
414 Request URI Too Long
415 Unsupported Media Type
常见的服务器错误返回代码:
500 Internal Server Error
用户可以利用.htaccess指定自己事先制作好的错误提醒页面。一般情况下,人们可以专门设立一个目录,例如errors放置这些页面。然后再.htaccess中,加入如下的指令:
ErrorDocument 404 /errors/notfound.html
ErrorDocument 500 /errors/internalerror.html
一条指令一行。上述第一条指令的意思是对于404,也就是没有找到所需要的文档的时候得显示页面为/errors目录下的notfound.html页面。不难看出语法格式为:
ErrorDocument 错误代码 /目录名/文件名.扩展名
如果所需要提示的信息很少的话,不必专门制作页面,直接在指令中使用HTML号了,例如下面这个例子:
ErrorDocument 401 “你没有权限访问该页面,请放弃!”

2、文档访问的密码保护
要利用.htaccess对某个目录下的文档设定访问用户和对应的密码,首先要做的是生成一个.htpasswd的文本文档,例如:
martin:123456
这里密码经过加密,用户可以自己找些工具将密码加密成.htaccess支持的编码。该文档最好不要放在www目录下,建议放在www根目录文档之外,这样更为安全些。
有了授权用户文档,可以在.htaccess中加入如下指令了:
AuthUserFile .htpasswd的服务器目录
AuthGroupFile /dev/null (需要授权访问的目录)
AuthName EnterPassword
AuthType Basic (授权类型)
require user wsabstract (允许访问的用户,如果希望表中所有用户都允许,可以使用 require valid-user)

3、拒绝来自某个IP的访问
如果我不想某个政府部门访问到我的站点的内容,那可以通过.htaccess中加入该部门的IP而将它们拒绝在外。

例如:
order allow,deny
deny from 210.10.56.32
deny from 219.5.45.
allow from all

第二行拒绝某个IP,第三行拒绝某个IP段,也就是219.5.45.0~219.2.45.255。想要拒绝所有人?用deny from all好了。不止用IP,也可以用域名来设定。

4、保护.htaccess文档
在使用.htaccess来设置目录的密码保护时,它包含了密码文件的路径。从安全考虑,有必要把.htaccess也保护起来,不让别人看到其中的内容。虽然可以用其他方式做到这点,比如文档的权限。不过,.htaccess本身也能做到,只需加入如下的指令:
order allow,deny
deny from all

5、URL转向
我们可能对网站进行重新规划,将文档进行了迁移,或者更改了目录。这时候,来自搜索引擎或者其他网站链接过来的访问就可能出错。这种情况下,可以通过如下指令来完成旧的URL自动转向到新的地址:
Redirect /旧目录/旧文档名 新文档的地址
或者整个目录的转向:
Redirect 旧目录 新目录

6、改变缺省的首页文件
一般情况下缺省的首页文件名有default、index等。不过,有些时候目录中没有缺省文件,而是某个特定的文件名,比如在pmwiki中是pmwiki.php。这种情况下,要用户记住文件名来访问很麻烦。在.htaccess中可以轻易的设置新的缺省文件名:
DirectoryIndex 新的缺省文件名
也可以列出多个,顺序表明它们之间的优先级别,例如:
DirectoryIndex filename.html index.cgi index.pl default.htm

7使用.htaccess 访止盗链。如果你网站上的一个图片被别的N多的网站引用了,那么,这很有可能会导致你服务器的性能下降,使用下面的代码可以保护某些热门的链接不被过多的引用。

Options +FollowSymlinks
# Protect Hotlinking
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www.)?domainname.com/ [nc]
RewriteRule .*.(gif|jpg|png)$ http://domainname.com/img/hotlink_f_o.png [nc]

8、设置网站的时区
SetEnv TZ America/Houston

9、阻止IP列表
有些时候,你需要以IP地址的方式阻止一些访问。无论是对于一个IP地址还是一个网段,这都是一件非常简单的事情,如下所示:
allow from all
deny from 145.186.14.122
deny from 124.15

Apache对于被拒绝的IP会返回403错误。

10、 把一些老的链接转到新的链接上——搜索引擎优化SEO
Redirect 301 /d/file.html http://www.htaccesselite.com/r/file.html

11、为服务器管理员设置电子邮件
ServerSignature EMail
SetEnv SERVER_ADMIN default@domain.com

12、阻止 User Agent 的所有请求

## .htaccess Code :: BEGIN
## Block Bad Bots by user-Agent
SetEnvIfNoCase user-Agent ^FrontPage [NC,OR]
SetEnvIfNoCase user-Agent ^Java.* [NC,OR]
SetEnvIfNoCase user-Agent ^Microsoft.URL [NC,OR]
SetEnvIfNoCase user-Agent ^MSFrontPage [NC,OR]
SetEnvIfNoCase user-Agent ^Offline.Explorer [NC,OR]
SetEnvIfNoCase user-Agent ^[Ww]eb[Bb]andit [NC,OR]
SetEnvIfNoCase user-Agent ^Zeus [NC]
Order Allow,Deny
Allow from all
Deny from env=bad_bot
## .htaccess Code :: END

13、把某些特殊的IP地址的请求重定向到别的站点

ErrorDocument 403 http://www.piaoyun.cc
Order deny,allow
Deny from all
Allow from ip
Allow from ip

14、直接找开文件而不是下载 – 通常,我们打开网上文件的时候总是会出现一个对话框问我们是下载还是直接打开,使用下面的设置就不会出现这个问题了,直接打开。

AddType application/octet-stream .pdf
AddType application/octet-stream .zip
AddType application/octet-stream .mov

15、修改文件类型 – 下面的示例可以让任何的文件都成为PHP那么被服务器解释。比如:myphp, cgi,phtml等。

ForceType application/x-httpd-php
SetHandler application/x-httpd-php

16、阻止存取.htaccess 文件

# secure htaccess file
order allow,deny
deny from all
#下面的代码保护.htaccess不被下载
<Files ~ “^.htaccess”>
Order allow,deny
Deny from all
</Files>

17、保护服务器上的文件被存取

# prevent access of a certain file order allow,deny
deny from all

18、阻止目录浏览

# disable directory browsing
Options All -Indexes

19、口令认证 – 你可以创建一个文件用于认证。下面是一个示例:

# to protect a file
AuthType Basic
AuthName “Prompt”
AuthUserFile /home/path/.htpasswd
Require valid-user
# password-protect a directory
residesAuthType basic
AuthName “This directory is protected”
AuthUserFile /home/path/.htpasswd
AuthGroupFile /dev/null
Require valid-user

详细见官方:httpd://apache.org/docs/1.3/howto/htaccess.html

在nginx/conf/vhost/站点名称.conf 里的server段里面,添加如下的代码:(红色部分)

server
{
listen 80;
server_name www.piaoyun.cc piaoyun.cc;
if ($host != 'www.piaoyun.cc')
{
rewrite ^/(.*)$ http://www.piaoyun.cc/$1 permanent;
}

意思是:如果访问的域名来路不是www.piaoyun.cc就全部301跳转到带有www.piaoyun.cc的域名下面!

然后service nginx restart

第一种情况:访问A站定向到B站

server {
server_name A.com ;
rewrite ^(.*) http://www.A.com$1 permanent;
}

目前是使用此方法,第一部分的server取消上面的域名绑定!这个放在配置文件的最后!

第二种情况:不是访问A站的全部重定向到指定页面

server {
server_name www.A.com;
if ($host != ‘A.com’ ) {
rewrite ^/(.*)$ http://www.B.com/$1 permanent;
}
}

如果写在第一个server段
使用IP访问时也将被重定向

很多朋友问我,为什么他已经在apache规则里面加了禁止别人直接下载.htaccess文件,为什么还是可以下载!
其实这个很简单,因为.htaccess在lnmpa当它作为文件被访问的时候其实是由Nginx来处理的,所以我们需要在Nginx里来添加规则.

而且这个规则,在Nginx默认的里面是存在的。

# deny access to .htaccess files, if Apache’s document root
# concurs with nginx’s one
location ~ /\.ht {
deny all;
}

复制到你的nginx/conf/vhost/站点名称.conf 里,然后service nginx restart

nginx禁止访问所有.开头的隐藏文件设置

location ~* /\.* {
deny all;
}

nginx禁止访问目录,例如:禁止访问path目录

location ^~ /path {
deny all;
}

可以把path换成实际需要的目录,目录path后是否带有"/",带"/"只禁止访问目录,不带"/"禁止访问目录中的文件
注意这段禁止php权限的secion一定要放在 指定的php section的前面才可以生效的.
禁止多个目录的php执行访问权限和html文件的访问!

location ~ /(upload|cache/templates)/.*\.(php|php5|html)?$
{
deny all;
}