apache2.4でリバースプロキシ配下での.htaccessでIP制限をかけるときの書き方
apache2.2の時とは書き方が違っていてハマったのでメモ。
index.htmlを192.168.0系のIPアドレスのみ許可する場合。
#192.168.0.1/24 SetEnvIF X-Forwarded-For "^192\.168\.0\.([0-9]|[1-9][0-9]|1([0-9][0-9])|2([0-4][0-9]|5[0-5]))$" AllowIP <Files index.html> <RequireAny> Require env AllowIP </RequireAny> </Files>
ちなみにapache2.2の時は以下のように書く
#192.168.0.1/24 SetEnvIF X-Forwarded-For "^192\.168\.0\.([0-9]|[1-9][0-9]|1([0-9][0-9])|2([0-4][0-9]|5[0-5]))$" AllowIP <Files index.html> order deny,allow deny from all allow from env=AllowIP </Files>
MongoDBでpidファイルが作成されないときの対処法
mongoDBをmonitでpidの監視していたが、
時々monitが暴走してmongoDBの再起動コマンドを何度も繰り返してしまうので、
原因を調べたら、pidが作成されていなかった。
・mongodb 2.4
・rpmにてインストール
less /etc/init.d/mongod ---------- # processname: mongod # config: /etc/mongod.conf # pidfile: /var/run/mongo/mongod.pid DBPATH=`awk -F= '/^dbpath=/{print $2}' "$CONFIGFILE"` PIDFILE=`awk -F= '/^dbpath\s=\s/{print $2}' "$CONFIGFILE"` mongod=${MONGOD-/usr/bin/mongod} ----------
/var/run/mongo がデフォルトだけども、 mongod.confファイルの設定から呼び出される模様。
less /etc/mongod.conf ---------- # location of pidfile pidfilepath = /var/run/mongodb/mongod.pid ----------
/var/run/mongodb下に作られる模様。
cd /var/run/ ll mkdir /var/run/mongodb chown mongod:mongod /var/run/mongodb service mongod restart
/var/run/下にmongodbフォルダがなかったので作成。
その後再起動したら無事にpidファイルが作成された。
yumでインストールしても/var/run下に pidファイルを置くためのフォルダが作られないようなので注意。
linuxでコマンドが打てないときに確認するメモ
rootとかでは普通にコマンドが打てるのに、
なぜかPHPなどプログラムなどではコマンドが実行できないときにハマったので、
メモ。
mysqlコマンドを「/usr/local/mysql/bin/mysql」に入れてて、それにパスを通していた場合
まずPath確認。
echo $PATH /usr/local/bin:/bin:/usr/bin:/usr//usr/local/mysql/bin/mysql
このユーザーは実行できるが、webプログラムのphpが実行できない場合、
apacheなどにパスが追加されていないことがある。
だいたいどのユーザーも通っている/usr/bin/下にシンボリックリンクを通し、実行できるようにする。
ln -s /usr/local/mysql/bin/mysql /usr/bin/mysql
これでapacheもmysqlコマンドを実行できるようになる。
ソースから入れた場合や、ダウンロードしてきた場合は注意。
apacheでつくる503メンテページ
環境:AmazonLinux(CentOS6でも下記やり方できます)
すべてrootユーザーで作業
apacheインストール
sudo yum install httpd
メンテナンスページ作成
vi /var/www/html/maintenance.html ------------------- now maintenance -------------------
mod_rewriteと.htaccess許可
vi /etc/httpd/conf/httpd.conf ------------------------------------------------- <Directory "/var/www/html"> Options -Indexes FollowSymLinks AllowOverride All Order allow,deny Allow from all </Directory> LoadModule rewrite_module modules/mod_rewrite.so -------------------------------------------------
.htaccess設定
vi /var/www/html/.htaccess ------------------------------------------------- ErrorDocument 503 /maintenance.html RewriteEngine On RewriteCond %{REQUEST_URI} !=/maintenance.html #RewriteCond %{REMOTE_ADDR} =IPアドレス RewriteRule ^.*$ - [R=503,L] ------------------------------------------------- sudo service httpd start sudo chkconfig httpd on
IPアドレスにアクセスして、メンテナンスページが表示されて、503が返されていればOK
CloudflontとS3で503を返すメンテナンスページ作成
S3だけでメンテページを作成しようとしたが、S3単体だと503を返すことができないので、
CloudfrontとS3でメンテナンスページを作成したときのメモ。
s3バケットを作成
・まずマネジメントコンソールに入り、S3のバケットを作成。
・作ったバケットの横の虫眼鏡を押して、プロパティを表示。
・「静的サイトホスティング」をクリックし、「ウェブサイトのホスティングを有効にする」を選択。
・「インデックスドキュメント」はなくては作れないので、適当に「index.html」としておく。
・「アクセス許可」を選択し、「バケットポリシーの編集」を選択。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "PublicReadGetObject", "Effect": "Allow", "Principal": "*", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::[バケット名]/*" } ] }
上記のようにポリシーを作成する(これでアップロードしたものすべてが自動で閲覧可になる)
s3にリソースアップロード
・s3マネジメントコンソールで対象のバケット名をクリックし、右上の「アクション」ボタンを押して、「アップロード」を選択。
・ドラッグアンドドロップでhtmlファイル等リソースをアップロード。
・ちゃんと表示されているかどうか先ほどのプロパティ画面の「静的サイトホスティング」のところにある「エンドポイント」にアクセス
(「バケット名.s3-website-ap-northeast-1.amazonaws.com」とかなっているやつ。そこから「/maintenance.html」みたいにリソース名でアクセスできる)
cloudflontを作成
・「create Distribution」を選択。「Web」のほうの「Get Started」を選択。
・「Origin Settings」の「Origin Domain Name」にバケット名を入れる(文字入力すればサジェストされる)
・「Restrict Bucket」をYESにする。
・「Origin Access Identity」をCreate a New Identityにする。
・「Grant Read Permissions on Bucket」をYes, Update Bucket Policyにする。
・下のほうにある「Distribution Settings」内にある「Alternate Domain Names (CNAMEs)」というところに、先ほどのs3のエンドポイントを入力
・あとはデフォルトのまま「Create Distribution」を押して作成する。
Error Pages設定
・cloudflontのサイドメニュー「Distributions」を選択したら、先ほど作ったDistribution一覧にあると思うので、IDをクリック。
・タブメニューの「Error Pages」を選択し、「Create Custom Error Response」を選択。
・「HTTP Error Code」は「403:Forbidden」、「Error Caching Minimum TTL」はデフォルト。
・「Customize Error Response」を「Yes」にする。
・「Response Page path」という設定項目がでてくるので、s3に設置したメンテページのhtmlのパスを設定。
(直下に「maintenance.html」というファイルを置いていたら「/maintenance.html」)
・「HTTP Response Code」は「503:Service Unavailable」を選択し、「Create」を選択。
疎通確認
・15分~30分くらいで表示されるようになるので、その後cloudflontのサイドメニュー「Distributions」の一覧のところにある要素「Domain Name」にアクセスする。
(ランダム文字列.cloudfront.netみたいなやつ)
・無事メンテページが表示されて、503がレスポンスで返ってくれば準備完了。
・実際メンテナンスに入る前に、DNSの設定を疎通確認したクラウドフロントの「Domain Name」にすればOK。
※Route53のAlias設定でcloudflontディストリビューションを設定する場合は、Route53の料金がかかりません!
追記
・作りたてのS3は、307 Temporary Redirectを上記設定で疎通を行うと返してくることがたまにある。
対策を調べたのですがこれというものは見つからず、事前にs3バケットのみ用意しておくのがよさそうです。(データ置いとくだけなら1GB月4円くらいなので)
Linuxサーバーなどで、自分の外向きIPアドレスが知りたいとき
curl ifconfig.co