1. 動的 PHP Web ページへのユーザー アクセス プロセス
# ユーザーのブラウザは Web ページへのアクセスを開始します: http://192.168.1.103/index.php
ユーザーと nginx サーバーは、TCP 接続の 3 ウェイ ハンドシェイクを実行します (nginx アクセス コントロール ポリシー、nginx ファイアウォール、その他のアクセス コントロール ポリシーを含むアクセス コントロール ポリシーを無視します)
ステップ 1: ユーザーが http リクエストを nginx サーバーに送信します
ステップ 2: nginx は、ユーザーがアクセスした URI とサフィックスに基づいてリクエストを判断します
1. たとえば、ユーザーがindex.phpにアクセスすると、nginxは構成ファイル内の場所に基づいてそれを照合します。例:
[email protected]:/data/web# cat /etc/nginx/conf.d/blog.conf server { root /data/web/blog/; index index.html index.htm; server_name www.fwait.com; location / { try_files $uri $uri/ /index.html; } location /blog/ { #alias /usr/share/doc/; auth_basic "authorized users only"; auth_basic_user_file /etc/nginx/passwd.conf; #autoindex on; allow 192.168.1.103; deny all; } location ~ \.php$ { include /etc/nginx/fastcgi_params; fastcgi_intercept_errors on; fastcgi_pass 127.0.0.1:9000; } }<br>
ユーザーが Index.php にアクセスすると、~ \.php$ の場所が照合されます。これは、ユーザーが URI を通じてアクセスしたリソースがサイズに応じて照合され、アクセスされたリソースが .php で終わることを意味します。
nginx は、ユーザーが要求したリソースに従って特定の場所を照合した後、その場所に対応するアクションを実行します。その場所でのアクションの意味は次のとおりです:
include /etc/nginx/fastcgi_params; #nginx が fastcgi インターフェイスを呼び出すことを示します
fastcgi_intercept_errors on; #fastcgi 割り込みとエラー情報の記録をオンにすることを示します
fastcgi_pass 127.0.0.1:9000; # nginx が fastcgi_pass を介した分析のためにユーザーによって要求されたリソースを 127.0.0.1:9000 に送信することを示します。ここでの nginx および php スクリプト解析サーバーは同じマシン上にあるため、127.0.0.1:9000 はローカルのphpスクリプト解析サーバーです。
nginx サーバーの構成によれば、ユーザーが動的 PHP リソースにアクセスし、nginx が PHP 関連のスクリプト解析プログラムを呼び出して、ユーザーがアクセスしたリソースを解析することがわかります。
ステップ 3: 2 番目のステップからわかるように、ユーザーは動的コンテンツをリクエストします。nginx はリクエストを fastcgi クライアントに渡し、ユーザーのリクエストを fastcgi_pass
を通じて php-fpm に送信します。 ユーザーが静的リソースにアクセスする場合は簡単で、nginx はユーザーが要求した静的リソースを直接ユーザーに返します。
ステップ 4: fastcgi_pass が動的リソースを php-fpm に引き渡した後、php-fpm はリソースを php スクリプト解析サーバーのラッパーに転送します
ステップ 5: ラッパーは php-fpm から転送されたリクエストを受信した後、php 動的プログラム解析サーバーを呼び出すための新しいスレッドを生成します
たとえば、ユーザーが MySQL データベースの読み取りをリクエストすると、データベース読み取り操作がトリガーされます;
ユーザーが画像や添付ファイルなどをリクエストすると、PHP は NFS 経由で保存されたストレージ クラスターなどのバックエンド ストレージ サーバーへのクエリをトリガーします;
ステップ 6: PHP はクエリ結果を nginx
に返します。 ステップ 7: nginx は応答メッセージを作成し、結果をユーザーに返します
これは nginx の 1 つのタイプにすぎません。ユーザーのリクエストとユーザーのリクエスト結果の返しは非同期で実行されます。つまり、ユーザーがリクエストしたリソースは nginx 内に転送されます。nginx は同期できます。つまり、解析されたリソースが直接返されます。ユーザーは nginx で転送を行う必要はありません。
2. 関連する質問
1. 動的リソースに対するすべてのユーザー要求は、完全な動的リソース解析プロセスをトリガーする必要がありますか?
いいえ、この問題を解決するには 2 つの方法があります:
まず、nginx 自体のキャッシュ機能を有効にして、動的リソースの解析結果をキャッシュします。次回ユーザーが対応するリソースにアクセスするときに、nginx はこのキャッシュ クエリを実行します。クエリが成功すると、動的リソースの解析後の静的リソースがキャッシュされます。ユーザーへ;
次に、リソースをキャッシュするためにワニッシュ キャッシュ クラスターをデプロイするなど、nginx バックエンドにキャッシュ マシンをデプロイします。ユーザーが要求したリソースは、最初にキャッシュ クラスターで検索できます。
2. キャッシュに nginx を使用することは可能ですか?実際の状況に応じて、Web アーキテクチャ全体で nginx がボトルネックになっていない場合、nginx をキャッシュに使用できますが、ユーザーのリクエストとユーザーのリクエストへの応答には nginx が唯一の手段であるため、これはお勧めできません。ストレージ クラスターなどの他のバックエンド コンポーネントのパフォーマンスがどれほど優れていても、実際の展開 (nginx が http サーバーとして使用される場合) では nginx のキャッシュ機能を有効にすることはお勧めできません。 nginx キャッシュ機能を有効にすると、nginx のパフォーマンスが低下し、nginx がデプロイされている対応するサーバーのハードウェア リソースが消費されるためです。
3. 画像を使用して nginx fastcgi ラッパー php
間の関係を表す場合 4.fastcgiとは正確には何ですか
# CGI は Common Gateway Interface の略です Common Gateway Interface HTTP サービス上のプログラム サービス通信に使用されるツール。CGI プログラムはネットワーク サーバー上で実行する必要があります。 従来の CGI インターフェイス方式では、HTTP サーバーが動的プログラムに遭遇するたびにパーサーを再起動して解析を実行し、結果を HTTP サーバーに返す必要があるため、パフォーマンスが低くなります。高い同時実行性を扱う場合、これはほとんど不可能であるため、FastCGI が誕生しました。さらに、従来の CGI インターフェース方式のセキュリティも非常に貧弱です一个可伸缩地。高速地在HTTP服务器和动态脚本语言间通信的接口
接口在linux下是socket(这个socket可以是文件socket也可以是ip socket)
主要优点把动态语言和HTTP服务器分离开来。多数流行的HTTP服务器都支持FsatCGI包括Apache/Nginx/lighttpd等
支持语言比较流行的是PHP,接口方式采用C/S架构,可以将HTTP服务器和脚本解析器分开,同时在脚本解析服务器上启动一个或者多个脚本解析守护进程。
当HTTP服务器每次遇到动态程序时,可以将其直接交付给FastCGI进程来执行,然后将得到的结果返回给浏览器。这种方式可以让HTTP服务器专一地处理静态请求或者将动态脚本服务器的结果返回给客户端,这在很大程度上提高了整个应用系统的性能。
5.具体的nginx + php的nginx相关配置
[email protected]:/data/web# cat /etc/nginx/nginx.conf|egrep -v "#|^$" user www-data; worker_processes 4; pid /var/run/nginx.pid; events { worker_connections 768; } http { sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; types_hash_max_size 2048; include /etc/nginx/mime.types; default_type application/octet-stream; access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; gzip on; gzip_disable "msie6"; include /etc/nginx/conf.d/*.conf; include /etc/nginx/sites-enabled/*; } [email protected]:/data/web#<br>
[email protected]:/data/web# cat /etc/nginx/conf.d/blog.conf server { root /data/web/blog/; index index.html index.htm; server_name www.fwait.com; location / { try_files $uri $uri/ /index.html; } location /blog/ { #alias /usr/share/doc/; auth_basic "authorized users only"; auth_basic_user_file /etc/nginx/passwd.conf; #autoindex on; allow 192.168.1.103; deny all; } location ~ \.php$ { #include /usr/local/etc/nginx/fastcgi.conf; include /etc/nginx/fastcgi_params; fastcgi_intercept_errors on; fastcgi_pass 127.0.0.1:9000; } } [email protected]:/data/web#<br>
以上がNginx+PHP+FastCGIアクセラレーションモードの実装方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。