2017-11-01 11 views
2

domain.com/domain.com/site2を指す同じNginxサーバに2つのCodeIngniterベースのアプリケーションを設定するための特定の要件があります。Nginx、FastCGIの2つのディレクトリに2つのCodeignterアプリケーションを設定する方法

これまでのところ、私は運のない構成のさまざまな組み合わせを試みました。ほとんどの場合、404エラーが出ます。

次は最新の設定ファイルです。

server { 
     listen  80; 
     server_name domain.com www.domain.com; 
     root /var/www/domain.com/; 

     location/{ 
      root /var/www/domain.com/site1/public/; 
      index index.html index.php 
      access_log /var/www/domain.com/site1/logs/access.log; 
      error_log /var/www/domain.com/site1/logs/errors.log; 
      location ~ \.php$ { 
       fastcgi_split_path_info ^(.+\.php)(/.+)$; 
       fastcgi_pass 127.0.0.1:9000; 
       fastcgi_param SCRIPT_FILENAME /var/www/domain.com/main/public$fastcgi_script_name; 
       fastcgi_param PATH_INFO  $fastcgi_path_info; 
      } 
     } 

     location /site2{ 
      root /var/www/domain.com/site2/public/; 
      index index.html index.php; 
      access_log /var/www/domain.com/site2/logs/access.log; 
      error_log /var/www/domain.com/site2/logs/errors.log; 
      location ~ \.php$ { 
       include fastcgi_params; 
       fastcgi_pass 127.0.0.1:9000; 
       fastcgi_param SCRIPT_FILENAME 
       $document_root$fastcgi_script_name; 
      } 
     } 
    } 

私は、ドメイン部分なしrootの代わりにaliasを使用していました。まだ運がありません。

ただし、ロケーションブロック内にaliastry_files $uri $uri/ /site2/site2/public/index.php?$query_stringを使用すると、css/jsなどのアセットなしでウェブサイトが読み込まれます。

私の設定が間違っていることを教えてください。

答えて

1

aliasfastcgiを使用する場合は、SCRIPT_FILENAMEの正しい値を計算するために$request_filenameを使用する必要があります。

location値とalias値が両方とも正しい置換を達成するために/または/でもないエンドで終わらなければならないのいずれか。

location /site2 { 
    alias /var/www/domain.com/site2/public; 
    index index.html index.php; 
    access_log /var/www/domain.com/site2/logs/access.log; 
    error_log /var/www/domain.com/site2/logs/errors.log; 

    if (!-e $request_filename) { rewrite^/site2/index.php last; } 

    location ~ \.php$ { 
     if (!-f $request_filename) { return 404; } 

     include fastcgi_params; 
     fastcgi_pass 127.0.0.1:9000; 
     fastcgi_param SCRIPT_FILENAME $request_filename; 
    } 
} 

あなたの質問にtry_files文をシミュレートするために、最初のifブロックを使用してください。 this issueのため、aliastry_fileは使用しないでください。

第2のifブロックを使用して、passing uncontrolled requests to PHPを回避します。

ifの使用についてthis cautionを参照してください。

+0

あなたは英雄です。それは完全に動作します。ありがとう – Johna

+0

ただ一つの問題です。 Site2は正常に動作しています。しかし、サイト1はメインページだけを読み込みます。内部ページはnginx 404エラーを返します。 @RichardSmith – Johna

+0

*内部ページ*は '/ index.php'スクリプトで扱うべきルートを参照していますか? site1の 'location /'ブロックに 'try_files $ uri $ uri//index.php;'を含めてください。 –

関連する問題