0

基本的に3つの異なるタイプのコンテンツでnginxサーバーをセットアップしようとしています:

  • CodeIgniter で実行されているメイン Web サイト
  • サブフォルダー内の Q&A フォーラム/qa(Question2Answer で実行)
  • 静的ファイル (を含むさまざまな場所にあります/qa)

さまざまなトラブルに見舞われています。私の現在の構成(サーバーブロック内)は次のとおりです。

# Q2A
if ($request_uri ~* "^/qa/") {
    rewrite ^/qa/(.*)$ /qa/index.php?qa-rewrite=$1 last;
}
# CI
if (!-e $request_filename) {
    rewrite ^(.+)$ /index.php?$1 last;
}
location / {
    index index.php index.html;
}
location ~ \.php$ {
        try_files $uri =404;

        fastcgi_cache one;
        fastcgi_cache_key $scheme$host$request_uri;
        fastcgi_cache_valid  200 302 304 5m;
        fastcgi_cache_valid  301 1h;

        include /etc/nginx/fastcgi_params;
        fastcgi_pass unix:/var/run/php-fastcgi/php-fastcgi.socket;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME /srv/www/site$fastcgi_script_name;
        fastcgi_param HTTPS off;
}

これは、次の問題を除いてほとんど機能しています。

  • アプリケーション フォルダー内の PHP ファイルに対する要求が解析/実行されています。明らかに、これは CI アプリを経由しないため、エラーが発生します (変数が見つからないなど)。
  • フォルダー内のすべての静的ファイルqaは、静的ファイルとして提供されるのではなく、Q2A アプリに渡されます。

location ~* ^/qa/ {}ロケーションブロックのようなものを使用したり、さまざまな順列を使用したりするなど、数え切れないほど多くのことを試しましたtry_filesが、運がありませんでした。また、nginx サイトでこの Wordpress の例を修正してみました。それらのほとんどは/qa/、404 を返すだけで終わりました。一部のメソッドでは、サーバーが生の PHP コードを提供する結果になりました。

これを設定するための適切な方法を手伝ってくれる人はいますか?

4

3 に答える 3

0

悪なら。しかしtry_files、いくつかのロケーション ブロックを使用して同じことを行うことができます。

# in a `server` block
index index.php index.html;

# case sensitive version
# location ~ ^/qa/(.*)?$ {
location  ~* ^/qa/(.*)?$ {
    try_files $uri /qa/index.php?qa-rewrite=$1;
}

location / {
    try_files $uri /index.php?$request_uri;
}

# not sure if you even need location /, this might work
# try_files $uri /index.php?$request_uri;

# the rest of your FastCGI config stuff here
于 2013-07-14T00:11:44.303 に答える
0

これは、nginx を実行している自分の PHP サイトで使用する構成に基づいています。

これはテストされていませんが、わずかに変更されたバージョンであるため、動作するはずです。

ログおよびルート ディレクティブの (挿入) をサーバーの値に置き換えるだけです。

server {
    listen 80;
    access_log  /var/log/nginx/(insert).access.log;
    error_log  /var/log/nginx/(insert).error.log;
    root (insert);
    server_name (insert);
    rewrite ^/qa/(.*(?![\.js|\.css])[^.]+)$ /qa/index.php/$1 last;
    rewrite ^(.*(?![\.js|\.css])[^.]+)$ /index.php/$1 last;
    location ~ [^/]\.php(/|$) {

        fastcgi_cache one;
        fastcgi_cache_key $scheme$host$request_uri;
        fastcgi_cache_valid  200 302 304 5m;
        fastcgi_cache_valid  301 1h;

        fastcgi_split_path_info ^(.+?\.php)(/.*)$;
        fastcgi_pass unix:/var/run/php-fastcgi/php-fastcgi.socket;
        fastcgi_index index.php;
        include fastcgi_params;
    }
}
于 2013-07-14T02:39:12.583 に答える