Changes between Version 1 and Version 2 of TracFastCgi


Ignore:
Timestamp:
May 13, 2012, 9:15:45 PM (12 years ago)
Author:
trac
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • TracFastCgi

    v1 v2  
    1 = Trac を FastCGI で使用する =
    2 
    3 バージョン 0.9 以降、 Trac は [http://www.fastcgi.com/ FastCGI] インタフェースに対応するようになりました。 [wiki:TracModPython mod_python] 同様、 Trac を常駐させるため、外部の各リクエストに対して新しいプロセスを生成する CGI インタフェースよりも処理速度が速いです。その上 `mod_python` とは異なり [http://httpd.apache.org/docs/suexec.html SuEXEC] に対応することも可能です。また、より多くの種類の Web サーバにサポートされています。
    4 
    5 == 単純な Apache の設定 ==
    6 
    7 Apache で利用可能な FastCGI モジュールは 2 種類あります: `mod_fastcgi` と
    8 `mod_fcgid` です。 これ以降に書かれている `FastCgiIpcDir` と `FastCgiConfig` ディレクティブ
    9 は `mod_fastcgi` のディレクティブです; `DefaultInitEnv` は `mod_fgcid`
    10 のディレクティブです。
    11 
    12 `mod_fastcgi` では、 Apache の設定ファイルに以下の設定を追記します。
    13 ファイル:
     1= Trac を FastCGI で使用する = #TracwithFastCGI
     2
     3[http://www.fastcgi.com/ FastCGI] インタフェースを使用すると [wiki:TracModPython mod_python] 同様に Trac を常駐させることができます。そのため、外部からのリクエストごとに新しいプロセスを生成する CGI インタフェースよりも処理速度は速くなるうえ、 mod_python では実現出来ない [http://httpd.apache.org/docs/suexec.html Apache の SuEXEC] に対応させることができます (例えば、 Web サーバとは異なる権限で起動させることができます)。また、 mod_python より多くの種類の Web サーバでサポートされています。
     4
     5'''Windows 向けの Note:''' Trac の FCGI は Windows では使用できません。 `_fcgi.py` が必要とする `Socket.fromfd` が Windows では実装されていないためです。 IIS を使用しているのであれば、 [http://trac.edgewall.org/wiki/TracOnWindowsIisAjp AJP] を使うこともできます。 (訳注: Apache でも mod_proxy_ajp 経由で ajp を使用できます。)
     6
     7== 単純な Apache の設定 == #SimpleApacheconfiguration
     8
     9Apache で利用可能な FastCGI モジュールは 2 種類あります: `mod_fastcgi` と
     10`mod_fcgid` (推奨) です。後者の方がよりメンテナンスされています。
     11
     12==== `mod_fastcgi` でのセットアップ ==== #setupwithmod_fastcgi
     13`mod_fastcgi` では `FastCgiIpcDir` と `FastCgiConfig` ディレクティブを使用して Apache の設定ファイルに設定を行います:
    1414{{{
    1515# Enable fastcgi for .fcgi files
     
    2424デフォルトの設定に問題がなければ、 `FastCgiIpcDir` の設定は必須ではありません。 `LoadModule` の行は `IfModule` グループの後になければいけないことに注意して下さい。
    2525
    26 `ScriptAlias` を設定するもしくは似たオプションが TracCgi で説明されていますが、
    27 `trac.cgi` の代わりに `trac.fcgi` を呼びます
     26`ScriptAlias` もしくは TracCgi で説明されている類似のオプションを設定しますが、
     27`trac.cgi` の代わりに `trac.fcgi` を指定してください
    2828
    2929`TRAC_ENV` を以下のように設定することができます:
     
    3232}}}
    3333
    34 もしくは複数の Trac プロジェクトを扱っているときは、このように設定します:
     34複数の Trac プロジェクトを扱っているときは、このように設定します:
    3535{{{
    3636FastCgiConfig -initial-env TRAC_ENV_PARENT_DIR=/parent/dir/of/projects
    3737}}}
    3838
    39 これらの設定は、 `mod_fcgid` では動きません。似ていますが
    40 `mod_fcgid` での部分的な解決策は以下の通りになります:
     39==== `mod_fcgid` でのセットアップ ==== #setupwithmod_fcgid
     40`ScriptAlias` を設定します。 (詳細は TracCgi を参照してください)、 ただし
     41`trac.cgi` の代わりに `trac.fcgi` を呼び出します。 Note: 最後のスラッシュを忘れずに。とても重要です。
     42{{{
     43ScriptAlias /trac /path/to/www/trac/cgi-bin/trac.fcgi/
     44}}}
     45
     46`mod_fcgid` で Trac environment を設定するには `DefaultInitEnv`
     47ディレクティブを使用します。このディレクティブは `Direcotry` や `Location`
     48コンテキストで使用できないので、複数のプロジェクトを設定する場合、
     49下に記述する Environment を設定する別の方法を試してください。
     50
    4151{{{
    4252DefaultInitEnv TRAC_ENV /path/to/env/trac/
    4353}}}
    44 しかし、これは `Directory` や `Location` コンテキストで使用することができません。
    45 よって、複数のプロジェクトに対応するのは難しくなります。
    46 
    47 これらのモジュールの両方 (同様に [http://www.lighttpd.net/ lighttpd] と CGI も) で動かすよりよい方法は、
    48 `trac.fcgi` に以下の値を設定することです。
    49 Web サーバに環境変数を設定する必要がなくなります。例:
     54
     55==== Environment を設定する別の方法 ==== #alternativeenvironmentsetup
     56Trac environment へのパスを設定するための、より適した方法は、パスを
     57`trac.fcgi` スクリプト自体に書き込むことです。これによってサーバの環境変数を
     58設定する必要がなくなり、どちらの !FastCgi モジュール (および
     59[http://www.lighttpd.net/ lighttpd] や CGI など) でも、動作するようになります:
    5060{{{
    5161import os
    5262os.environ['TRAC_ENV'] = "/path/to/projectenv"
    5363}}}
    54 or
     64または
    5565{{{
    5666import os
     
    5868}}}
    5969
    60 プロジェクトごとの `ScriptAliases` と `.fcgi` スクリプトを設定すれば、
    61 この方法を使用して複数のプロジェクトに対応することができます。
    62 `trac.fcgi` をコピーして、ファイル名を適切に変更し、上記のコードをそれぞれのスクリプトに追記します。
    63 
    64 == 単純な Lighttpd の設定 ==
     70プロジェクトごとの `ScriptAlias` と `.fcgi` スクリプトを設定すれば、
     71起動スクリプトに `TRAC_ENV` 等を設定する方法を使用して複数のプロジェクトに対応することができます。
     72
     73この [https://coderanger.net/~coderanger/httpd/fcgi_example.conf fcgid 設定例] の通り、 !ScriptAlias ディレクティブでは末尾の / も含めて設定してください:
     74{{{
     75ScriptAlias / /srv/tracsite/cgi-bin/trac.fcgi/
     76}}}
     77
     78== Cherokee の簡単な設定 == #SimpleCherokeeConfiguration
     79
     80Cherokee 側の設定はとても簡単です。 Trac を SCGI プロセスとして起動できるかどうかのみ知っている必要があります。
     81Cherokee が起動していないときにはいつでも、 Cherokee が Trac を切り離せるようにすることによって、 Trac を手動で起動することも、いっそのこと自動的に起動することもできます。
     82最初に、ローカルのインタプリタである cherokee-admin で information source を設定します。
     83
     84{{{
     85Host:
     86localhost:4433
     87
     88Interpreter:
     89/usr/bin/tracd —single-env —daemonize —protocol=scgi —hostname=localhost —port=4433 /path/to/project/
     90}}}
     91
     92もしそのポート番号に到達できなければ、インタプリタコマンドは起動されたことになります。information source の定義において、 ''ローカルインタプリタ'' の代わりに、 ''リモートホスト'' を ''information source'' として使用するならば、 spawner を手動で起動する必要があることを覚えておいてください。
     93
     94そして、 Trac にアクセスするために SCGI ハンドラによって管理される新しいルールを作成しなければなりません。このルールは例えば、 trac.example.net という新しい仮想サーバ内で作成し、 2 つのルールのみを必要とします。 '''デフォルト''' ルールは以前に作成された information source に関する SCGI ハンドラで使用されます。
     952 つ目のルールは Trac のインタフェースを正しく表示するために必要ないくつかの静的ファイルを扱うために設定します。ルールを ''/chrome/common'' の ''ディレクトリルール'' として作成し、 ''静的ファイル'' のハンドラを適切なファイルをポイントする ''ドキュメントルート'' と共に設定するだけです: ''/usr/share/trac/htdocs/''
     96
     97Note:\\
     98tracd プロセスが起動しない場合や cherokee が 503 エラーページを表示する場合、 [http://trac.saddi.com/flup python-flup] がインストールされていない可能性があります。\\
     99Python-flup は SCGI の能力を trac に与える従属関係にあります。 debian 基本システムからインストールできます:
     100{{{
     101sudo apt-get install python-flup
     102}}}
     103
     104== Lighttpd の簡単な設定 == #SimpleLighttpdConfiguration
    65105
    66106FastCGI フロントエンドは最初 [http://www.lighttpd.net/ lighttpd] のような、 Apache 以外の Web サーバのために開発されました。
     
    69109他の Web サーバに比べて CPU や、メモリの占有率がとても少ないです。
    70110
    71 `trac.fcgi` を lighttpd で使用するためには、 lighttpd.conf に以下の行を追加します:
    72 {{{
     111`trac.fcgi`(0.11 以前) / fcgi_frontend.py (0.11) を lighttpd で使用するためには、 lighttpd.conf に以下の行を追加します:
     112{{{
     113#var.fcgi_binary="/usr/bin/python /path/to/fcgi_frontend.py" # 0.11 if installed with easy_setup, it is inside the egg directory
     114var.fcgi_binary="/path/to/cgi-bin/trac.fcgi" # 0.10 name of prior fcgi executable
    73115fastcgi.server = ("/trac" =>
     116   
    74117                   ("trac" =>
    75118                     ("socket" => "/tmp/trac-fastcgi.sock",
    76                       "bin-path" => "/path/to/cgi-bin/trac.fcgi",
     119                      "bin-path" => fcgi_binary,
    77120                      "check-local" => "disable",
    78121                      "bin-environment" =>
     
    83126}}}
    84127
    85 動かしたい Trac のインスタンス毎に `fastcgi.server` のエントリを追加する必要があります。別の方法として、上記の `TRAC_ENV` の代わりに `TRAC_ENV_PARENT_DIR` を使用でき、
     128動かしたい Trac のインスタンス毎に `fastcgi.server` のエントリを追加する必要があります。別の方法として、上記の `TRAC_ENV` の代わりに `TRAC_ENV_PARENT_DIR` を使用でき、
    86129`lighttpd.conf` に設定する代わりに `trac.fcgi` ファイルに
    87130`bin-environment` (上記の Apache の設定 に書かれています) の2つのうちのどちらかを設定します。
     131
     132Note: lighttpd には fastcgi.server の uri が例えばこの例では、 '/trac' とするところを '/' としてしまう 'SCRIPT_NAME' と 'PATH_INFO' に関するバグがあります。詳細については、 [http://trac.edgewall.org/ticket/2418 本家チケット 2418] を参照して下さい。 このバグは lighttpd 1.4.23 以降で修正されています。 fastcgi.server のパラメータとして、 `"fix-root-scriptname" => "enable"` を追加する必要があるでしょう。
    88133
    89134lighttpd で2つのプロジェクトを動かすには、 `lighttpd.conf` に以下の設定を追加します:
     
    92137                   ("first" =>
    93138                    ("socket" => "/tmp/trac-fastcgi-first.sock",
    94                      "bin-path" => "/path/to/cgi-bin/trac.fcgi",
     139                     "bin-path" => fcgi_binary,
    95140                     "check-local" => "disable",
    96141                     "bin-environment" =>
     
    101146                    ("second" =>
    102147                    ("socket" => "/tmp/trac-fastcgi-second.sock",
    103                      "bin-path" => "/path/to/cgi-bin/trac.fcgi",
     148                     "bin-path" => fcgi_binary,
    104149                     "check-local" => "disable",
    105150                     "bin-environment" =>
     
    109154                )
    110155}}}
    111 各フィールドの値が異なることに注意して下さい。もし `.fcgi` スクリプトに
    112 環境変数を設定するほうが好ましい場合は、 `trac.fcgi` をコピー / 名前変更をして下さい。例として、
    113 `first.fcgi` と `second.fcgi` が上記の設定では参照されるようにします
    114 上記の設定で、両方のプロジェクトが 同じ `trac.fcgi` スクリプトで起動していても、
     156Note: 各フィールドの値が異なることに注意して下さい。もし、
     157`.fcgi` スクリプト内の環境変数を設定する方が好ましいならば、 `trac.fcgi` スクリプトを
     158例えば、 `first.fcgi` や `second.fcgi` というようにコピー / リネームして、上記設定の中でこれらのスクリプトを参照するようにしてください
     159両方のプロジェクトが同じ `trac.fcgi` スクリプトから起動しているとしても、
    115160異なるプロセスになることに注意して下さい。
    116161{{{
    117 #!html
    118 <p style="background: #fdc; border: 2px solid #d00; font-style: italic; padding: 0 .5em; margin: 1em 0;">
    119 <strong>Note from c00i90wn:</strong> server.modules をロードする順番はとても重要です。もし、 mod_auth が mod_fastcgi より <strong> 先に </strong> ロードされる設定になっていない場合、サーバはユーザの認証に失敗します。
    120 </p>
     162#!div class=important
     163'''Note''': server.modules をロードする順番はとても重要です。もし、 mod_auth が mod_fastcgi より '''先に''' mod_auth がロードされない設定になっていない場合、サーバはユーザ認証に失敗します。
    121164}}}
    122165認証のために lighttpd.conf の 'server.modules' 中で mod_auth を有効にして、 auth.backend と認証方法を選択して下さい:
     
    158201
    159202}}}
    160 パスワードファイルがない場合、 lighttpd (確認したバージョンは 1.4.3) が停止するので注意して下さい。
    161 
    162 バージョン 1.3.16 以前では lighttpd は 'valid-user' をサポートしていないので注意してください。
     203Note: パスワードファイルがない場合、 lighttpd (確認したバージョンは 1.4.3) が停止するので注意して下さい。
     204
     205Note: バージョン 1.3.16 以前では lighttpd は 'valid-user' をサポートしていないので注意してください。
    163206
    164207条件付の設定は静的リソースをマッピングするときに便利です。例として FastCGI を経由せずに直接イメージファイルや CSS を参照するときなどです。:
     
    177220                   ("trac" =>
    178221                     ("socket" => "/tmp/trac-fastcgi.sock",
    179                       "bin-path" => "/path/to/cgi-bin/trac.fcgi",
     222                      "bin-path" => fcgi_binary,
    180223                      "check-local" => "disable",
    181224                      "bin-environment" =>
     
    196239                        (
    197240                          "socket" => "/tmp/trac.sock",
    198                           "bin-path" => "/path/to/cgi-bin/trac.fcgi",
     241                          "bin-path" => fcgi_binary,
    199242                          "check-local" => "disable",
    200243                          "bin-environment" =>
     
    222265                   ("trac" =>
    223266                     ("socket" => "/tmp/trac-fastcgi.sock",
    224                       "bin-path" => "/path/to/cgi-bin/trac.fcgi",
     267                      "bin-path" => fcgi_binary,
    225268                      "check-local" => "disable",
    226269                      "bin-environment" =>
     
    233276使用言語指定の詳細については [http://trac.lighttpd.net/trac/wiki/TracFaq TracFaq] の 2.13 の質問を参照して下さい。
    234277
    235 その他重要な情報、例えば、 [http://trac.lighttpd.net/trac/wiki/TracInstall lighttpd の TracInstall] や、 [wiki:TracCgi#静的なリソースをマッピングする TracCgi] などは fast-cgi 固有ではありませんが、インストールの詳細をつかむのに有用でしょう。
     278その他重要な情報、例えば、 [http://trac.lighttpd.net/trac/wiki/TracInstall lighttpd の TracInstall] や、 [wiki:TracCgi#MappingStaticResources TracCgi] などは fast-cgi 固有ではありませんが、インストールの詳細をつかむのに有用でしょう。
    236279
    237280trac-0.9 を使用している場合、[http://lists.edgewall.com/archive/trac/2005-November/005311.html 些細なバグ] について読んでください。
     
    241284制限された権限で lighttpd を起動するにあたって気をつけること:
    242285
    243   もし、 trac.fcgi が lighttpd の設定で __server.username = "www-data"__ や __server.groupname = "www-data"__ を設定しても起動せずどうしようもないときは、 `bin-environment` セクションの `PYTHON_EGG_CACHE` を `www-data` のホームディレクトリまたは `www-data` アカウントで書き込みが可能なディレクトリに設定して下さい。 (訳注: debian 系 Linux に限定した話だと思われます。 `www-data` は lighttpd を起動するユーザに適宜読み替えてください。)
    244 
    245 
    246 == 簡単な [http://trac.edgewall.org/wiki/LiteSpeed LiteSpeeed] の設定 ==
     286  もし、 trac.fcgi が lighttpd の設定で `server.username = "www-data"` や `server.groupname = "www-data"` を設定しても起動せずどうしようもないときは、 `bin-environment` セクションの `PYTHON_EGG_CACHE` を `www-data` のホームディレクトリまたは `www-data` アカウントで書き込みが可能なディレクトリに設定して下さい。 (訳注: debian 系 Linux に限定した話だと思われます。 `www-data` は lighttpd を起動するユーザに適宜読み替えてください。)
     287
     288
     289== !LiteSpeed の簡単な設定 == #SimpleLighttpdConfiguration
    247290
    248291FastCGI フロントエンドは最初 [http://www.litespeedtech.com/ LiteSpeed] のような、 Apache 以外の Web サーバのために開発されました。
    249292
    250 [http://trac.edgewall.org/wiki/LiteSpeed LiteSpeed] Web サーバはイベント駆動、非同期型であり、Apache に代わるものとしてセキュアで拡張可能になるようにゼロからデザインされています。そして、最低限のリソースで操作できます。 [http://trac.edgewall.org/wiki/LiteSpeed LiteSpeed] は Apache の設定ファイルから直接操作でき、ビジネスに不可欠な環境をターゲットにしています。
    251 
    252 セットアップ
    253 
    254 1) 最初に Trac プロジェクトをインストールして動作することを確認して下さい。最初のインストールでは、 "tracd" を使用します。
    255 
    256 2) このセットアップでは仮想ホストを作成します。以下、この仮想ホストのことを !TracVhost と呼びます。このチュートリアルで、先ほど作ったプロジェクトが以下の URL 経由でアクセスできると仮定します:
     293!LiteSpeed Web サーバはイベント駆動、非同期型であり、 Apache に代わるものとしてセキュアで拡張可能になるようにゼロからデザインされています。そして、最低限のリソースで操作できます。 !LiteSpeed は Apache の設定ファイルから直接操作でき、ビジネスに不可欠な環境をターゲットにしています。
     294
     295=== セットアップ ===
     296
     297 1. 最初に Trac プロジェクトをインストールして動作することを確認して下さい。最初のインストールでは、 "tracd" を使用します。
     298
     299 2. このセットアップでは仮想ホストを作成します。以下、この仮想ホストのことを !TracVhost と呼びます。このチュートリアルで、先ほど作ったプロジェクトが以下の URL 経由でアクセスできると仮定します:
    257300
    258301{{{
     
    260303}}}
    261304
    262 3) "!TracVhost → External AApps" タブへ移動し、新しい "External Application" を作成します。
     305 3. "!TracVhost → External Apps" タブへ移動し、新しい "External Application" を作成します。
    263306
    264307{{{
     
    278321}}}
    279322
    280 4) (非必須) "!TracVhost → Security" タブへ移動し、新しいセキュリティ "Realm" を作成することができます。
     323 4. (非必須) htpasswd ベースの認証を使用するならば、 "!TracVhost → Security" タブへ移動し、新しいセキュリティ "Realm" を作成することができます。
    281324
    282325{{{
     
    288331もし、 htpasswd ファイルを持っていない、もしくは作り方を知らない場合は、 http://sherylcanter.com/encrypt.php にアクセスし、ユーザ名:パスワード の一対を生成して下さい。
    289332
    290 5) "!PythonVhost → Contexts" へ移動し、新しい "FCGI Context" を作成します。
     333 5. "!PythonVhost → Contexts" へ移動し、新しい "FCGI Context" を作成します。
    291334
    292335{{{
    293336URI: /trac/                              <--- URI path to bind to python fcgi app we created   
    294337Fast CGI App: [VHost Level] MyTractFCGI  <--- select the trac fcgi extapp we just created
    295 Realm: TracUserDB                        <--- only if (4) is set. select ream created in (4)
    296 }}}
    297 
    298 6) /fullpathto/mytracproject/conf/trac.ini を修正します。
     338Realm: TracUserDB                        <--- only if (4) is set. select realm created in (4)
     339}}}
     340
     341 6. /fullpathto/mytracproject/conf/trac.ini を修正します。
    299342
    300343{{{
     
    305348}}}
    306349
    307 7) [http://trac.edgewall.org/wiki/LiteSpeed LiteSpeed] を "lswsctrl restart" で再起動し、新しい Trac プロジェクトに以下の URL でアクセスします:
     350 7. !LiteSpeed を "lswsctrl restart" で再起動し、新しい Trac プロジェクトに以下の URL でアクセスします:
    308351
    309352{{{
     
    311354}}}
    312355
     356== Nginx 簡単な設定 ==
     357
     358 1. Nginx 設定のスニペット - 0.6.32 で動作することを確認しました。
     359{{{
     360    server {
     361        listen       10.9.8.7:443;
     362        server_name  trac.example;
     363
     364        ssl                  on;
     365        ssl_certificate      /etc/ssl/trac.example.crt;
     366        ssl_certificate_key  /etc/ssl/trac.example.key;
     367
     368        ssl_session_timeout  5m;
     369
     370        ssl_protocols  SSLv2 SSLv3 TLSv1;
     371        ssl_ciphers  ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
     372        ssl_prefer_server_ciphers   on;
     373
     374        # (Or ``^/some/prefix/(.*)``.
     375        if ($uri ~ ^/(.*)) {
     376             set $path_info /$1;
     377        }
     378
     379        # You can copy this whole location to ``location [/some/prefix]/login``
     380        # and remove the auth entries below if you want Trac to enforce
     381        # authorization where appropriate instead of needing to authenticate
     382        # for accessing the whole site.
     383        # (Or ``location /some/prefix``.)
     384        location / {
     385            auth_basic            "trac realm";
     386            auth_basic_user_file /home/trac/htpasswd;
     387
     388            # socket address
     389            fastcgi_pass   unix:/home/trac/run/instance.sock;
     390
     391            # python - wsgi specific
     392            fastcgi_param HTTPS on;
     393
     394            ## WSGI REQUIRED VARIABLES
     395            # WSGI application name - trac instance prefix.
     396            # (Or ``fastcgi_param  SCRIPT_NAME  /some/prefix``.)
     397            fastcgi_param  SCRIPT_NAME        "";
     398            fastcgi_param  PATH_INFO          $path_info;
     399
     400            ## WSGI NEEDED VARIABLES - trac warns about them
     401            fastcgi_param  REQUEST_METHOD     $request_method;
     402            fastcgi_param  SERVER_NAME        $server_name;
     403            fastcgi_param  SERVER_PORT        $server_port;
     404            fastcgi_param  SERVER_PROTOCOL    $server_protocol;
     405            fastcgi_param  QUERY_STRING     $query_string;
     406
     407            # for authentication to work
     408            fastcgi_param  AUTH_USER          $remote_user;
     409            fastcgi_param  REMOTE_USER        $remote_user;
     410        }
     411    }
     412}}}
     413
     414 2. trac.fcgi の変更:
     415
     416{{{
     417#!/usr/bin/env python
     418import os
     419sockaddr = '/home/trac/run/instance.sock'
     420os.environ['TRAC_ENV'] = '/home/trac/instance'
     421
     422try:
     423     from trac.web.main import dispatch_request
     424     import trac.web._fcgi
     425
     426     fcgiserv = trac.web._fcgi.WSGIServer(dispatch_request,
     427          bindAddress = sockaddr, umask = 7)
     428     fcgiserv.run()
     429
     430except SystemExit:
     431    raise
     432except Exception, e:
     433    print 'Content-Type: text/plain\r\n\r\n',
     434    print 'Oops...'
     435    print
     436    print 'Trac detected an internal error:'
     437    print
     438    print e
     439    print
     440    import traceback
     441    import StringIO
     442    tb = StringIO.StringIO()
     443    traceback.print_exc(file=tb)
     444    print tb.getvalue()
     445
     446}}}
     447
     448 3. nginx をリロードし、 trac.fcgi をこのように起動します:
     449
     450{{{
     451trac@trac.example ~ $ ./trac-standalone-fcgi.py
     452}}}
     453
     454上記設定は以下の条件だと仮定します:
     455 * trac のインスタンスを実行するためのユーザ名を 'trac' とします。ホームディレクトリに trac Environment をおきます。
     456 * Trac environment は `/home/trac/instance` に配置します。
     457 * `/home/trac/htpasswd` に認証情報が含まれています。
     458 * `/home/trac/run` は nginx を起動しているグループが所有しています。
     459  * Linux を使用しているならば、 `/home/trac/run` に (`chmod g+s run`) を設定します。
     460  * [http://trac.edgewall.org/ticket/7239 本家チケット 7239] のパッチを適用し、ソケットファイルのパーミッションをそのつど修正しなければいけません。
     461
     462残念ですが、 nginx は fastcgi_pass ディレクティブ内の変数展開をサポートしていません。
     463したがって、 1 つのサーバーブロックから複数の trac インスタンスを起動することができません。
     464
     465セキュリティ面で不安があるならば、 各 Trac インスタンスを別々のユーザで起動してください。
     466
     467Trac を FCGI の外部アプリケーションとして起動するもう一つの方法は、[http://trac.edgewall.org/ticket/6224 本家チケット 6224] を参照して下さい。
     468
    313469----
    314 See also: TracCgi, TracModPython, TracInstall, TracGuide
     470See also:  TracGuide, TracInstall, [wiki:TracModWSGI ModWSGI], [wiki:TracCgi CGI], [wiki:TracModPython ModPython], [http://trac.edgewall.org/wiki/TracNginxRecipe TracNginxRecipe]