2012年 5月 23日 はてなブックマーク -
タグ: #Apache

Satisfy Any の設定で .htaccessファイルがブラウザーで表示されてしまう

テスト用のサイトなど公開したくないフォルダには、通常Basic認証などのアクセス制限をかける。しかし、制作者にとってはこの認証画面がわずらわしく作業効率が落ちるため、自社のIPからはBasic認証なしにアクセスが可能にしたい。
そのため、.htaccessに以下のような記述を行うとよい。
AuthUserFile /path記述/.htpasswd
AuthGroupFile /dev/null
AuthName “Enter ID and Password.”
AuthType Basic
require valid-user

order deny,allow
allow from 自.社.IP.アドレス
deny from all
Satisfy any
しかし、ここで指定した”Satisfy any”が問題で、
このオプションを指定することで .htaccessや.htpasswdなどのファイルがブラウザーで表示されてしまうことがある。これを防ぐためには.htaccessに以下の記述を追加する。
<files ~ “^.ht”>
  Order allow,deny
  Deny from all
  Satisfy All
</files>
これで.htで始まるファイルのブラウザーからの閲覧が不可となる。

どらやきラボ: Satisfy Any の設定で .htaccessファイルがブラウザーで表示されてしまう

Satisfy Anyを用いて、外はBASIC認証、中はSatisfy anyでIP認証だけという設定に出来ます。


1日前 | | 2012年 5月 23日 | このエントリーを含むはてなブックマーク
2011年 10月 2日 はてなブックマーク -
タグ: #Apache

MaxClientsを増やせということなので、増やす。

ServerLimitの値以上にMaxClientsは設定できないため、

ServerLimitも増やしてapacherestartした。


しかし、どうも設定が反映されていない模様。。

再度error_logを見ると下記のエラー

[warn] WARNING: Attempt to change ServerLimit ignored during restart


restartじゃServerLimitは反映されないのか。

apacheのServerLimitが反映されない - 第2.5地区

Apacheの再起動方法によってはServerLimitの変更が反映されません。
/etc/init.d/httpd graceful では変更されないが、以下なら反映されます。
/etc/init.d/httpd restart
/etc/init.d/httpd condrestart


7ヶ月前 | | 2011年 10月 2日 | このエントリーを含むはてなブックマーク
2011年 7月 14日 はてなブックマーク -
タグ: #Apache #sed #Linux

Apacheログに色を付けて快適tail生活 - y-kawazの日記

で「Apacheログをtail中にステータスコード部分だけに色つけしたい」

#!/bin/sed -f
## MEMO
# [0m reset
# [1m bold
# [3m italic
# [4m underline
# [5m blink
# [30m black
# [31m red
# [32m green
# [33m yellow
# [34m blue
# [35m magenta
# [36m cyan
# [37m white
s/\(HTTP\/1.."\) \(2[0-9][0-9]\) /\1 \x1b[34m\2\x1b[0m /
s/\(HTTP\/1.."\) \(3[0-9][0-9]\) /\1 \x1b[32m\2\x1b[0m /
s/\(HTTP\/1.."\) \(4[0-9][0-9]\) /\1 \x1b[33m\2\x1b[0m /
s/\(HTTP\/1.."\) \(5[0-9][0-9]\) /\1 \x1b[31m\2\x1b[0m /

10ヶ月前 | | 2011年 7月 14日 | このエントリーを含むはてなブックマーク
2011年 5月 15日 はてなブックマーク -
タグ: #Linux #CentOS #Apache

以下の例は、MaxClientsが256のときと、20のときで、どのように挙動が変わるかをabで図ったものです。

# ab -c 100 -n 2000 http://49.212.??.??/phpmyadmin/

MaxClientsが256の場合は、スワップを大きく消費しているほか、ロードアベレージも大きく上がっており、SSHのレスポンスについても非常に悪化していました。
それに対し20の場合は、それほど負荷の上昇は見られず、計測時間、秒間処理数、リクエストにかかる秒数の全てにおいて、改善していることが分かります。
要は、無理に同時に処理する数を増やすより、少々待たされる状態が出たとしてもサーバ能力を超えない範囲にしたほうが、結果としてレスポンスは良くなるということです。
サーバ負荷が高く、レスポンスが悪化した場合は、MaxClientsを増やすのではなく、減らすことをまず考えた方が賢明です。

MaxClientsスワップロードアベレージ計測時間秒間処理数リクエスト
256859MB79.2655.40秒36.10/秒2.73秒
2011MB5.4635.66秒56.08/秒1.74秒


1サーバあたりのメモリ使用量(ps結果のRSS)は10MB程度でしたので、100サーバだと1GB程度消費するのに対し、20サーバだと200MB程度で済みます。結局のところ、Apacheで使用する容量÷10MB?30MB程度で考えるのが良いでしょう。

参考までに、私が1GBメモリ、2コア程度のサーバ(さくらのVPS 1Gプラン相当)でいつも行っている設定は以下のような値です。

<IfModule prefork.c>
StartServers 10
MinSpareServers 5
MaxSpareServers 15
ServerLimit 256
MaxClients 40
MaxRequestsPerChild 1000
</IfModule>

ウェブ開発者のための、1時間でできるLAMP環境構築術(CentOS編) - さくらインターネット創業日記

* StartServers
Apache開始時に立ち上げておくべきサーバ数。
* Apache起動直後は、ここで指定した数のサーバが立ち上がる。 MinSpareServers
アイドル中のサーバ数の下限。アイドル中とは、リクエストに対して即座に対応できる状態(つまり処理していない)のこと。
ここで指定したサーバより少なくなった場合は、新たなサーバを立ち上げる。
* この数値が小さすぎると、急激にアクセスが増えたときに、リクエストに受けきれなくなる。 MaxSpareServers
アイドル中のサーバ数の上限。
ここで指定したサーバより多くなった場合は、余計なサーバを終了させる。
* この数字が大きすぎると、アクセスが落ち着いている状態でもサーバが終了されず、メモリが無駄に消費されることになる。 ServerLimit
後述するMaxClientsに指定できる数字の上限を指定する。
* MaxClientsを256より大きな数字にするとき以外は、特に変更の必要はない。 MaxClients
サーバ数の上限。
* ここで指定した数以上のサーバは立ち上がらない。 MaxRequestsPerChild
処理できるリクエストの上限数。
処理したリクエストがここで指定した数を超えると、該当サーバは終了される。


1年前 | | 2011年 5月 15日 | このエントリーを含むはてなブックマーク
2011年 4月 30日 はてなブックマーク -
タグ: #Apache
AllowEncodedSlashes On
RewriteRule ^/(.*)$ http://backend/$1 [QSA,L,P]

みたいな設定を書いてるときにfrontendに

http://frontend/keyword/Fate%2Fstay+night

なリクエストが来ると、この設定だとbackendには

http://backend/keyword/Fate/stay+night

%2FがデコードされたURLプロキシしてしまう!

%2Fのままプロキシするには以下のように設定をすればよい。

AllowEncodedSlashes On
RewriteCond %{THE_REQUEST} /([^\ ]+)
RewriteRule ^/(.*)$ http://backend/%1 [QSA,L,P,NE]

RewriteCondで生のリクエスト文字列にマッチングを掛けて、RewriteCondの後方参照(%N)を使えば%2Fのままプロキシできるというわけでしたー。

apacheが%2Fを勝手にデコードして生きるのが辛いとき - かみぽのメモ

「AllowEncodedSlashes On」を追加するだけじゃ問題は解決していません。
一度デコードされてしまうんで、例えば「%2f(ASCIIの「/」)」とかがあるとすると、いったいそれがもともと「/」で入ってたのか、「%2f」で入ってたのかわからなくなってしまうんですよね。
そこで上記の設定が役に立ちます。


1年前 | | 2011年 4月 30日 | このエントリーを含むはてなブックマーク
2011年 4月 4日 はてなブックマーク -
タグ: #Apache #SSL #CSR #CentOS

ベリサインが今年中にすべてのSSLのルート証明書を2048bit対応にバージョンアップします。
それに対応して、csrも2048bitで生成する方法をお知らせします。一般のcsrも同様の方法で生成できます。

1.まずopensslの場所を調べます。

#which openssl
/usr/bin/openssl

2.カレントディレクトリを移動します。

#cd /usr/bin

3.秘密鍵作成のための擬似乱数の情報を生成します【無くてもできます】。

 ./openssl md5 * > rand.dat

4.作成した擬似乱数ファイル(rand.dat)から、秘密鍵を作成します。
トリプルDESを使い、2048bit の秘密鍵(ファイル名:key2010.pem)を作成する場合の例。2048bitであることが、ルート証明書の関係で重要です。

# ./openssl genrsa -rand rand.dat -des3 2048 > key2010.pem
57625 semi-random bytes loaded
Generating RSA private key, 2048 bit long modulus
……………………….+++
……………………………………………+++
e is 65537 (0×10001)
Enter pass phrase:

5.パスフレーズを求められますので、2回入力します。パスフレーズは忘れないように。後で必要になります。

Enter pass phrase:適当なパスワード
Verifying – Enter pass phrase:確認用の適当なパスワード

6.指定した名前でファイルができていることを確かめます。

#ls-la
-rw-r–r– 1 root root 1751 6月 23 13:52 key2010.pem

7.次に、csrファイルを生成します。

openssl req -new -key key2010.pem -out csr2010.pem

8.先ほどのパスフレーズを求められます。
Enter pass phrase for key2010.pem:

9.この後は、国、都道府県、市、組織名、コモンネームと順番に入力します。
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter ‘.’, the field will be left blank.
—–
Country Name (2 letter code) [GB]:JP
State or Province Name (full name) [Berkshire]:Aichi
Locality Name (eg, city) [Newbury]:Nagoya-city
Organization Name (eg, company) [My Company Ltd]:Sixpence Inc.
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server’s hostname) []:www.6web.ne.jp

10.ここから下は入力しないでください。エンターキーで次に行けます。
Email Address []:
Please enter the following ‘extra’ attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

11.ここまでで完了です。
指定した名前で、2048bitのcsrファイルができています。

ルート証明書2048bit対応のcsrファイルの作り方

セキュリティ上好ましくないが、パスフレーズ無しにしたいときの方法も併記します。
——
■パスフレーズなしで鍵を生成する場合

通常の作成方法
# openssl genrsa -des3 -out ./ssl.key/xxxxxxx.key 2048

*”-des3”はdes3アルゴリズムのパスワード保護するという意味です。


パスワードなしの作成方法
# openssl genrsa -out ./ssl.key/xxxxxxx.key 2048


■パスフレーズを後から解除する場合
元ファイルのバックアップ
# cp xxxxxxx.key xxxxxxx.key.org
パスワードの解除
# openssl rsa -in xxxxxxx.key -out xxxxxxx.key


1年前 | | 2011年 4月 4日 | このエントリーを含むはてなブックマーク
2011年 1月 13日 はてなブックマーク -

うまく動いてない模様でした。
サーバがさくらインターネットのサーバだったので管理画面から転送量グラフを眺めてみましたが、送信と受信で転送量に差が見受けられませんでした。
(今回はたまたまグラフで確認できましたが、ツール等が入っていない場合は/proc/net/devあたりを監視することになると思います。)

そこで、httpd.confのLogLevelをwarnからdebugに。そうするとエラーログに以下のようなメッセージが出ていました。

[debug] cache_storage.c(257): cache_select_url(): Vary header mismatch.
ヘッダがおかしいからキャッシュできませんよ、ということみたいです。
そこで、httpd.confの<IfModule mod_cache.c>~</IfModule>の間に次の1行を追加。
CacheIgnoreHeaders Set-Cookie User-Agent Vary
apacheを再起動したところ、無事にキャッシュが機能していました。

mod_mem_cache - サイブリッジラボ

Apacheでmod_mem_cacheを使う場合には、「CacheIgnoreHeaders Set-Cookie User-Agent Vary」もセットで使うと良さそうです。


1年前 | | 2011年 1月 13日 | このエントリーを含むはてなブックマーク
2011年 1月 13日 はてなブックマーク -
タグ: #Apache #mod_mem_cache

mod_mem_cache

メモリを湯水のように使えるmemcache機能。

ディレクティブの意味は分かりやすい

だが単位に注意

MCacheMaxObjectCount     個
MCacheMaxObjectSize      Byte
MCacheMaxStreamingBuffer  Byte
MCacheMinObjectSize       Byte
MCacheRemovalAlgorithm    
MCacheSize              KByte

ただのメモ帳 » Blog Archive » mod_mem_cache

1年前 | | 2011年 1月 13日 | このエントリーを含むはてなブックマーク
2011年 1月 3日 はてなブックマーク -
タグ: #Apache #Proxy

概要

先日、DTIのServersMan@VPS*1メンテナンス (機能追加) http://www.dti.co.jp/release/101216.html でAirDisplay@VPS*2インストールが行われたが、設定ミスがありほぼ全てのVPSオープンプロキシ (アクセス制限が行われず誰でも利用出来るプロキシサーバ) となっている状態だった。

12/27メンテナンス作業後

まず、27日のメンテナンス時点で /etc/httpd/conf.d/proxy_ajaxterm.conf にはイカのように記載されていた。これは localhost:8022 で動作する AjaxTerm に対するリバースプロキシ設定だが、本来不要な記載をしているためにセキュリティ上の問題があった。

<IfModule mod_proxy.c>
ProxyRequests On

<Proxy *>
        Order deny,allow
        Deny from all
        Allow from all
</Proxy>
ProxyPass /airdisplay/ http://localhost:8022/
ProxyPassReverse /airdisplay/ http://localhost:8022/

ProxyRequests On を設定することによりApacheHTTP Proxyサーバとして動作するが、ProxyPass, ProxyPassReverse を利用する場合にはこの設定を有効にする必要は全く無い。これは、Apacheマニュアルにもイカのように記載されている。

The ProxyRequests directive should usually be set off when using ProxyPass. (http://httpd.apache.org/docs/2.2/en/mod/mod_proxy.html#proxypass)

さらに、このプロキシ機能に対して Allow from all (制限無しにアクセス可能) を設定したため、無制限にプロキシ機能を提供するオープンプロキシの状態となっていた。

DTI VPSの大部分がオープンプロキシになっていた件について - Magical Diary

ProxyPass, ProxyPassReverse を利用する場合には「ProxyRequests On」を有効にする必要は全く無い。


1年前 | | 2011年 1月 3日 | このエントリーを含むはてなブックマーク
2010年 11月 17日 はてなブックマーク -
タグ: #Apache
.htaccess

User-Agentに `NG-CRAWLER’ が含まれている場合はアクセスを禁止する。

SetEnvIf User-Agent "NG-CRAWLER" deny_robot
Order deny,allow
deny from env=deny_robot


User-Agentに `NG-CRAWLER’ が含まれている場合はアクセスを禁止するが、`OK-CRAWLER’ が含まれている場合は許可する。

SetEnvIf User-Agent "NG-CRAWLER" deny_robot
SetEnvIf User-Agent "OK-CRAWLER" allow_robot
Order deny,allow
deny from env=deny_robot
allow from env=allow_robot

apache :: User-Agent でアクセス制限 [Tipsというかメモ]

1年前 | | 2010年 11月 17日 | このエントリーを含むはてなブックマーク
2010年 11月 8日 はてなブックマーク -
タグ: #Apache #mod_deflate

mod_deflateがHTTP Request Headerを判断してコンテンツを圧縮しているかどうか、telnetでテストした。

telnetでのアクセスについては下記が参考になった。

apache に mod_deflate を導入 | Linux LABS

GET / HTTP/1.1
Host: localhost
Accept-Encoding: deflate,gzip

結果としては、HTTP Request HeaderでAccept-Encodingにgzipを含む場合のみ圧縮された。

Accept-Encoding: deflate,gzip → 圧縮する

Accept-Encoding: deflate → 圧縮しない

Accept-Encoding: gzip → 圧縮する

Accept-Encoding: hogehoge,gzip → 圧縮する

POSTORO: mod_deflateは Accept-Encodingが gzipでないと圧縮しない

1年前 | | 2010年 11月 8日 | このエントリーを含むはてなブックマーク
2010年 11月 4日 はてなブックマーク -
タグ: #Apache #mod_pagespeed

こんな HTML (ちょっと古めかしい) を /mod_pagespeed 以下に配置して GET すると……

<link rel="stylesheet" href="./css/global.css" type="text/css"> 
<link rel="stylesheet" href="./css/toppage.css" type="text/css"> 
<script language="javascript" src="./js/jquery-1.2.6.min.js"></script> 
<script language="javascript" src="./js/browserCheck.js"></script> 
<script language="javascript" src="./js/flashCheck.js"></script> 
<script language="javascript" src="./js/imageButtonClass.js"></script>
  • CSS が連結される
  • JavaScript が連結 + minify される
    • 一部は HTML 内にインライン展開
<link rel="stylesheet" type="text/css" href="http://localhost/mod_pagespeed/css/cc.d1e8868aa9e24cd3a0b1e662bb9a5180.global,s+toppage,s.css"> 
<script language="javascript" src="http://localhost/mod_pagespeed/js/jm.c43653aab9297a12091818b0247f65c2.jquery-1,o2,o6,omin,l.js"></script> 
<script language="javascript">function BrowserChecker(navigatorObj){this.versionStr=navigatorObj.appVersion;this.nameStr=navigatorObj.appName; // 以下略

小さい画像は data URI scheme で展開されたり、

<img id="siteId" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAASAAA(略)">

外部の画像は mod_pagespeed 経由に URL が書き換えられて

<img src="http://localhost/mod_pagespeed/img/ce.fbeece41cce99327743774bb37b597f2.banner_s_blog,j.jpg">

もともと付いていなかった Cache-Control ヘッダが付与されたり。

$ lwp-request -m HEAD http://loacalhost/mod_pagespeed/img/ce.fbeece41cce99327743774bb37b597f2.banner_s_blog,j.jpg

200 OK
Cache-Control: public, max-age=31536000
Date: Thu, 04 Nov 2010 02:52:09 GMT
Server: Apache/2.2.12 (Ubuntu)
Vary: Accept-Encoding
Content-Length: 9065
Content-Type: image/jpeg
Last-Modified: Thu Nov  4 02:50:12 2010 GMT

動的に HTML を書き換えるので気になるパフォーマンスですが、10272 byte の HTML をフィルタ通して、最終的に 17852 byte になって (インライン展開される部分で大きくなる)、

Requests per second:    202.76 [#/sec] (mean)

Apache bench で計測して 200 req/sec ほど。(Athlon64 5400+)

よほどアクセスが多くないかぎり Web server の CPU は余ってることが多いと思うので、単に組み込むだけでクライアント側の体感速度が上がるならリーズナブルじゃないでしょうか。

mod_proxy と組み合わせる こともできるようですし、フィルタもいろいろある ようで、なかなか興味深いですね。

mod_pagespeed をちょっとだけ試してみた - 酒日記 はてな支店

1年前 | | 2010年 11月 4日 | このエントリーを含むはてなブックマーク
2010年 10月 20日 はてなブックマーク -
タグ: #Apache

[Linux][Apache] ServerLimitの変更 16:36

apachectl gracefulじゃ反映されません。

apachectl stop->apachectl startで。

[Mon Feb 26 15:14:05 2007] [notice] SIGHUP received.  Attempting to restart
WARNING: MaxClients of 100 would require 20 servers,
 and would exceed the ServerLimit value of 16.
 Automatically lowering MaxClients to 80.  To increase,
 please see the ServerLimit directive.
[Mon Feb 26 15:14:05 2007] [warn] WARNING: Attempt to change ServerLimit or ThreadLimit ignored during restart
[Mon Feb 26 15:14:05 2007] [notice] Apache configured -- resuming normal operations

2007-03-14 - 256bitの殺人メニュー

ApacheのServerLimitはstop→startしないと変わらない!


1年前 | | 2010年 10月 20日 | このエントリーを含むはてなブックマーク
2010年 10月 16日 はてなブックマーク -
Apache HTTP ServerのBufferedLogsディレクティブは、マニュアルでexperimentalとされていたので今まで試していませんでした。BufferedLogsディレクティブを有効にすると、リクエストごとにログを出力せずに、いったんバッファに蓄えてまとめて出力するようになります。

マニュアルにはBufferedLogsディレクティブによってディスクアクセスが効率的になると書かれていますが、これが効いてくるのはむしろパイプ経 由のログ出力です。ログがパイプに出力されて、パイプの反対側のプログラムが実行可能になる頻度が下がるからです。このところCPUが苦しかったので、有 効にして軽くベンチマークを取ったところ、リクエスト/秒で3倍以上の性能向上が見られたので、そのまま運用することにしました。

昨日Firefoxのアップデートがあったので、さっそくBufferedLogsの効果を見ることができました。前回のアップデートに比べるとアクセス は少なかったのですが、ピーク時で2.7Gbps、12,400コネクション、790リクエスト/秒を、パイプ経由のログ出力を一つも止めず、CPUを 100%使い切らずに乗り越えることができました。前回は同じ状況で、パイプ経由のログ出力を一つ止めていても、CPUを100%使い切り、ロードアベレージが数千だったことを考えると、BufferedLogsは効果絶大だったと言えるでしょう。

ftp-adminの憂鬱: BufferedLogsは効果絶大

そもそもアクセスログを残さないという選択肢もありますが、画像配信サーバでログを取るときはこれを設定したいですね。


1年前 | | 2010年 10月 16日 | このエントリーを含むはてなブックマーク