ホームページ >バックエンド開発 >PHPチュートリアル >完全な PHP 環境 (nginx と PHP) を迅速かつ正確に構成する方法
完全な php 環境 (nginx と php) を迅速かつ正確に構成する方法
まず、nginx がどのように機能するかを理解しましょう: https://blog. csdn.net/hguisu/article/details/8930668
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)
ノンブロッキング IO および IO 多重化
モデルです。システムでは、複数のクライアント要求を 1 つのスレッドで処理できます。 Nginx のプロセスはスレッドです。つまり、各プロセスには 1 つのスレッドしかありませんが、このスレッドは複数のクライアントにサービスを提供できます。 pm.max_children
はプロセスの最大数を指定します。pm.max_requests
は各プロセスが処理するプロセスの数を指定します。リクエスト後 (PHP ではメモリ リークが発生する場合があるため、再起動する必要があります)。 PHP-FPM の各プロセスにもスレッドは 1 つだけありますが、1 つのプロセスが同時にサービスを提供できるのは 1 つのクライアントのみです。 補足: リバース プロキシとフォワード プロキシに関する関連知識 (つまり、フォワード プロキシはクライアントに対して機能し、リバース プロキシはサーバーに対して機能します)
目的肯定的なエージェントの:
(1) Google など、アクセスできなかったリソースにアクセスします。
(2) キャッシュを実行し、アクセス リソースを高速化できます。
(3) クライアントのアクセス許可にアクセスします。認証のためにオンラインにする
(4) プロキシはユーザーのアクセス記録、オンライン行動管理、ユーザー情報を外部から隠すことができます)リバースプロキシの使用: リバースプロキシ、「プロキシとして機能します」 「サーバー用」、主にサーバー クラスターの分散展開で使用される場合、リバース プロキシはサーバー情報を隠します。
(1) 内部ネットワークのセキュリティを確保するため、通常、パブリック ネットワークのアドレスとしてリバース プロキシが使用され、Web サーバーが内部ネットワークになります
(2) 負荷分散
#1. nginx 設定に関する常識を理解する (nginx.conf )
nginx.conf の構成と基本的な構成構文は別の記事で説明されていますが、ここでは、PHP 構成の解析に使用されるいくつかの構文を簡単に紹介します。 $uri/ /index.php$is_args$args : (https://blog.51cto.com/13930997/2311716,,, Nginx try_files の落とし穴 ---try_files の最後の場所 (フォールバック) ) は特別で、ファイル システム内でファイルを直接検索するのではなく、内部の「サブリクエスト」を発行します!!!
)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 を例に挙げます。
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)
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)
確認したところ、設定ファイルのディレクトリは /etc ディレクトリにあることがわかりましたが、php.ini をロードしても何も表示されません。 /etc の下のディレクトリに切り替えて確認すると、確かに php.ini ファイルが存在しません。
#php.ini.default を php.ini にコピーし、php --ini を再度実行して、php.ini ファイルが正常に読み込まれていることを確認します#php -m View は、コマンド ライン PHP Cli によってインストールされた拡張機能をリストします。
php 拡張機能のインストール ディレクトリを表示するコマンド:
php-config | grep -i extension (http://www.blogdaren.com/post-2520.html) )
このディレクトリに切り替えて拡張機能を表示します
次に、いくつかの一般的な
fastcgi 構成について学習します。 nginx.conf の意味其中TCP是IP加端口,可以跨服务器.而UNIX Domain Socket不经过网络,只能用于Nginx跟PHP-FPM都在同一服务器的场景.用哪种取决于你的PHP-FPM配置: 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视频教程》
方式1:
php-fpm.conf: listen = 127.0.0.1:9000
nginx.conf: fastcgi_pass 127.0.0.1:9000;
方式2:
php-fpm.conf: listen = /tmp/php-fpm.sock
nginx.conf: fastcgi_pass unix:/tmp/php-<br/>
其中php-fpm.sock是一个文件,由php-fpm生成,类型是srw-rw----.
Nginx 96b4fef55684b9312718d5de63fb7121 socket 96b4fef55684b9312718d5de63fb7121 PHP-FPM
TCP Socket(本地回环):
Nginx 96b4fef55684b9312718d5de63fb7121 socket 96b4fef55684b9312718d5de63fb7121 TCP/IP 96b4fef55684b9312718d5de63fb7121 socket 96b4fef55684b9312718d5de63fb7121 PHP-FPM
TCP Socket(Nginx和PHP-FPM位于不同服务器):
Nginx 96b4fef55684b9312718d5de63fb7121 socket 96b4fef55684b9312718d5de63fb7121 TCP/IP 96b4fef55684b9312718d5de63fb7121 物理层 96b4fef55684b9312718d5de63fb7121 路由器 96b4fef55684b9312718d5de63fb7121 物理层 96b4fef55684b9312718d5de63fb7121 TCP/IP 96b4fef55684b9312718d5de63fb7121 socket 96b4fef55684b9312718d5de63fb7121 PHP-FPM
三.nginx实现php动态解析.之配置过程中常见错误
四.Mac下配置神器PhpStrom开发环境
五.php依赖管理工具-composer
六.其他
以上が完全な PHP 環境 (nginx と PHP) を迅速かつ正確に構成する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。