読者です 読者をやめる 読者になる 読者になる

三蔵開発メモ

iOS、Androidアプリ開発、WEB開発、AWS等の話題を共有していきます。

apacheでhttpsアクセスを行う設定まとめ

検索するとたくさん出てきますが、 自分用にまとめました。

必要なモジュールインストール

yum install mod_ssl -y
yum install openssl -y

vhostsに設定したい場合

vi /etc/httpd/conf.d/mydomain.test.conf
----------
#http用の設定

#中略

#以下をvhostsファイルに追加
<VirtualHost *:443>
  DocumentRoot /var/www/html/mydomain/
  ServerName mydomain.test
  ErrorLog logs/secure_error_log
  CustomLog logs/secure_access_log combined

  SSLEngine on
  SSLCertificateFile /etc/pki/tls/certs/ca.crt
  SSLCertificateKeyFile /etc/pki/tls/private/ca.key
  <Directory /var/www/html/mydomain>
      AllowOverride All
  </Directory>

</VirtualHost
----------

この場合、証明書を発行している場合は、
SSLCertificateFile
SSLCertificateKeyFile
この二つはおいてある場所をちゃんと指定する。

デフォルトのまま設定する場合

vhostsとか使ってない場合は、
mod_sslを設定したときに作られた、ssl.confファイルを変更する

vi /etc/httpd/conf.d/ssl.conf
----------
#この個所を発行した証明書の場所に変更
SSLCertificateFile /etc/pki/tls/certs/ca.crt
SSLCertificateKeyFile /etc/pki/tls/private/ca.key

#以下の項目をhttpの通信でやっている用に変更
DocumentRoot 
ServerName 
ErrorLog 
CustomLog 
<Directory>
      
</Directory>
----------

ssl.confはvhosts用のvhostsファイルなので、vhostsの時と同じように書き換えればok

MongoDB Ver.2系のログローテート

MongoDBでのログローテートがいまいちうまくいかなかったのでメモ。 以下の設定では一応動いた。 公式のドキュメント通りに killall -SIGUSR1 mongod これを使うとクラッシュしてしまったので、対応。(3系なら killall -SIGUSR1 も動くのかも)

/var/log/mongo/mongod.log {
    weekly
    missingok
    rotate 4
    compress
    notifempty
    create
    postrotate
        /usr/bin/pkill -USR1 mongod
        rm /var/log/mongo/mongod.log.????-??-??T??-??-??
    endscript
}

SELinux有効時にapache管理下の場所でファイルをアップロードしたときにForbidden等になってアクセスできないときの対処法

SELinuxを有効にしているwebサーバーで、 新しいファイルをアップロードすると、アクセスができなくなってしまいはまったのでメモ。

まずどんなラベルがついているかチェック。

ls -Z
-rwxrwxrwx. apache apache system_u:object_r:httpd_sys_content_t:s0 index.html
-rwxrwxrwx. apache apache unconfined_u:object_r:admin_home_t:s0 new.html

この場合、index.htmlはアクセスできていたのだが、
新しくアップロードしたnew.htmlはアクセスができなかった。
同様のラベルをnew.htmlにもつけてあげることにより解決する。

sudo chcon system_u:object_r:httpd_sys_content_t:s0 new.html
-rwxrwxrwx. apache apache system_u:object_r:httpd_sys_content_t:s0 index.html
-rwxrwxrwx. apache apache system_u:object_r:httpd_sys_content_t:s0 new.html

auditログでdeniedになっている個所をチェックするとはまりポイントがわかる

less /var/log/audit/audit.log | grep denied

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

これでapachemysqlコマンドを実行できるようになる。
ソースから入れた場合や、ダウンロードしてきた場合は注意。

MongoDBのarbiter挙動メモ

MongoDBでレプリカセットを構築したときのアービターの挙動について特徴的だったもののメモ。 (プライマリ,セカンダリ,アービターの3点冗長化状態)

環境:mongo2.4

・3台とも停止した状態で、プライマリを起動
→セカンダリとして起動してしまう。

アービターと、プライマリ、2台で起動しているとき、アービターを止める
→プライマリがセカンダリになってしまう。

アービターはプライマリ、セカンダリの昇格等の判断のみを判定していると思いきや、 レプリカセットの挙動全体を見ているようなので注意。