カテゴリー
SugiBlog ホームページ制作・システム開発|大阪

.htaccessでRewriteモジュールの設定

ApacheのRewriteモジュール(mod_rewrite.c)を使用してリダイレクト(転送)させることができます。
設定はApacheの設定ファイルに記述するか、.htaccessに記述します。

以下は例として、HTTP通信をHTTPS通信に変換しています。

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{SERVER_PORT} 80
    RewriteRule ^(.*)$ https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]
</IfModule>

基本機能について

RewriteEngine On|Off

Rewrite機能のON/OFFを切り替えます。

RewriteCond

リダイレクトする条件を定義します。

RewriteRule [正規表現パターン] [置換パターン] [オプション]

URLの書き換え、転送先を指定します。
複数のオプションを指定する場合はカンマ区切り


オプション

[L] Last(Last rule)
Rewrite機能によるURL変換を終了します
[R=301|302] レスポンスを返しクライアントをリダイレクトする
301:恒久的転送(リダイレクト)
302:一時的な転送(リダイレクト)
0
2,139 views

OpenSSL バージョンアップ TLS1.1以降に対応

OpenSSL0.9.8zgではSSL2、3、TLS1.0までしか対応していません。
TLS1.1、1.2に対応させるため、OpenSSL1.0.1uにバージョンアップしました。

まずはソースを公式サイトからダウンロードします。
https://www.openssl.org/source/old/1.0.1/

ソースを/usr/local/srcに保存します。
/usr/local/srcに移動して該当ファイルを解凍します。

cd /usr/local/src
tar -xvzf openssl-1.0.1u.tar.gz

解凍したディレクトリに移動し、コンパイルしてインストールします。

cd openssl-1.0.1u
./config
make
make install

デフォルトは「/usr/local/ssl」にインストールされます。

バージョンを確認してみましょう。

/usr/local/ssl/openssl version

バージョン情報が出力されますので、バージョンアップされていればOKです。

TLS1.1、1.2が使えるかどうか確認してみましょう。

/usr/local/ssl/openssl s_client -connect example.jp:443 -tls1_1 < dev/null
/usr/local/ssl/openssl s_client -connect example.jp:443 -tls1_2 < dev/null

通信可能かどうかが表示されます。
もしも使えない場合はunknown optionと言われます。
続きを読む…»

0
14,064 views

apache URL転送

ホームページの転送はHTMLのmetaタグでも可能ですが、包括的に転送したい場合には不向きです。
そこでapacheの設定で転送するように設定することができます。

apache設定ファイルの「httpd-vhosts.conf」を編集します。

例)http://www.example.jp/というリクエスト要求に対してhttp://www.example.com/に転送します。

<VirtualHost 192.168.0.100>
    ServerName www.example.jp
    Redirect / http://www.example.com/
</VirtualHost>

続きを読む…»

0
1,424 views

apache ログのカスタマイズ

apacheでは、デフォルトでアクセスログなどを記録してくれますが
そこに例えばリファラー情報などは含まれません。

apacheの設定ファイルを変更すれば、記録する情報を任意にカスタマイズすることができます。

カスタムログの作成

ここでは例として、リファラー情報とリクエストURLを記録するカスタムログを作成してみます。

httpd.confを開き、<IfModule log_config_module>というディレクティブを探します。

※IfModuleディレクティブは消しておいたほうがいいという説があるようですが、
ここではそれについては割愛します。

デフォルトでは以下のようになっているはずです。(違う場合は環境によると思ってください)

<IfModule log_config_module>
    #
    # The following directives define some format nicknames for use with
    # a CustomLog directive (see below).
    #
    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>
      # You need to enable mod_logio.c to use %I and %O
      LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
    </IfModule>

    #
    # The location and format of the access logfile (Common Logfile Format).
    # If you do not define any access logfiles within a <VirtualHost>
    # container, they will be logged here.  Contrariwise, if you *do*
    # define per-<VirtualHost> access logfiles, transactions will be
    # logged therein and *not* in this file.
    #
    CustomLog logs/access_log common

    #
    # If you prefer a logfile with access, agent, and referer information
    # (Combined Logfile Format) you can use the following directive.
    #
    #CustomLog logs/access_log combined
</IfModule>

※combinedという設定が既にリファラーを記録するフォーマットになっていますので、
設定するのが面倒な場合はこちらを使用してください。
続きを読む…»

0
2,508 views

SSLでパスフレーズの入力を省略する

apacheにSSLを導入した場合、apacheの起動時にパスフレーズの入力を求められます。
サーバーの再起動時や、プログラム等でのapacheの自動起動でパスフレーズの入力で止まったまま起動しない、という問題が発生します。

[Apache+SSL環境の構築]の最後でも紹介したように、秘密鍵を復号化しておけばパスフレーズの入力を省略できますが、セキュリティ上良くありません。
そこで秘密鍵を復号化することなく、パスフレーズの入力を省略する方法をご紹介します。

apacheのhttpd.confの<ifModule ssl_module>ディレクティブを修正します。

<ifModule ssl_module>
...
    SSLPassPhraseDialog exec:{プログラムの絶対パス}
</ifModule>

通常、SSLPassPhraseDialogの記述はないかと思いますが、
デフォルトはbuiltinとなっており、対話形式でパスフレーズを入力する設定になっています。
続きを読む…»

0
1,861 views

Apache+SSL環境の構築

Googleが常時SSL接続になり、SEOでもそれが加味されるようになってきました。

また、Google検索からの流入を解析するためにも、自身側のSSL化が必要になってきます。
というのも、HTTPSからHTTPではリファラーが取得できないのです。
自身のサーバーをHTTPSにすればHTTPSからのリファラーを取得することができます。
HTTPSならHTTPからのリファラーも取得することができます。

それに当たって、今回はopensslの導入部分を解説させていただきます。

【バージョンについて】
apache2.2.31
openssl-0.9.8zg
※opensslのインストールディレクトリは/usr/local/sslとします。

【鍵のペア作成と証明書の作成】
SSL通信を利用するには次の3つが必要です。
1.秘密鍵
2.公開鍵+証明書申請情報
3.デジタル証明書

WEBサーバーの秘密鍵の作成

opensslのディレクトリに移動します。

cd /usr/local/ssl/private

秘密鍵作成のための疑似乱数を生成します。
例としてmd5ダイジェスト値を疑似乱数として使用します。

../bin/openssl md5 * > rand.dat

秘密鍵を作成します。

../bin/openssl genrsa -rand rand.dat -des3 1024 > server.key

コマンドを実行すると秘密鍵のパスフレーズを求められますので、
任意のパスフレーズを入力してください。
続きを読む…»

0
1,212 views

PHP メモリーエラー

PHPでファイルを扱う中で、以下のようなエラーが発生することがあります。

Fatal error: Allowed memory size of xxx bytes exhausted (tried to allocate xxx bytes) in ...

ファイルの容量が大き過ぎて、PHPに割り当てられているメモリーの範囲を超えてしまっているのです。

php.iniに以下のような行がありますので、この値を変更してあげます。
デフォルトは8Mです。

memory_limit = 8M   ; Maximum amount of memory a script may consume (8MB)

おすすめはしませんが、-1とすると上限なしに設定できるようです。
変更したらapacheを再起動させてください。

php.iniが触れない場合や、基本的な上限は変えたくないときは一時的に変更します。

init_set("memory_limit", "16M");

もしくは.htaccessでも可能です。

php_value memory_limit 16M

以下の記事も参考にしてください
[ファイルアップロードの最大サイズを変更]

0
1,078 views

ファイルアップロードの最大サイズを変更

フォームよりアップロードできるファイルの最大容量を変更したいとき、
php.iniで以下の設定を変更します。

1つのファイルアップロードに許可される最大サイズ
デフォルト:2M

upload_max_filesize = 2M

POST送信できる最大サイズ
デフォルト:8M

post_max_size = 8M

変更した後はapacheを再起動しましょう。


2017.10.10 追記

.htaccessファイルで設定することも可能です。

メモリ使用量の制限
デフォルトは現在128M

php_value memory_limit 128M

タイムアウト秒数
デフォルト:20
※「0」にすると無制限

php_value max_execution_time 0

1回の送信で送れるファイルの個数
※こちらについてはphp.iniでないと設定できません。

max_file_uploads = 150
0
800 views

apache 起動スクリプト

#!/bin/sh
# httpd: /usr/local/apache2
. /etc/rc.d/init.d/functions

[ -f /usr/local/apache2/bin/apachectl ] || exit 0

case "$1" in
	start)

		# Start daemons.

		/usr/local/apache2/bin/apachectl start

		if [ $? = 0 ] ; then
			echo "httpd starting:" `echo_success`
		else
			echo "httpd starting:" `echo_failure`
		fi

		;;

	stop)

		# Stop daemons.

		/usr/local/apache2/bin/apachectl stop

		if [ $? = 0 ] ; then
			echo "stopping httpd:" `echo_success`
		else
			echo "stopping httpd:" `echo_failure`
		fi

		;;

	restart)

		$0 stop
		$0 start
		;;

	configtest)

		#httpd.conf test
		/usr/local/apache2/bin/apachectl configtest
		;;

	*)

		echo "Usage: `basename $0` {start|stop|restart}" >&2
		exit 64
		;;
esac

exit 0
0
1,989 views

PHPインストール

PHPのインストール時に使用できるシェルスクリプトです。
Apache1.X系とApache2.x系の2種類作成したもののご紹介です。

#!/bin/sh

#=======================================
# php configure script
# php version 5
# for apache version 1
#=======================================

ARGV=$@

if [ -e $ARGV ] ; then

	echo "Please enter the option!"
	echo "[Options]:"
	echo "test - 設定されているコンフィグオプションを表示します。"
	echo "exec - php5をビルドします。"

elif [ "$ARGV" = "test" ] ; then

	echo "./configure \\"
	echo "--with-apxs=/usr/local/apache/bin/apxs \\"
	echo "--enable-mbstring \\"
	echo "--enable-mbstr-enc-trans \\"
	echo "--enable-mbregex \\"
	echo "--enable-trans-sid \\"
	echo "--with-mysql=/usr/bin \\"
	echo "--with-config-file-path=/usr/local/lib"

elif [ "$ARGV" = "exec" ] ; then

	./configure \
	--with-apxs=/usr/local/apache/bin/apxs \
	--enable-mbstring \
	--enable-mbstr-enc-trans \
	--enable-mbregex \
	--enable-trans-sid \
	--with-mysql=/usr/bin \
	--with-config-file-path=/usr/local/lib

	ERROR=$?
	if [ "$ERROR" = "0" ] ; then
		echo "ビルドが終了しました。"
	fi

else

	echo "error: unknown option!"
	echo "[Options]:"
	echo "test - 設定されているコンフィグオプションを表示します。"
	echo "exec - php5をビルドします。"

fi

続きを読む…»

0
1,531 views