GNU/Linux >> Linux の 問題 >  >> FreeBSD

FreeBSDでのApacheからNginxへの移行

この記事では、Apache+PHPを実行しているサーバーをプロセスを中断せずにNginx+PHP-fpmに移行した方法を説明します。

シナリオ

[イントロをスキップ]

2020年、パンデミックの最初の数日間、次の検疫に備えて会議が開かれました。計画は、現在の学生全員を完全な遠隔教育に移行し続けることでした。何人の生徒を追加で期待すべきか尋ねたところ、彼らはダブルについて話しました。次に、私の提案は、ハードウェアリソース(RAMおよびCPUコア)を複製することでした。理由は次のとおりです。

  • 幸いなことに、ハードウェアリソースの観点から、この種の成長に十分な余地があります。
  • 検疫はわずか2週間、最大で1か月で終了します。その後、生徒はプレゼンテーションに戻り、私はそれらの追加のリソースを取り戻します。

最初の検疫の最初の2週間で、ハードウェアリソースをどんどん増やす必要があり(ただし、それらを複製することはできませんでした)、そのソリューションでは不十分であることがわかりました。最初の1か月後、毎日試験が近づき、covid19の危機が夏まで続くと脅迫されたため、私は本物のを考えなければなりませんでした。 解決。また、このソリューションはダウンタイムを最小限に抑えて実行する必要があります …すでに十分な数のmoodleクラッシュがありました。

繰り返しになりますが、幸運なことに、RAMとCPUコアの数Gbsがまだ利用可能です。本番環境の1つのMoodleのコピーを使用して、小さな新しいVM(1コアと1 GBのRAM)をセットアップし、動作するまでテストしました。それを行う設定を取得したら、ダウンタイムなしで変更を加えることができます。最後の変更は、Apacheのシャットダウンとnginxの開始です

インストール

Nginx

FreeBSDでの私の以前の投稿のいくつかを読んだ場合、私はバイナリパッケージよりもポートを好むので、nginxrunをインストールするには:

# cd /usr/ports/www/nginx
# make install clean

PHP-fpm

Apache内でphpコードを実行するデフォルトの方法は、mod_phpモジュールを有効にすることです。 PHP用のnginxロード可能モジュールは(少なくとも私が知っている限り)ないため、fastCGIProcessManagerを有効にする必要があります。デフォルトのオプションを使用してPHPをインストールした場合は、おそらくすでにそれを持っていますが、再確認してください:

[/usr/ports/www/nginx]# cd ../../lang/php74
[/usr/ports/lang/php74]# make config

FPMが選択されていない場合は、FPMを選択して、次のコマンドを実行します。

[/usr/ports/lang/php74]# make install clean

構成

PHP-Fpm

ファイル/usr/local/etc/php-fpm.d/www.confが存在しない場合は、www.conf.defaultをコピーして作成し、編集します。

[/usr/ports/lang/php74]# cd /usr/local/etc/php-fpm.d/
[/usr/local/etc/php-fpm.d/]# cp www.conf.default www.conf
[/usr/local/etc/php-fpm.d/]# ee www.conf

関連するオプションまで下にスクロールします:

  • user/group :apacheと同じユーザーとグループである必要があります。wwwforme。
  • listen :ローカルでのみphpを提供しているため、unixソケットを使用しています:/var/run/php-fpm.sock;
  • pmdynamic は問題ありませんが、このパラメータを微調整して調整する必要がある場合があります。ファイル内のコメントを見てください。

最後に、php-fpmを有効にして起動しましょう:

[/usr/local/etc/php-fpm.d/] /usr/local/etc/rc.d/php-fpm enable
[/usr/local/etc/php-fpm.d/] /usr/local/etc/rc.d/php-fpm start

Nginx

nginx.confファイルは、apacheのhttpd.confと同じ大きさ(または同じ数の部分に分割)である可能性があります。特に、複数のVirtualHostがある場合、関連するオプションは次のとおりです(少なくとも私にとっては):

  • user :apacheプロセスと同じユーザー(例:www。
  • worker_process :これはCPUコアの数と一致する必要があります
  • client_max_body_sizepost_max_sizeの値と一致する必要があります およびupload_max_size php.iniで。
  • rootDocumentRootに等しい Apache httpd.confのVirtualHostから、つまり/ usr / local / www /
  • 次のセクションを追加して、phpコードをphp-fpmサービスに送信する方法をnginxに指示します。
location ~ [^/]\.php(/|$) {
            fastcgi_split_path_info     ^(.+\.php)(/.+)$;
            fastcgi_index               index.php;
            fastcgi_pass                unix:/var/run/php-fpm.sock;
            include                     fastcgi_params;
            fastcgi_param  PATH_INFO    $fastcgi_path_info;
            fastcgi_param  SCRIPT_FILENAME      $document_root$fastcgi_script_name;
            fastcgi_read_timeout 120;
            fastcgi_send_timeout 120;
        }

nginx.confサンプルファイルの他のオプションは、ほとんど自明です。もちろん、微調整できることは他にもたくさんありますが、これで魔法がかかります。

最後に、nginxを有効にし、apacheを停止し、nginxを開始します(この順序で、またはnginxはhttp / httpsポートでリッスンできます):

# /usr/local/etc/rc.d/nginx enable
# /usr/local/etc/rc.d/apache24 stop
# /usr/local/etc/rc.d/nginx start

問題が発生した場合

まだapacheを無効にしていないことに注意してください。何か問題が発生した場合は、nginxを停止し、apache24を起動して、すでに正常に機能していることがわかっていることを確認してください。

# /usr/local/etc/rc.d/apache24 stop ; /usr/local/etc/rc.d/nginx start

すべてが期待どおりに機能していることを確認したら、apacheを無効にできます。


FreeBSD
  1. Apache 2.2、MySQL 5.0、およびPHP5を使用したFreeBSD6.0へのWebサーバーのインストール–パート5

  2. Apache 2.2、MySQL 5.0、およびPHP5を使用したFreeBSD6.0へのWebサーバーのインストール–パート4

  3. Apache 2.2、MySQL 5.0、およびPHP5を使用したFreeBSD6.0へのWebサーバーのインストール–パート3

  1. Apache 2.2、MySQL 5.0、およびPHP5を使用したFreeBSD6.0へのWebサーバーのインストール–パート2

  2. Apache 2.2、MySQL 5.0、およびPHP5を使用したFreeBSD6.0へのWebサーバーのインストール–パート1

  3. FreeBSD 11 に Apache、MariaDB、および PHP (FAMP) スタックをインストールする方法

  1. FreeBSDにNginx、MariaDB、PHP(FEMP)スタックをインストールする方法

  2. FreeBSDにApache、MariaDB、PHP(FAMP)スタックをインストールする方法

  3. nginx がポート 80 を使用しないようにする方法