nginx で php を設定する方法: まず、Nginx で fastcgi_params および fastcgi.conf 構成ファイルを変更し、次に、PHP で cgi.fix_pathinfo がオンになっているときに try_files コマンドを使用して 1 回フィルタリングします。
推奨: 「PHP ビデオチュートリアル 」
このチュートリアルの動作環境: linux5.9.8 システム、PHP7 .1 バージョンでは、この方法はすべてのブランドのコンピューターに適用できます。
Nginx PHP の構成
多くの人にとって、Nginx PHP の構成は、チュートリアルを検索してコピーして貼り付けることに他なりません。何の問題もないように思えますが、実はインターネット上の多くの情報は荒廃しており、抜け穴が多く、深い理解を求めずにただコピペしてしまうと、遅かれ早かれその代償を払うことになります。 。
PHP を使用してフロントエンド コントローラーを実装するとします。率直に言えば、これは統合された入り口です。すべての PHP リクエストを同じファイルに送信し、このファイル内の "REQUEST_URI" を解析してルーティングを実装します。ファイル。
現時点では、多くのチュートリアルで次のように Nginx PHP を構成する方法が説明されています:
server { listen 80; server_name foo.com; root /path; location / { index index.html index.htm index.php; if (!-e $request_filename) { rewrite . /index.php last; } } location ~ \.php$ { include fastcgi_params; fastcgi_param SCRIPT_FILENAME /path$fastcgi_script_name; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; } }
多くのエラー、または少なくとも悪臭があります。調べてみるといくつか見つかります。 。
#…
「index」ディレクティブから始めましょう。問題の設定では、それは「location」で定義されています:
location / { index index.html index.htm index.php; }
新しいデータを将来の「場所」を定義する場合、必然的に「インデックス」命令が繰り返し定義されることになります。これは、複数の「場所」が水平関係にあり、継承がないためです。このとき、「インデックス」は「サーバー」で定義する必要があります。継承関係のヘルプ。「index」コマンドはすべての「場所」で有効になります。
…
「if」コマンドを見てみましょう。これは最も誤解されている Nginx コマンドであると言っても過言ではありません:
if (!-e $request_filename) { rewrite . /index.php last; }
Many 「if」命令は一連のチェックを行いますが、これは実際には「try_files」命令の役割です。
try_files $uri $uri/ /index.php;
さらに、初心者は、「if」命令がカーネルレベルの命令ですが、実際には書き換えモジュールの一部であり、Nginx 構成は実際には手続き型ではなく宣言型であるため、非書き換えモジュールからの命令と混合すると、期待どおりの結果が得られない可能性があります。
#…「fastcgi_params」設定ファイルを見てみましょう:include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
#…
さらに、セキュリティの問題も考慮する必要があります。PHP が「cgi.fix_pathinfo」をオンにすると、PHP は間違ったファイル タイプを PHP ファイルとして解析する可能性があります。 Nginx と PHP が同じサーバーにインストールされている場合、最も簡単な解決策は、「try_files」コマンドを使用してフィルタリングすることです。
try_files $uri =404;
…
前の分析によれば、これは改善されました元のバージョンよりもはるかにきれいなバージョン:
server { listen 80; server_name foo.com; root /path; index index.html index.htm index.php; location / { try_files $uri $uri/ /index.php$is_args$args; } location ~ \.php$ { try_files $uri =404; include fastcgi.conf; fastcgi_pass 127.0.0.1:9000; } }
実際には、主に「try_files」と「fastcgi_split_path_info」の互換性が十分ではないため、まだいくつかの欠陥があります。それは解決できますが、解決策はかなり醜いです。詳細は割愛します。
補足: 「location」は限定されているため、実際には「fastcgi_index」は必要ありません。
以上がnginxでphpを設定する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。