Apache」タグアーカイブ

Apache+PassengerでRailsを動かす

passengerインストール(gem)

sudo gem install passenger

sudo /usr/local/bin/passenger-install-apache2-module
を実行する。(該当ファイルが見つからない場合。sudo find / -name “*passenger*” -type f)

最後に必要な追加が表示される。
sudo apt-get install libcurl4-openssl-dev
sudo apt-get install libcurl4-gnutls-dev
sudo apt-get install apache2-dev
sudo apt-get install libapr1-dev
sudo apt-get install libaprutil1-dev

表示されたとおり不足の機能をインストールして、もう一回以下を実行。
sudo /usr/local/bin/passenger-install-apache2-module

All goodと表示されるまで繰り返せばOKのハズだけど、今回は、
fatal error: openssl/pem.h: そのようなファイ ルやディレクトリはありません
と表示されてしまう。

必要な追加では表示されないが、opensshでエラーなので、
以下をインストールしてみる。
sudo apt-get install libssl-dev

インストールが無事終了すると、
LoadModule passenger_module /var/lib/gems/2.3.0/gems/passenger-5.1.2/buildout/apache2/mod_passenger.so
<IfModule mod_passenger.c>
PassengerRoot /var/lib/gems/2.3.0/gems/passenger-5.1.2
PassengerDefaultRuby /usr/bin/ruby2.3
</IfModule>
のように表示されるので、apacheの設定に追加する。

基本設定

もともとのDocumentRootは
/home/okamura/www
だったので、そこで
rails new test_app
を実行して新しいrailsのフォルダを作成してみた。

実体としては
/home/okamura/www/test_app
がrailsのプロジェクトフォルダとなる。

VirtualHostの項目で
DocumentRoot /home/okamura/www/test_app/public
として、開発なので以下を追加しておく。
RailsEnv development

これで問題なく動いた。

サブディレクトリで複数動かす場合

railsのpublicの実体が
/home/okamura/www/test_app/public
apacheのconfでのdocumentrootが
/home/okamura/www/test_app/public
とするのが基本。

サブディレクトリで複数のアプリを動かしたい場合。
apacheのconfでdocumentrootを
/home/okamura/www
にする。

RailsBaseURI /app1
RailsBaseURI /app2
を追加する。

railsのpublicの実体のシンボリックを作る。
sudo ln -s /home/okamura/ruby/asagao/public /home/okamura/www/app1
sudo ln -s /home/okamura/ruby/pico_planner/public /home/okamura/www/app2

apacheのconfはこんな感じ。
DocumentRoot /home/okamura/www
RailsBaseURI /app1
RailsBaseURI /app2
RailsEnv development

ApacheのCGIでRubyを呼び出す。

Apacheの設定

sudo find / -name 000-default.conf
で検索かけると2箇所ある。

/etc/apache2/sites-enabled/000-default.conf
/etc/apache2/sites-available/000-default.conf

設定を読み込まれているのは、enabledで、availableの
設定ファイルへシンボリックしている。

mods-enabledの中でシンボリックしているのは、
cgid.conf
cgid.load
だけ。

mods-availableの中にcgi関連は、
authnz_fcgi.load
cgi.load
cgid.conf
cgid.load
proxy_fcgi.load
proxy_scgi.load
だけ。

sites-availableを以下のように変更。
<Directory /home/okamura/www/>
Require all granted
AllowOverride All
Options +ExecCGI
AddHandler cgi-script .rb
</Directory>

CGI側(Ruby)

rubyのファイルに以下のように記述し、
chmod +x で実行権限をつければOK。

エラーの場合、
改行コードが違っていてハマッた。Winで作ってLinuxに転送の場合注意。

GETを受取たい場合

送信側(Form)

CGI(Ruby)

Apacheの設定、htaccessなど

Basic認証

.htaccessファイルを作成し、以下を記述。

AuthUserFile /home/okamura/.pwd

AuthName “please enter”

AuthType Basic

Require valid-user

.pwdの名称はなんでもいいが指定はフルパスにする。

一般的には.htpasswdとする。

htpasswd -c /home/okamura/.pwd taro

New password:xxx

Re-type new password:xxx

-cオプションがなくhtpasswdコマンドだけだと、追加、変更。-dオプションを付けるとと削除となる。

apache2ctl -M

有効なモジュールを確認できる。

sudo a2enmod rewrite

rewriteを有効化する。

/etc/apache2/apache2.conf

で、該当するDirectoryにAllowOverride allを追加する。

sudo /etc/init.d/apache2 restart

転送

301は恒久的(元のキャッシュが消える)な転送302(元のキャッシュが残る)は一時的な転送。

外部サイトに転送している設定。Rに数字をいれないと302転送。

RewriteEngine On

RewriteRule ^ http://start-affiliate-life.com [R,L]

メインディレクトリをサブに飛ばす設定。

RewriteEngine On

RewriteCond %{REQUEST_URI} !/w

RewriteRule ^(.*)$ /w/ [R,L]

RewriteCond が true の時 RewriteRuleが実行される。

RewriteCond %変数名(テスト文字列) 条件パターン(正規表現) [フラグ]。

PHP関連

変数登録の優先順位

variables_order = “EGPCS”

外部ホストへのアクセス

allow_url_fopen = off

エラーレポート

error_reporting = E_ALL & ~E_NOTICE & E_STRICT

E_NOTICEとE_STRICT以外は全てという意味 ~ は否定の意味

画面へエラーを表示

display_errors = off

エラーのログを出力(Windowsの場合はイベントログにエラーがいくらしい)

log_errors = On

error_log = file name

セーフモード

safe_mode_gid = On

セーフモードはファイルオープンはスクリプトと同じ所有者のファイルのみになる。

重要なのはセーフモードを使うときはスクリプトの所有者を一般ユーザーにしておくこと。

セーフモードはdlや()やshell_execが使えない。

exec,system,passthru,popenはsafe_mode_exec_dirで指定したディレクトリに制限される。

open_base_dir ファイル操作できるフォルダを限定。

disable_functions 使える関数を制限。