ホームページ  >  記事  >  php教程  >  ランプのアーキテクチャ

ランプのアーキテクチャ

高洛峰
高洛峰オリジナル
2016-12-01 13:41:371452ブラウズ

1. Apache プロセスモードの説明

Linux では、httpd-l を使用して、インストールされているモジュールが prefork モードであるかワーカー モードであるかを確認できます

[root@LAMP ~]# /usl/local/apache/bin/apachectl - l |egrep "worker|prefoker"

worker.c

[root@LAMP ~]#

or

[root@LAMP ~]# /usr/local/apache/bin/apachectl -l |sed -n ' /worker|prefork/p'

worker.c

[root@LAMP ~]#

prefork モード (デフォルト)

Prefork は複数の子プロセスを使用し、各子プロセスには 1 つのスレッドしかありません。一定時間接続を維持することができます。

動作原理:

制御プロセスは、リクエストが来たときにサブプロセスが再生成されないように、最初に複数のサブプロセスを確立する必要があり、最大値は 1 秒あたり 32 に達します。需要は満たされます。

ワーカー モード (デフォルト)

ワーカー モードは、Apache2.x で新しく導入されたモードです。ワーカー モードでは、複数の子プロセスが存在し、各子プロセスが複数のスレッドを持ちます。各スレッドは、特定の時点で 1 つの接続のみを維持できます。

動作原理:

メイン制御プロセスは複数のサブプロセスを生成し、各サブプロセスには、リクエストが来たときに別のスレッドを生成しないように、固定数のスレッドが含まれます。構成ファイルで設定されるアイドル スレッドの最小数と最大数、およびすべての子プロセスのスレッドの合計数 既存の子プロセスのスレッドの合計数が同時負荷を満たせない場合、制御プロセスは新しい子プロセスを生成します。 。

インストール方法:

設定およびコンパイルのプロセス中に、パラメーター --with-mpm=worker を追加します。追加しない場合、システムはデフォルトの prefork モードを使用します。

利点: メモリ使用量は prefork よりも低くなります。トラフィック HTTPD サービス

欠点: スレッドがクラッシュすると、プロセス全体がそのスレッドとともに「停止」します。スレッドはメモリ空間を共有するため、プログラムは実行中にシステムによって「スレッドごとに安全」であると認識される必要があります。サービスの安定性はプリフォーク モードほど良くありません。

イベント モード: 非常に混雑したサーバーでは、ワーカーに基づいてサービス プロセスを接続から分離します。サーバーの処理速度が非常に速く、クリック率が非常に高い場合、使用可能なスレッドの数が重要なリソース制限になります。このとき、Event MPM メソッドが最も効果的です

1.prefork:

StartServers 5 QuestsPerChild 0 #Process 処理されるリクエストの最大数、0 は無制限で、リサイクルせずにさらに大きく設定できます

2.worker:

StartServers 2 #開始プロセスの数

MaxClients 150 #最大処理リクエスト sMINSPAREADS 25 #空きスレッドの最小数

Maxsparethreads 75 #空きスレッドの最大数

ThreadsperChild 25 #プロセスごとに生成できるスレッドの数、最大 20,000 、パフォーマンスは

MaxrequestSperchild 0 # スレッド処理 リクエストの最大数、0 無制限

ワーカー モードで同時に処理できるリクエストの総数は総数によって決まります子プロセスの数に Threadsperchild 値を乗算します。この値は maxclients 以上である必要があります。負荷が非常に大きく、既存の子プロセスの数を満たせない場合、制御プロセスは新しい子プロセスを生成します。

ヒント: 子プロセスのデフォルトの最大合計数は 16 です。増やす必要がある場合は、serverlimit の値を明確に宣言する必要があります (最大値は 20000)

Apache のワーカーでの同時接続数を確認します。

[root@LAMP ~ ]# pstree -a|grep httpd|wc -l

84

[root@LAMP ~]#

3.eventは調査されません

2. テスト分析

重要なポイント:

1, apachectl - M libphp5.so がロードされているかどうかを確認します

2. AddType Application/x-httpd-php .php が httpd.conf で正しく記述されているかどうか

3. 4. selinux をオフにする必要があります

5. 拒否は許可するように変更されていません

6. ホストは追加されていません

2. httpd のこの行の前にある警告記号を削除します。 .conf

#Include conf/extra/httpd-vhosts. conf

vim /usr/local/apache2/con5. 仮想ホストのユーザー認証を構成します

http://www.lishiming.net/thread-554- 1-1.htmlf/extra/httpd-vhosts.conf

2. Web アンチホットリンク技術

簡単に言うと、一部の違法 Web サイトは、自分の Web サイトのプログラム内で許可なく他の Web サイトのリソースを違法に呼び出し、呼び出したリソースを自分の Web サイトに表示して、自分の Web サイトの表示を埋める効果を達成します。リソース Web サイトを呼び出すネットワーク トラフィックが無駄になり、他の Web サイトの帯域幅やサービス負荷が逼迫したり、ダウンタイムが発生したりすることがあります。

Web サイトのホットリンクの解決策:

1. http リファラーに基づいてホットリンク防止を実装します

HTTP プロトコルには、URL 形式を使用して現在の Web ページにリンクされているリソースがどこから来たのかを示すヘッダー フィールドがあります。 、リファラーを通じて、ターゲットが訪問したソース Web ページを検出でき、それがリソース ファイルである場合、ソースがこのサイトではないことが検出されます。ブロックされるか、指定されたページに戻されます。 現在、Apache、nginx、lighttpd はすべて、http リファラーに基づくアンチホットリンクをサポートしています

2. アクセス パスの暗号化と変換によるアンチホットリンクは、lighttpd に同様のプラグイン mod_secdownload

を備えています。ホットリンク対策の実践を実装する Apache Web サービス

ServerAdmin ucode@gmail.com

DocumentRoot "/var/html/bbs"

ServerName ucode.blog.51cto.com

ServerAlias www.dummy-host.example.com

エラーログ "logs/bbs-error_log"

カスタムログ "|/usr/local/sbin/cronolog /app/logs/access_bbs_%Y%m%d.log" を結合

RewriteEngine On #アンチホットリンクをオンにします

RewriteCond %{HTTP_REFERER}!^http://ucode.blog.51cto.com/.*$ [NC]

RewriteCond %{HTTP_REFERER}!^http:// ucode.blog.51cto.com/$ [NC]

RewriteCond %{HTTP_REFERER}!^http://ucode.blog.51cto.com/.*$ [NC]

RewriteCond %{HTTP_REFERER}!^http: //ucode.blog.51cto.com$ [NC]

RewriteCond .*.(gif|jpg|swf)$ http://ucode.blog.51cto.com/img/nolink.jpg [R,NC]

上記の太字部分を満たすと次が返されます: http://ucode.blog.51cto.com/img/nolink.jpg picture

Listen 80##デフォルトのリスニング ポートは 80 です

PidFile / export/servers/apache2/logs/httpd.pid

LoadModule authn_file_module modules/mod_authn_file.so##ロードされたモジュール

ユーザー admin ##一般的なデフォルト設定は admin

グループ admin ##一般的なデフォルト設定は admin

DocumentRoot "/export/servers/apache2/htdocs"# #プロジェクト ファイルのパスを設定します

ServerAdmin you@example.com #サーバーがエラーを報告した場合は、クライアントに戻り、管理者に連絡してください

ServerName localhost:80 ##サーバー名: port

AddType application/x-httpd -php .php を使用すると、.php テキスト ファイル形式でも php プログラムを実行できます。

1 <ディレクトリ />

オプション FollowSymLinks

AllowOverride None

注文拒否、許可

すべてから許可

#Options: 特定のディレクトリで使用される機能を構成します。一般的に使用される値と基本的な意味は次のとおりです:

#ExecCGI: このディレクトリでの CGI スクリプトの実行が許可されます。

#FollowSymLinks: ファイル システムがこのディレクトリ内のシンボリック リンクを使用できるようにします。

#Indexes: ユーザーがディレクトリにアクセスしたときに、DirectoryIndex で指定されたホームページ ファイル (#index.html など) が見つからない場合、ディレクトリ内のファイル リストがユーザーに返されます。

#SymLinksIfOwnerMatch: シンボリック リンクを使用する場合、そのファイル所有者が実際のファイル所有者と同じである場合にのみ、シンボリック リンクにアクセスできます。

include はサーバー側インクルードを許可します。

includesNOEXEC はサーバー側のインクルードを許可しますが、#exec コマンドと #exec CGI を無効にします。 ScriptAliase ディレクトリから仮想 CGI スクリプトを #include することは引き続き可能です。

たとえば、+ および - 記号を使用しない場合:

Options Indexes FollowSymLinks

Options includes

「インクルード」のみが /web/docs/spec ディレクトリに設定されます。

ただし、2 番目の Options ディレクティブで + および - 記号が使用されている場合:

Options Indexes FollowSymLinks

Options +includes -Indexes

次に、FollowSymLinks と include が /web/docs/spec ディレクトリに設定されます。

#AllowOverride: .htaccess ファイル内に存在できるディレクティブの種類 (.htaccess ファイル名は変更可能で、ファイル名は AccessFileName ディレクティブによって決定されます):

#None:AllowOverride が None に設定されている場合。このディレクトリで .htaccess ファイルを検索しないでください (サーバーのオーバーヘッドを軽減できるため)。

#All: すべてのディレクティブは .htaccess ファイルで使用できます。

順序: アクセス中に許可と拒否の 2 つのアクセス ルールのどちらを優先するかを制御します:

許可: アクセスが許可されるホストのリスト (利用可能なドメイン名またはサブネット、例: 192.168.0.0/16 から許可)。

Deny: アクセスを拒否されたホストのリスト。

Apache サーバーはディレクトリに対するドキュメントのアクセス制御を行うことができますが、1 つは設定ファイル httpd.conf (または access.conf) で各ディレクトリを設定する方法です。

Timeout 300 ## タイムアウト間隔クライアントとサーバーの接続用

KeepAlive On ### 1 つの接続で複数の HTTP リクエストを渡します

MaxKeepAliveRequests 100 ###1 つの接続に対して実行できる HTTP リクエストの最大数

KeepAliveTimeout 15 ### 間の時間をテストします接続内での複数のリクエスト送信。サーバーがリクエストを完了したが、クライアント プログラムから次のリクエストを受信して​​いない場合、サーバーはこのパラメータで設定された間隔を超えると切断されます。

ErrorLog logs/error_log #ログの保存場所

LogLevel warn ##ログ レベルのデバッグ ログ カテゴリには、さらに多くのログがあります

ログのデフォルトの形式は次のとおりです:

LogFormat "%h %l % u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i"" を組み合わせた

LogFormat "%h %l %u %t "%r" %> s %b" common #common はログ形式名です

LogFormat "%{Referer}i -> %U" Referer

LogFormat "%{User-agent}i" Agent

CustomLog logs/access_log common

形式 さまざまなパラメータは次のとおりです:

%h – クライアントの IP アドレスまたはホスト名

%l – これは、クライアントの identd によって判断された RFC 1413 の ID です。出力内の記号「-」は、その情報が指定されていることを示します。ここは無効です。

%u – HTTP 認証システムによって取得された Web ページにアクセスしたクライアントの名前。認証がある場合にのみ有効です。出力内の「-」記号は、ここでの情報が無効であることを示します。

%t – サーバーがリクエストの処理を完了した時刻。

"%r" – 引用符は、顧客から送信されたリクエストの内容であり、多くの有益な情報が含まれています。

%>s – これはサーバーからクライアントに返されるステータス コードです。

%b – 最後の項目は、応答ヘッダーを除いてクライアントに返されるバイト数です。

"%{Referer}i" – この項目は、リクエストが送信された Web ページを指定します。

「%{User-Agent}i」 – この項目は、お客様のブラウザから提供されるブラウザ識別情報です


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
前の記事:Linux侵入次の記事:Linux侵入