# 09. Optimalisasi Nginx Web Server dan PHP-FPM

### Setting Nginx Worker

untuk setting nginx worker, login ke vps terlebih dahulu dengan ssh public key / password

[![Screenshot 2023-10-31 at 01.35.44.png](https://book.najamudinridha.com/uploads/images/gallery/2023-10/scaled-1680-/screenshot-2023-10-31-at-01-35-44.png)](https://book.najamudinridha.com/uploads/images/gallery/2023-10/screenshot-2023-10-31-at-01-35-44.png)

kemudian edit nginx config dengan perintah `sudo nano /etc/nginx/nginx.conf` kita bisa menyesuaikan konfigurasi `worker_prosesses auto;` agar menyesuaikan dengan core vps dan `worker_connections 1024;` untuk setiap koneksi yang dapat di handle worker process

[![Screenshot 2023-10-31 at 01.36.35.png](https://book.najamudinridha.com/uploads/images/gallery/2023-10/scaled-1680-/screenshot-2023-10-31-at-01-36-35.png)](https://book.najamudinridha.com/uploads/images/gallery/2023-10/screenshot-2023-10-31-at-01-36-35.png)

### Setting Max Upload dan Timeout di Nginx VirtualHost

untuk setting max upload dan timeout di nginx, edit virtualhost yang diinginkan dengan perintah berikut :

```bash
# sesuaikan nama virtualhost anda
sudo nano /etc/nginx/sites-enabled/idrive.id
```

[![Screenshot 2023-10-31 at 01.39.07.png](https://book.najamudinridha.com/uploads/images/gallery/2023-10/scaled-1680-/screenshot-2023-10-31-at-01-39-07.png)](https://book.najamudinridha.com/uploads/images/gallery/2023-10/screenshot-2023-10-31-at-01-39-07.png)

kemudian tambahkan configurasi berikut :

```nginx
# max client uploud
client_max_body_size 128M;

# max client timeout dan proxy timeout
client_body_timeout 360;
proxy_read_timeout 360;
proxy_connect_timeout 360;
proxy_send_timeout 360;
```

[![Screenshot 2023-10-31 at 01.39.34.png](https://book.najamudinridha.com/uploads/images/gallery/2023-10/scaled-1680-/screenshot-2023-10-31-at-01-39-34.png)](https://book.najamudinridha.com/uploads/images/gallery/2023-10/screenshot-2023-10-31-at-01-39-34.png)

Test konfigurasi nginx dengan perintah `sudo nginx -t` dan restart nginx service dengan perintah `sudo service nginx restart`

### Setting Memory Limit, Max Upload dan Timeout di PHP-FPM

untuk setting memory limit, max upload dan timeout di php, edit file `php.ini` lokasinya tergantung system operation yang digunakan, misal kita edit dengan lokasi berikut `sudo nano /etc/php/7.4/fpm/php.ini` edit file konfigurasi berikut :

```bash
# memory limit php process
memory_limit = 128M

# maksimal script parsing request
max_input_time = 360

# maksimal php execution time
max_execution_time = 360

# maksimal upload file
upload_max_filesize = 128M

# maksimal php upload single request
max_file_upload = 20

# maksimal post data php
post_max_size = 128M
```

[![Screenshot 2023-10-31 at 01.42.41.png](https://book.najamudinridha.com/uploads/images/gallery/2023-10/scaled-1680-/screenshot-2023-10-31-at-01-42-41.png)](https://book.najamudinridha.com/uploads/images/gallery/2023-10/screenshot-2023-10-31-at-01-42-41.png)

### Edit &amp; Optimalkan PHP Pool FPM PHP Process Manager

untuk optimalkan php pool pada php-fpm, kita bisa menambahkan atau merubah file di `sudo nano /etc/php/7.4/fpm/pool.d/www.conf`

[![Screenshot 2023-10-31 at 01.49.15.png](https://book.najamudinridha.com/uploads/images/gallery/2023-10/scaled-1680-/screenshot-2023-10-31-at-01-49-15.png)](https://book.najamudinridha.com/uploads/images/gallery/2023-10/screenshot-2023-10-31-at-01-49-15.png)

kita bisa menyesuaikan sesuai dengan kapasitas ram dan cpu dari vps kita, dengan contoh configurasi berikut :

```bash
# maksimal proses turunan php pm
pm.max_children = 10

# default start proses turunan php pm
pm.start_servers = 5

# minimal spare server proses turunan php pm
pm.min_spare_servers = 3

# maksimal spare server proses turunan php pm
pm.max_spare_servers = 5

# php pm idle timeout 
pm.process_idle_timeout = 10s;
```

untuk melakukan pengecekan berapa proses yang jalan dan berapa penggunaan ram per proses dapat jalankan dengan perintah berikut :

```bash
# cek proses php-fpm yang jalan
ps -ylC php7.4-fpm --sort:rss

# cek rata-rata penggunaan memory proses php-fpm
ps -eo size,pid,user,command --sort -size | awk '{ hr=$1/1024 ; printf("%13.2f Mb ",hr) } { for ( x=4 ; x<=NF ; x++ ) { printf("%s ",$x) } print "" }' | grep php-fpm
```

[![Screenshot 2023-10-31 at 01.50.34.png](https://book.najamudinridha.com/uploads/images/gallery/2023-10/scaled-1680-/screenshot-2023-10-31-at-01-50-34.png)](https://book.najamudinridha.com/uploads/images/gallery/2023-10/screenshot-2023-10-31-at-01-50-34.png)

setelah menyesuaikan perubahan pada pool php di `/etc/php/7.4/fpm/pool.d/www.conf` restart php-fpm dan nginx dengan perintah `sudo service php7.4-fpm restart` dan lakukan pengecekan kembali jumlah service php process manager dengan perintah sebelumnya

[![Screenshot 2023-10-31 at 01.52.50.png](https://book.najamudinridha.com/uploads/images/gallery/2023-10/scaled-1680-/screenshot-2023-10-31-at-01-52-50.png)](https://book.najamudinridha.com/uploads/images/gallery/2023-10/screenshot-2023-10-31-at-01-52-50.png)

<iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="allowfullscreen" frameborder="0" src="https://www.youtube.com/embed/Jav7YNS03RM?si=q_DcBWXANwG6R5XE" style="width: 100%; aspect-ratio: 16/10;" title="YouTube video player"></iframe>