多くの人にとって、Nginx + PHP を構成することは、チュートリアルを検索してコピーして貼り付けることに他なりません。何の問題もないように思えますが、実際には、インターネット上の多くの情報は荒廃しており、抜け穴が満載です。深い理解を求めずにただコピペすると、遅かれ早かれその代償を払うことになります。 。
Nginx+PHPを正しく設定する方法
PHP を使用してフロントエンド コントローラーを実装するとします。率直に言えば、これは統合された入り口です。すべての PHP リクエストを同じファイルに送信し、このファイル内の "REQUEST_URI" を解析することでルーティングを実装します。
一般的にはこのように構成されています
現時点では、多くのチュートリアルで次のように Nginx+PHP を構成する方法が説明されています:
リーリーたくさんの間違い、あるいは少なくとも悪趣味なところがあります。見てみればいくつか見つかります。
まず、Nginx 構成ファイル内の命令の継承関係を理解する必要があります。
Nginx 設定ファイルは、外側から内側への一般的なブロックは「http」、「server」、「location」などです。デフォルトの継承関係は外側から内側であり、内側のブロックは自動的に継承されます。外側のブロックの値をデフォルト値として取得します。
まずは「index」コマンドから始めましょう
問題の設定では、「場所」で定義されています:
リーリー将来的に新しい「場所」を追加する必要があると、必然的に「インデックス」命令が繰り返し定義されることになります。これは、複数の「場所」が水平関係にあり、この場合「インデックス」が存在しないためです。 「「server」index」で定義する必要があります。継承関係の助けを借りて、「index」コマンドはすべての「場所」で有効になります。
「if」コマンドを見てみましょう
最も誤解されている Nginx コマンドと言っても過言ではありません:
リーリー多くの人は一連のチェックを行うために "if" 命令を使用することを好みますが、これは実際には "try_files" 命令の役割です。
try_files $uri $uri/ /index.php;
さらに、初心者は「if」命令がカーネルレベルの命令であると考えがちですが、実際には書き換えモジュールの一部です。また、Nginx の設定は実際には手続き型ではなく宣言型であるため、命令と混合される場合があります。非書き換えモジュールからは、期待どおりの結果が得られない可能性があります。
以下の「fastcgi_params」設定ファイルを見てください
fastcgi_params を含める;
Nginx には、「fastcgi_params」と「fastcgi.conf」という 2 つの fastcgi 設定ファイルがあります。それらに大きな違いはありません。唯一の違いは、後者の「SCRIPT_FILENAME」定義が前者よりも 1 行多いことです。
注: $document_root と $fastcgi_script_name の間には / はありません。
しかし、これには疑問が生じます。なぜ古い設定ファイルを変更するのではなく、新しい設定ファイルを導入する必要があるのでしょうか?これは、「fastcgi_param」命令が配列型であるためです。通常の命令と同じで、内側の層が外側の層を置き換えます。通常の命令との違いは、同じレベルで複数回使用される場合、代わりに追加されることです。交換されました。つまり、「SCRIPT_FILENAME」が同じレベルで 2 回定義されている場合、両方ともバックエンドに送信されるため、潜在的な問題が発生する可能性があります。このような状況を回避するために、新しい構成ファイルが導入されました。
さらに、セキュリティの問題も考慮する必要があります。PHP で「cgi.fix_pathinfo」がオンになっている場合、PHP は間違ったファイル タイプを PHP ファイルとして解析する可能性があります。 Nginx と PHP が同じサーバーにインストールされている場合、最も簡単な解決策は、「try_files」コマンドを使用してフィルタリングすることです:
try_files $uri =404;
改良版
以前の分析に基づいて、これはオリジナルのバージョンよりもはるかにクリーンになっていますか? リーリーNginx + PHP を正しく設定する方法は、誰もが独自の理解を持っているはずです。
http://www.bkjia.com/PHPjc/1125885.html