必要なもの:
- Apacheを完全に取り除きます。 サーバーは適切な負荷に耐え、静的および動的を分散する必要がありました。
- 最新バージョンのlibxmlのサポートが必要でした。バージョンのわずかな違いにより、サイトは完全に動作しなくなりました。
- gzipが必要でした
- そして、私は記事自体で議論するいくつかのより多くの機能
背景
「テストの場」として、2つのXeonプロセッサと2 GBのRAMを搭載した物理サーバーを搭載しました。 より正確な設定を行うことはできません-覚えていないし、気にしませんでした。
このサイトには、PHPブランチ5.2.xが必要でした。 標準リポジトリからインストールしたときに、libxmlのような問題に遭遇しました。 デフォルトでは、バージョン2.6.24でインストールされたため、プロジェクトは完全に機能しなくなりました(バージョン2.6.32が必要でした)。 CentALTリポジトリが接続されていても、問題は解決しませんでした。
おそらく完成したパッケージをリビルドしてインストールすることはおそらく可能でしたが、これについては経験がないので、phpを手動でビルドすることにしました。
もちろん、最初にphpを正しくビルドできませんでした:)。 プロジェクトでは、少数の微妙な点を考慮する必要がありました。 特に、pdoとfreetypeをサポートしています。
最初は、nginx + apacheバンドルに基づいてすべてを実行することにしました。インストールと構成のプロセスは、 この記事で説明したものと変わりませんでした。 そして、プロセス自体は、php-cgiで作業をセットアップするよりも簡単に思えました。
すべて正常に機能しましたが、サーバーを最適化する必要があるほど停止しないことにしました。 その後、nginxとphp-cgiでこれらすべてを考慮して、apacheを完全に削除するようになりました。
PHPビルド
FastCGIプロセス自体を制御するものが他にもありました。php-fpmを使用することにしました。PHPFastCGI Process Managerは、FastCGIプロセスをより効果的に管理して高い安定性を確保できるPHPのパッチです。 なぜ彼は正確に? 設定は簡単で、一般的には良いレビューでした。
言われたらすぐに、最新バージョンをhttp://php-fpm.org/downloads/から引き出します。 当時、私はphpバージョン5.2.10を持っていたので、 php-5.2.10-fpm-0.5.13.diff.gzを取り出しました 。 すべてがさらにシンプルに思えます。 契約し、 プロジェクト自体のwikiに示されているとおりにすべてを行います。 あなたがしなければならなかったことを簡単に説明します。
$ bzip2 -cd php-5.2.10.tar.bz2 | tar xf -
$ gzip -cd php-5.2.10-fpm-0.5.13.diff.gz | patch -d php-5.2.10 -p1
$ cd php-5.2.10 && ./configure --enable-fastcgi --enable-fpm
ご覧のとおり、難しいことは何もありません。 次に-phpをビルドしました。 アセンブリプロセスでは、必要な微妙な点を考慮していました。
./configure --enable-fastcgi --enable-fpm --with-zlib --enable-pdo --with-pdo-mysql --with-mysql --with-config-file-path=/etc --enable-calendar --with-iconv --enable-exif --enable-ftp --enable-wddx --with-zlib --with-bz2 --with-gettext --with-xmlrpc --with-xml --enable-soap --enable-filepro --enable-bcmath --enable-trans-sid --enable-mbstring --enable-dbx --enable-dba --with-openssl --with-mhash --with-mcrypt --with-xsl --with-curl --with-pcre-regex --with-gd --enable-gd-native-ttf --with-ldap --enable-pdo --with-pdo-mysql --with-mysql --with-sqlite --with-pdo-sqlite --enable-sqlite-utf8 --with-pear --with-freetype-dir=/usr --with-jpeg-dir=/usr
太字は、php-fpmが機能するために必要な必須パラメーターを示しています。 --with-config-file-path = / etc-php-iniの保存場所を明確に示すことにしました。
それでは:
make install all
/etc/php-fpm.confファイルも編集する必要があります。 特に、私は編集しました:
Pid file <value name="pid_file">/var/run/php-fpm.pid</value> Error log file <value name="error_log">/var/log/php-fpm.log</value>
最初のケースでは、プロセスのpidファイルが置かれる場所を指定し、2番目のケースでは、ログを書き込む場所を指定します。
<value name="listen_address">127.0.0.1:9000</value>
phpがリッスンするアドレスとポート。 これは、nginxを設定するときに使用するものです。 または、ソケットへのパスがここに示されます-例えば: <value name = "listen_address"> / tmp / php-fpm.sock </ value>
そして、プロセス自体を開始するために誰に代わって設定する必要があります:
<code>プロセスのUnixユーザー <値名= "ユーザー"> </値> Unixプロセスグループ <値名= "グループ"> </値>
これはあなたの裁量です。主なことは、権利が適切であることです。
設定を掘ることもできます。各行にはコメントが付いており、簡単に把握できます。
Nginx
上で述べたように、nginxのインストールとインストールは、記事で書かれているもの、上で示したリンクと実質的に違いはありません。 唯一のものは、Apacheがないためプロキシを使用しないことです。したがって、proxy_ *行は重要ではありません。 まあ、設定の非常に詳細、たとえば、worker_connectionsやworker_processesなど ニーズに特に依存します。 もちろん、ここではいくつかの微妙な点も考慮する必要があるため、手動で収集しました。 それらがなければ、それで十分です:
yum install nginx
httpブランチの設定の一部の例を示します。
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"'
'"$gzip_ratio"'
'"$got" "$sent_http_set_coockie"';
access_log /var/log/nginx/access.log main;
'"$取得" "$ sent_http_set_coockie"'; -インストールされたcustom-nginx-session-moduleモジュール(Cookieを決定し、一意のセッションを設定するためのモジュール)でログを記録するためにこれが必要です。 誰かが興味を持っている場合は、後でインストールと設定のプロセスについて説明できます。 そして、上記のものは通常のロギングです。
仮想ホストの使用も暗示されていたため、便宜上、これを別のファイルに入れることにしました。
include /etc/nginx/sites-enabled/*;
例を挙げましょう-ファイル/etc/nginx/sites-enabled/example.com:
server {
listen 80;
server_name example.com www.example.com;
# ,
access_log /var/log/examplecom-access.log;
error_log /var/log/example.com-error.log;
#
root /path/to/www;
# nginx
location ~* ^.+\.(jpg|jpeg|gif|png|ico|css|js|bmp)$ {
root /path/to/www;
}
UPD: habrayuzer AlexeyKからの注意 :
同じルートがある場合、行は意味をなしません。実際に、nginxはこれらのファイルをデフォルトで提供します。ハンドラーをこれらのファイルに掛けない場合:)この場所にさらに有効期限を置くことは理にかなっています。 (静的ファイルが本当に多い場合)
# ? :)
location ~ /.svn/ {
deny all;
}
# index.php,
if (!-e $request_filename) {
rewrite ^.*$ /index.php last;
}
# , .php fastCGI (php-fpm)
location ~ \.php$ {
# , php-fpm.conf
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /path/to/www$fastcgi_script_name;
include fastcgi_params;
}
}
UPD:または、darivush habrayuzerが示唆したように :
fastcgi_pass 127.0.0.1:9000;
fastcgi_pass unix:/tmp/fastcgi_sock;
置き換え
fastcgi_pass unix:/tmp/fastcgi_sock;
、Unixソケットは127.0.0.1よりも望ましいため。 さて、それに応じてパス/ tmp / fastcgi_sockは正しいはずです、それはセクションの/etc/php-fpm.confで設定されます
<値の名前= "listen_address">
もちろん、これは標準的な最小構成の例であり、他のすべてはタスクに応じて編集/編集に適合します。
何も忘れていないようです。 php-fpmおよびnginxを実行します。
/etc/init.d/php-fpm start
/etc/init.d/nginx start
そして、私は問題に遭遇しました-必要に応じてパッチを適用しなかったので、php-fpmは完全に起動を拒否し、php-cgiを実行するときに間違ったパラメータを宣誓しました。 当時、この問題の解決策を見つけることができませんでした。 しばらくして、PHP 5.2.11バージョンがリリースされたときにすべてが決定されました。同じバージョンのパッチを適用し、上記のように構成およびインストールしました。 その後、すべてが問題なく開始され、機能しました。
phpを手動で作成する必要があるため(上記で説明したすべての微妙な点のため)、標準リポジトリから必要なものをすべてインストールして問題を解決しようとしませんでした。 おそらくこれが機能し、インストールプロセスが簡単になります。
ご清聴ありがとうございました。 私は自分のブログに記事を投稿しました。なぜなら、タスクの観点から自転車を発明するふりをするつもりはないからです。 これは私にとっては補助的なマニュアルであり、必要に応じて必要になるかもしれません。 まあ、それは初心者には十分でしょう。 しかし、この記事が役に立つと思われる場合は、 nginxブログに喜んで転送します。 計画では、memcached、およびpinbaだけでなく、custom-nginx-session-moduleのセットアップ(後で必要な理由を説明します)についても話し合う予定です。
はい、提案、コメント、貴重なアドバイスを歓迎します。
UPD:nginxに移植されました。