完全な PHP 環境 (nginx と PHP) を迅速かつ正確に構成する方法
完全な php 環境 (nginx と php) を迅速かつ正確に構成する方法
まず、nginx がどのように機能するかを理解しましょう: https://blog. csdn.net/hguisu/article/details/8930668
1.nginx は PHP 動的解析原理を実装します
nginx は、高性能の http サーバーであり、その逆の機能を備えています。プロキシサーバー。つまり、nginx は、Web サイトの公開と処理のための HTTP サーバーとして使用でき、負荷分散のためのリバース プロキシ サーバーとしても使用できます。 ただし、nginx 自体は php ファイルを解析しないことに注意してください。 PHP ページに対するリクエストは、nginx によって FastCGI プロセスによって監視されている IP アドレスとポートに渡され、動的解析サーバーとして php-fpm (サードパーティの fastCGI プロセス マネージャー) によって処理され、最後に処理結果は nginx に返されます。つまり、nginx はリバースプロキシ機能を介して動的リクエストをバックエンドの php-fpm に転送することで PHP 解析のサポートを実現する、これが Nginx が PHP 動的解析を実装する基本原理です。
まず、いくつかの概念を理解する必要があります。 (nginx php-fpm fastcgi)
- Nginx は、
ノンブロッキング IO および IO 多重化
モデルです。システムでは、複数のクライアント要求を 1 つのスレッドで処理できます。 Nginx のプロセスはスレッドです。つまり、各プロセスには 1 つのスレッドしかありませんが、このスレッドは複数のクライアントにサービスを提供できます。 - PHP-FPM はブロッキング シングル スレッド モデルです。
pm.max_children
はプロセスの最大数を指定します。pm.max_requests
は各プロセスが処理するプロセスの数を指定します。リクエスト後 (PHP ではメモリ リークが発生する場合があるため、再起動する必要があります)。 PHP-FPM の各プロセスにもスレッドは 1 つだけありますが、1 つのプロセスが同時にサービスを提供できるのは 1 つのクライアントのみです。 - fastCGI: 異なる言語のインタープリター (php、python インタープリターなど) と Web サーバー間の通信の問題を解決するために、CGI プロトコルが登場しました。 CGI プロトコルに従ってプログラムを作成する限り、言語インタプリタと Webwerver 間の通信を実現できます。 php-cgiプログラムなど。ただし、Web サーバーはリクエストを受信するたびに CGI プロセスをフォークし、リクエストの完了後にプロセスを強制終了します。リクエストが 10,000 件ある場合、php-cgi プロセスを 10,000 回フォークして強制終了する必要があります。 fastcgi は cgi の改良版です。 fast-cgi は毎回リクエストを処理した後、プロセスを強制終了せずにプロセスを保持し、プロセスが一度に複数のリクエストを処理できるようにします。効率が大幅に向上しました。
補足: リバース プロキシとフォワード プロキシに関する関連知識 (つまり、フォワード プロキシはクライアントに対して機能し、リバース プロキシはサーバーに対して機能します)
目的肯定的なエージェントの:
(1) Google など、アクセスできなかったリソースにアクセスします。
(2) キャッシュを実行し、アクセス リソースを高速化できます。
(3) クライアントのアクセス許可にアクセスします。認証のためにオンラインにする
(4) プロキシはユーザーのアクセス記録、オンライン行動管理、ユーザー情報を外部から隠すことができます)リバースプロキシの使用: リバースプロキシ、「プロキシとして機能します」 「サーバー用」、主にサーバー クラスターの分散展開で使用される場合、リバース プロキシはサーバー情報を隠します。
(1) 内部ネットワークのセキュリティを確保するため、通常、パブリック ネットワークのアドレスとしてリバース プロキシが使用され、Web サーバーが内部ネットワークになります
(2) 負荷分散
2.nginx は PHP 動的解析を実装します。nginx の設定方法
#1. nginx 設定に関する常識を理解する (nginx.conf )
nginx.conf の構成と基本的な構成構文は別の記事で説明されていますが、ここでは、PHP 構成の解析に使用されるいくつかの構文を簡単に紹介します。 $uri/ /index.php$is_args$args : (https://blog.51cto.com/13930997/2311716,,, Nginx try_files の落とし穴 ---try_files の最後の場所 (フォールバック) ) は特別で、ファイル システム内でファイルを直接検索するのではなく、内部の「サブリクエスト」を発行します!!!
)- nginx の場所の設定 ~ \.php$ 質問 (https ://segmentfault.com/q/1010000012298020)rewrite (https://segmentfault.com/a/1190000002797606)
- 付録: nginx 設定関連の構文 (nginx には利用可能な構文も含まれていることに注意してください)グローバル変数については、詳細についてはリンクを参照してください。公式の nginx ドキュメントも参照できます http://www.nginx.org/ https://www.cnblogs.com/knowledgesea/p/5175711.html )
- 2.nginx 解析 php 構成例
server { listen 8000 backlog=4096; server_name www.baidu.com localhost; access_log logs/access.log main; root /home/leimengyao/api/app/htdocs; location / { index index.php index.html index.htm; try_files $uri $uri/ /index.php?$args; } location ~ \.php$ { #fastcgi_pass 127.0.0.1:9000; fastcgi_pass unix:/home/leimengyao/php7/var/run/php-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /home/leimengyao/api/app/htdocs$fastcgi_script_name; include fastcgi_params; } error_page 404 /404.html; location = /404.html { root /usr/share/nginx/html; } # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } location ~ /\.ht { deny all; } }
上記の構成のように、http リクエストが到着すると、プロセスは次のようになります。
http://10.94.120.124:8000/A/B?c=1&d=4 を例に挙げます。
- http リクエストが到着すると、サーバー グローバル ブロックでリッスンされたポート番号を通じて、対応するサーバーが照合されます。次に、場所のパスの一致に進みます。
- 最初に一致する場所 /. この一致ルールでは、まず、try_files を通じてルート ディレクトリ (/home/leimengyao/api/app/htdocs) で $uri ファイルを検索します。一致しない場合は、ルート ディレクトリに $uri/ ディレクトリがあるかどうかを確認します。一致するものがない場合は、最後の項目 /index.php?$args と一致します。つまり、「内部サブリクエスト」の発行は、nginx が http://10.94.120.124:8000/index.php?c=1&d=4
- への http リクエストを開始するのと同じです。このサブリクエストは次のようになります。
location ~ \.php${ ... }
catch、つまり、FastCGI 処理プログラムを入力します (nginx は FastCGI モジュールを通じて設定し、処理のために関連する php パラメーターを php-fpm に渡す必要があります)。 Fastcgi_pass はこの項目に設定されます。関連するパラメーターは、ユーザーが要求したリソースを解析のために php-fpm に送信します。これには、nginx FastCGI モジュール の関連する設定構文が含まれます。これについては、以下で紹介します)。特定の URI とパラメーターは、REQUEST_URI で FastCGI および WordPress プログラムに渡されるため、したがって、URI の変更による影響を受けません。 ! ! ! 。public static function detectPath() { if (!empty($_SERVER['SCRIPT_URL'])) { $path = $_SERVER['SCRIPT_URL']; } else { //as: www.baidu.com/A/B?saadf=esdf if (isset($_SERVER['REQUEST_URI'])) { //$_SERVER['REQUEST_URI']="/m/test?saadf=esdf"; $request_uri = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH); if (false !== $request_uri) { $path = $request_uri; //echo $path; /A/B //exit; } elseif ($_SERVER['REQUEST_URI'] && strpos($_SERVER['REQUEST_URI'], '?') !== false) { $path = strstr($_SERVER['REQUEST_URI'], '?', true); } } else { $path = $_SERVER['PHP_SELF']; } } return $path; }
ログイン後にコピー
3. Nginx 設定. PHP FastCGI
まず、いくつかのファイルを理解する必要があります。 (nginx.conf fastcgi_params php-fpm.conf php.ini)
- fastcgi_params ファイルは通常、/usr/local/etc/nginx に保存されます。 (Ubuntu は /etc/nginx の下に保存できます)。これは、FastCGI モジュールの基本的な環境変数を定義します。これらの fastcgi 環境変数は、nginx の fastcgi_params を構成するときに使用されます。内容は次のとおりです。
- Nginx.conf の PHP FastCGI モジュールにより、nginx が FastCGI と連携して動作し、どのパラメータが安全に渡されるかを制御できるようになります。 。一般的な fastcgi パラメータ設定の意味については、以下で詳しく紹介します。設定例は次のとおりです。
location / { fastcgi_pass localhost:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /home/www/scripts/php$fastcgi_script_name; fastcgi_param QUERY_STRING $query_string; fastcgi_param REQUEST_METHOD $request_method; fastcgi_param CONTENT_TYPE $content_type; fastcgi_param CONTENT_LENGTH $content_length; }
ログイン後にコピー
(https://www.jianshu.com/p/9bae5c49a163)
- php-fpm .conf
- php.ini php --ini を使用して、php(https://www. jianshu.com/p /a118f10d738c)
確認したところ、設定ファイルのディレクトリは /etc ディレクトリにあることがわかりましたが、php.ini をロードしても何も表示されません。 /etc の下のディレクトリに切り替えて確認すると、確かに php.ini ファイルが存在しません。
#php -m View は、コマンド ライン PHP Cli によってインストールされた拡張機能をリストします。
php 拡張機能のインストール ディレクトリを表示するコマンド:
php-config | grep -i extension (http://www.blogdaren.com/post-2520.html) )
このディレクトリに切り替えて拡張機能を表示します
次に、いくつかの一般的な
其中TCP是IP加端口,可以跨服务器.而UNIX Domain Socket不经过网络,只能用于Nginx跟PHP-FPM都在同一服务器的场景.用哪种取决于你的PHP-FPM配置:<br/> 方式1:<br/> php-fpm.conf: listen = 127.0.0.1:9000<br/> nginx.conf: fastcgi_pass 127.0.0.1:9000;<br/> 方式2:<br/> php-fpm.conf: listen = /tmp/php-fpm.sock<br/> nginx.conf: fastcgi_pass unix:/tmp/php- fpm.sock; UNIX Domain Socket可用于两个没有亲缘关系的进程,是目前广泛使用的IPC机制,比如X Window服务器和GUI程序之间就是通过UNIX Domain Socket通讯的.这种通信方式是发生在系统内核里而不会在网络里传播.UNIX Domain Socket和长连接都能避免频繁创建TCP短连接而导致TIME_WAIT连接过多的问题.对于进程间通讯的两个程序,UNIX Domain Socket的流程不会走到TCP那层,直接以文件形式,以stream socket通讯.如果是TCP Socket,则需要走到IP层,对于非同一台服务器上,TCP Socket走的就更多了. UNIX Domain Socket: 以上配置文件全部修改完成以后,需要进行重启nginx和php-fpm,修改的内容才能生效: https://blog.csdn.net/tfy_2425482491/article/details/79377672 点击debug报如下错误:安装debug扩展 redis(https://www.jianshu.com/p/018bbf5ff42a) php call_user_func_array(https://www.jianshu.com/p/1c0f30d8722d) 推荐学习:《PHP视频教程》 以上が完全な PHP 環境 (nginx と PHP) を迅速かつ正確に構成する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。<br/>
其中php-fpm.sock是一个文件,由php-fpm生成,类型是srw-rw----.
Nginx <=> socket <=> PHP-FPM
TCP Socket(本地回环):
Nginx <=> socket <=> TCP/IP <=> socket <=> PHP-FPM
TCP Socket(Nginx和PHP-FPM位于不同服务器):
Nginx <=> socket <=> TCP/IP <=> 物理层 <=> 路由器 <=> 物理层 <=> TCP/IP <=> socket <=> PHP-FPM
三.nginx实现php动态解析.之配置过程中常见错误
四.Mac下配置神器PhpStrom开发环境
五.php依赖管理工具-composer
六.其他

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

PHP開発における固体原理の適用には、次のものが含まれます。1。単一責任原則(SRP):各クラスは1つの機能のみを担当します。 2。オープンおよびクローズ原理(OCP):変更は、変更ではなく拡張によって達成されます。 3。Lischの代替原則(LSP):サブクラスは、プログラムの精度に影響を与えることなく、基本クラスを置き換えることができます。 4。インターフェイス分離原理(ISP):依存関係や未使用の方法を避けるために、細粒インターフェイスを使用します。 5。依存関係の反転原理(DIP):高レベルのモジュールと低レベルのモジュールは抽象化に依存し、依存関係噴射を通じて実装されます。

システムが再起動した後、UnixSocketの権限を自動的に設定する方法。システムが再起動するたびに、UnixSocketの許可を変更するために次のコマンドを実行する必要があります:sudo ...

記事では、PHP 5.3で導入されたPHPの後期静的結合(LSB)について説明し、より柔軟な継承を求める静的メソッドコールのランタイム解像度を可能にします。 LSBの実用的なアプリケーションと潜在的なパフォーマ

PHP開発でPHPのCurlライブラリを使用してJSONデータを送信すると、外部APIと対話する必要があることがよくあります。一般的な方法の1つは、Curlライブラリを使用して投稿を送信することです。

記事では、入力検証、認証、定期的な更新など、脆弱性から保護するためのフレームワークの重要なセキュリティ機能について説明します。

この記事では、フレームワークにカスタム機能を追加し、アーキテクチャの理解、拡張ポイントの識別、統合とデバッグのベストプラクティスに焦点を当てています。
