GNU/Linux >> Belajar Linux >  >> FreeBSD

Migrasi dari Apache ke Nginx di FreeBSD

Dalam artikel ini saya akan memberi tahu Anda bagaimana saya memigrasikan server saya yang menjalankan Apache+PHP ke Nginx+PHP-fpm tanpa mematikan prosesnya.

Skenario

[Lewati Intro]

Pada tahun 2020, selama hari-hari pertama pandemi, kami mengadakan pertemuan untuk persiapan karantina yang akan datang. Rencananya adalah untuk terus memindahkan semua siswa saat ini ke pendidikan jarak jauh penuh. Saya telah bertanya berapa banyak siswa tambahan yang harus saya harapkan dan mereka berkata tentang ganda. Selanjutnya, saran saya hanya menggandakan sumber daya perangkat keras (ram &cpu core) karena:

  • untungnya saya punya cukup ruang -dalam hal sumber daya perangkat keras- untuk pertumbuhan seperti itu.
  • karantina akan berakhir hanya dalam dua minggu, paling lama sebulan. Kemudian siswa kami akan kembali ke presentasi dan saya akan mendapatkan kembali sumber daya tambahan tersebut.

Selama dua minggu pertama karantina awal saya harus meningkatkan sumber daya perangkat keras lebih dan lebih (tetapi tidak menduplikasinya) dan solusi itu terbukti tidak cukup. Setelah bulan pertama, dengan ujian yang semakin dekat setiap hari, dan krisis covid19 yang mengancam bahkan hingga musim panas, saya harus memikirkan yang nyata larutan. Juga solusi ini perlu dilakukan dengan waktu henti yang lebih sedikit … kita sudah memiliki cukup moodle crash.

Sekali lagi, beruntung saya masih memiliki beberapa GB RAM dan inti CPU yang tersedia. Saya telah menyiapkan VM kecil baru (1 inti dan 1gb RAM) dengan salinan salah satu moodle produksi saya, untuk menguji berbagai hal hingga berhasil. Setelah saya mendapatkan pengaturan yang melakukannya, saya dapat membuat perubahan tanpa downtime. Perubahan terakhir terdiri dari shutdown apache dan mulai nginx

Pemasangan

Nginx

Jika Anda membaca beberapa posting saya sebelumnya di FreeBSD, saya lebih memilih port daripada paket biner, jadi untuk menginstal nginx jalankan:

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

Php-fpm

Cara default untuk menjalankan kode php di dalam Apache adalah mengaktifkan modul mod_php. Tidak ada (setidaknya yang saya tahu) modul nginx yang dapat dimuat untuk PHP, jadi Anda harus mengaktifkan FastCGI Process Manager. Jika Anda menginstal PHP dengan opsi default, Anda mungkin sudah memilikinya, tetapi periksa kembali:

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

Jika FPM tidak dipilih, pilih, lalu jalankan:

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

Konfigurasi

PHP-Fpm

Buat, jika tidak ada file /usr/local/etc/php-fpm.d/www.conf saya salin www.conf.default lalu edit:

[/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

Gulir ke bawah ke opsi yang relevan:

  • user/group :harus pengguna dan grup yang sama dengan apache, www untuk saya.
  • listen :karena saya hanya melayani php secara lokal, saya menggunakan soket unix:/var/run/php-fpm.sock;
  • pm :dynamic baik-baik saja, tetapi Anda mungkin perlu mengubah dan menyetel parameter ini. Lihat komentar di file.

Terakhir, mari aktifkan dan mulai 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

File nginx.conf bisa sebesar (atau dibagi menjadi beberapa bagian) seperti httpd.conf dari apache. Khususnya jika Anda memiliki beberapa VirtualHost, opsi yang relevan adalah (setidaknya bagi saya di mana):

  • user :pengguna yang sama dengan proses apache, misalnya www.
  • worker_process :ini harus sesuai dengan jumlah inti CPU
  • client_max_body_size :harus cocok dengan nilai post_max_size dan upload_max_size di php.ini.
  • root :sama dengan DocumentRoot dari VirtualHost Anda di Apache httpd.conf, yaitu /usr/local/www/
  • Tambahkan bagian berikutnya untuk memberi tahu nginx cara mengirim kode php Anda ke layanan php-fpm:
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;
        }

Opsi lain dalam file contoh nginx.conf cukup jelas. Tentu saja, ada banyak hal lain yang dapat Anda sesuaikan, tetapi ini akan sangat membantu.

Akhirnya kita dapat mengaktifkan nginx, menghentikan Apache dan memulai nginx (dalam urutan itu atau nginx akan dapat mendengarkan di port http/https):

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

Jika terjadi kesalahan

Perhatikan bahwa kami belum menonaktifkan Apache. Jika terjadi kesalahan, hentikan nginx dan mulai Apache24 yang Anda tahu sudah berfungsi dengan baik:

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

Jika Anda yakin semuanya berfungsi seperti yang diharapkan, Anda dapat menonaktifkan apache.


FreeBSD
  1. Cara Menginstal Stack Nginx, MariaDB dan PHP (FEMP) di FreeBSD

  2. Cara Menginstal Stack Apache, MariaDB dan PHP (FAMP) di FreeBSD

  3. Cara Menginstal tumpukan Apache, MariaDB, dan PHP (FAMP) di FreeBSD 11

  1. Bagaimana Cara Downgrade Php Dari 5.3.x Menjadi 5.2.x?

  2. Cara menghentikan nginx dari menggunakan port 80

  3. getpwnam(www) gagal di /etc/nginx/nginx.conf

  1. Menginstal Server Web di FreeBSD 6.0 dengan Apache 2.2, MySQL 5.0 dan PHP 5 – Bagian 5

  2. Menginstal Server Web di FreeBSD 6.0 dengan Apache 2.2, MySQL 5.0 dan PHP 5 – Bagian 4

  3. Menginstal Server Web di FreeBSD 6.0 dengan Apache 2.2, MySQL 5.0 dan PHP 5 – Bagian 3