Apache:进行访问控制
访问限制
<Directory "/usr/local/apache2/htdocs">
#Order:Allow,Denyの処理順序を決める
#Allow:許可するアクセス元を指定
#Deny :禁止するアクセス元を指定
Order allow,deny
Allow from all #すべて
Deny from 192.168.1.28 #IPアドレス指定
Deny from 192.168.2 #IPアドレス前半
Deny from 192.168.3.0/255.255.255.0 #ネットマスク
Deny from 192.168.3.0/24 #サブネットマスク
Deny from dummy.com #ホスト名、ドメイン名の一部
</Directory>
再次启动并确认访问控制。
上述是针对目录级别的访问控制。
如果写在中,则成为文件级别的访问控制。
通过HTTP请求头信息进行限制
通过HTTP请求头中的浏览器类型信息和链接来源信息进行访问限制。
如何检查HTTP请求头
在Chrome浏览器中访问chrome://net-internals/#events网址,然后在搜索框中输入”type:URL_REQUEST”。
通过User-Agent(WEB浏览器类型的信息)进行限制。
HTTP请求标头中包含有关Web浏览器类型的信息(User-Agent)。
只允许包含”Mozilla”的User-Agent标头的网络浏览器。
只针对User-Agent标头的浏览器匹配
<Directory "/usr/local/apache2/htdocs">
# BrowserMatch: User-Agentのヘッダーに正規表現がマッチすれば環境変数を設定する
# "Mozilla"がマッチすれば、環境変数mozillaを設定する
BrowserMatch "Mozilla" mozilla
Order deny,allow
Deny from all
#環境変数mozillaが設定されていればアクセスを許可する
Allow from env= mozilla
</Directory>
根据引荐方(链接来源的URL信息)的限制
当需要控制访问来源时,原始链接是有效的。它可用于防止页面内的图片被深层链接或直接链接,还可用于防止引用垃圾邮件干扰访问分析。
如果HTTP请求头中有任何请求,适用于SetEnvIf。
# アイコンのディレクトリコンテナ
<Directory "/usr/local/apache2/icons">
# SetEnvIf: 指定した対象に正規表現がマッチしたら環境変数を設定する
#(任意のHTTPのリクエストヘッダーを対象にできる)
# Refererヘッダーに"www.example.jp"が含まれていれば、環境変数exampleを設定する
SetEnvIf Referer "www\.example\.jp" example
Order deny,allow
Deny from all
#環境変数exampleが設定されていればアクセスを許可する
Allow from env= example
</Directory>
更改错误消息
ErrorDocument 500 "The server made a boo boo."
ErrorDocument 404 /missing.html
ErrorDocument 404 "/cgi-bin/missing_handler.pl"
ErrorDocument 402 http://www.example.com/subscription_info.html
设置密码
通过htpasswd注册用户,并通过配置文件设置认证来对密码进行访问限制。
htpasswd:进行用户注册
执行以下命令后,将创建一个密码文件:
htpasswd -c [密码文件名] [用户名]
#設定ファイルのディレクトリに移動してから実行する
$ cd /etc/httpd/conf/
$ htpasswd -c passwdfile vagrant
新密码:
重新输入新密码:
为用户vagrant添加密码。
httpd.conf:进行基本身份验证设置
<Directory "/usr/local/apache2/htdocs">
# ~
# ~
# AuthType :ユーザー認証の種類を指定
# AuthName :認証の範囲をユーザーに知らせるメッセージを指定
# AuthUserFile :ユーザー名とパスワードが登録されたファイルを指定
# Require :認証してアクセスできるユーザーを指定。
# (valid-userで認証したすべてのユーザー)
AuthType Basic # 基本認証を指定
AuthName "Password for example.com" # 認証ダイアログに表示されるメッセージ
AuthUserFile /etc/httpd/conf/passwdfile #ユーザー登録作ったファイル
Require valid-user #認証に成功したユーザーはすべてアクセスできる
</Directory>
重新启动Apache,并检查基本认证设置。
$ /etc/rc.d/init.d/httpd restart
只需一种选项,用中文本地化解释以下内容:
允许以小组为单位进行认证
创建一个组(创建一个组文件)
$ vi groupauth
【群组名】:[用户名] [用户名]・・・(用户名使用半角字符分隔)
example :vagrant example_user
dummy :vagrant dummy_user
<Directory "/usr/local/apache2/htdocs">
# ~
# ~
# AuthUserFile :グループが登録されたファイルを指定
# Require group:認証してアクセスできるグループを指定
AuthType Basic
AuthName "Password for example.com"
AuthUserFile /etc/httpd/conf/passwdfile
AuthUserFile /etc/httpd/conf/groupauth # グループ登録で作ったファイル
Require group example #exampleグループを認証する
</Directory>
将访问限制和认证结合起来使用。
<Directory "/usr/local/apache2/htdocs">
# アクセス制限
Order allow,deny
Allow from all
Deny from 192.168.1.28
# 認証
AuthType Basic
AuthName "Password for example.com"
AuthUserFile /etc/httpd/conf/passwdfile
Require valid-user
# Satisfy:アクセス制限と認証の関係
# all - 両方の条件にあった場合、許可する
# any - いずれかの条件にあった場合、許可する
Satisfy all #記載しなくてもデフォルトはSatisfy all
</Directory>
重定向
当URL发生改变时,返回改变后的URL。
一时的重定向
在文件末尾追加以下内容。
# Redirect [アクセスされるPath] [リダイレクト先]
Redirect /redirect_test/ http://example.com/test/
当访问 http://example.com/redirect_test/ ,会被重定向到 http://example.com/test/。
可以使用正则表达式来指定路径
Redirect ^/redirect_test/(.*)$ http://example.com/test/
搬家重定向
在文件末尾追加下述内容。
# Redirect [ステータス] [アクセスされるPath] [リダイレクト先]
# parmanent:ステータスコード301(Moved Parmanetly)を返す。省略すると302(tmp)
Redirect parmanent /redirect_test/ http://example.com/test/
内容协商
网页浏览器会通过HTTP请求头信息通知服务器有关语言、字符类型、数据类型等环境信息。每个信息都有多种格式和优先级,服务器可以选择最适合的格式。
这种在客户端和服务器之间自动查询可处理的数据格式的过程被称为内容协商。
# Accept:クライアントが処理できるデータタイプと優先度
# Accept-Language:クライアントが処理できる言語と優先度
# Accept-Charset:クライアントが処理できる文字コードと優先度
# Accept-Encoding:クライアントが処理できるデータ転送方式と優先度
# q:品質値
GET / HTTP / 1.1
Accept-Language: ja, en-us; q=0.7, en:q=0.3
Accept-Charset: Shift_JIS,utf-8; q=0.7,*;q=0.7
httpd.conf: 多视图选项
<Directory "/usr/local/apache2/htdocs">
#~
#~
# MultiViews :コンテントネゴシエーションを有効にするOption指定
Options FollowSymLinks MultiViews
#~
#~
# AddLanguage :拡張子を言語指定に関連づける
AddLanguage en .en
AddLanguage ja .ja
# AddCharset:拡張子を文字コード指定に関連づける
AddCharset shift_jis .sjis
#~
#~
</Directory>
在DocumentRoot中放置日语页面(lang.html.ja)和英语页面(lang.html.en),以便访问以下链接:
http://example.com/lang.html
http://example.com/lang.html.ja
http://example.com/lang.html.en
只显示日文页面
以下是lang.html样例。
关于Linux的日语支持,请点击这里。
<html>
<head>
<META http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>日本語のページ</title>
</head>
<body>
<p>日本語のコンテンツ</p>
<p>English Content</p>
</body>
</html>
<html>
<head>
<META http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>English Page</title>
</head>
<body>
<p>日本語のコンテンツ</p>
<p>English Content</p>
</body>
</html>
如果在HTTP请求头中没有设置优先级,或者没有指定优先级的情况下,将参考LanguagePriority和AddDefaultCharset的配置。
LanguagePriority en ca cs da de el eo es et fr he hr it ja ko ltz nl nn no pl pt pt-BR ru sv zh-CN zh-TW
AddDefaultCharset off
隐藏服务器的类型
HTTP响应头部包含服务器类型、版本信息以及错误文档,但为了防止服务器版本特定的漏洞被发现时成为攻击目标,可以配置隐藏这些信息。
ServerTokens: 设置显示HTTP响应头中的Server头信息。
ServerSignature:显示或隐藏错误文档末尾的信息(开/关)
ServerTokens Prod
ServerSignature Off
添加数据类型
MIME类型由服务器确定,并写入HTTP响应头ContentType中。
MIME类型
纯文本格式:text/plain
HTML格式:text/html
JPEG格式图片:image/jpeg
添加类型
在httpd.conf文件中,将文件扩展名与MIME类型相关联。
AddType application/epub+zip .epub
限制对机器人的访问
网页搜索引擎通过机器人程序收集网页内容,并对机器人进行访问限制以减少无效的服务器访问并减轻负载。
使用robots.txt文件指定不需要被收集的目录
将robots.txt文件放置在DocumentRoot目录下。
User-agent: *
Disallow : /test/
Disallow : /data/