Nginx PHP-FPM Kurulumu ve Yapılandırması
Bu rehberde ne öğreneceksiniz?
Bu rehber, Ubuntu üzerinde Nginx ile PHP-FPM kullanarak PHP dosyalarını güvenli ve verimli şekilde çalıştırmayı anlatır.
Her uygulama için ayrı PHP işlem havuzları oluşturmayı ve Nginx ile doğru bağlantıyı kurmayı öğreneceksiniz.
Son adımda yapılandırmayı test ederek sistemin doğru çalıştığını doğrulayacaksınız.
Teknik Özet
Ana konu: Nginx üzerinde PHP-FPM ile PHP çalıştırma
Amaç: Nginx’in PHP’yi doğrudan çalıştıramaması sorununu çözmek
Kazanım: Daha düşük kaynak tüketimi, daha yüksek performans ve izolasyon
İzlenen adımlar:
- PHP-FPM kurulumu
- Uygulamaya özel PHP-FPM havuzu oluşturma
- Nginx’i PHP-FPM soketiyle yapılandırma
- Kurulumu test etme
1. PHP-FPM Kurulumu
- Nginx, PHP dosyalarını tek başına çalıştıramaz.
Bu nedenle PHP-FPM kullanılır.
sudo apt-get install php8.1-fpm
- Bu komut, PHP 8.1 için PHP-FPM servislerini sisteme kurar.
- Kurulumdan sonra servis durumunu kontrol edin.
sudo systemctl status php8.1-fpm
- Bu komut, PHP-FPM servisinin aktif olup olmadığını gösterir.
2. Özel PHP-FPM Havuzu (Pool) Oluşturma
-
Her site için ayrı PHP havuzu kullanmak güvenlik ve performans sağlar. Bir sitedeki sorun diğerlerini etkilemez.
-
Uygulamaya özel kullanıcı oluşturma
sudo groupadd rabisu_app
sudo useradd -g rabisu_app rabisu_app
- Bu kullanıcı, yalnızca ilgili PHP havuzu için çalışır.
- Havuz yapılandırma dosyasını oluşturma
cd /etc/php/8.1/fpm/pool.d
sudo nano rabisu_pool.conf
- Bu dosya, yeni PHP-FPM havuzunun ayarlarını içerir.
[rabisu_site]
user = rabisu_app
group = rabisu_app
listen = /var/run/php8.1-fpm-rabisu-site.sock
listen.owner = www-data
listen.group = www-data
php_admin_value[disable_functions] = exec,passthru,shell_exec,system
php_admin_flag[allow_url_fopen] = off
pm = dynamic
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 35
pm.process_idle_timeout = 10s
- Bu yapılandırma, dinamik işlem yönetimi kullanan izole bir PHP havuzu oluşturur.
- Değişiklikleri uygulama
sudo systemctl restart php8.1-fpm
- Bu komut, yeni havuzu aktif hale getirir.
3. Nginx Sunucu Bloğunu Yapılandırma
- Nginx, PHP isteklerini PHP-FPM soketi üzerinden iletir.
server {
listen 80;
server_name uygulama.rabisu.cloud;
root /var/www/rabisu_app;
index index.php index.html;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php8.1-fpm-rabisu-site.sock;
}
}
- Bu yapılandırma, .php uzantılı istekleri tanımlı PHP-FPM havuzuna yönlendirir.
Yapılandırmayı test edin ve Nginx’i yeniden başlatın.
sudo nginx -t
sudo systemctl restart nginx
- Bu komutlar, yapılandırma hatası olup olmadığını kontrol eder.
4. Yapılandırmayı Test Etme
- Kurulumu doğrulamak için basit bir PHP dosyası oluşturun.
echo "<?php phpinfo(); ?>" | sudo tee /var/www/rabisu_app/info.php
- Bu dosya, PHP-FPM üzerinden çalışan PHP ortamını gösterir.
- Tarayıcıdan http://uygulama.rabisu.cloud/info.php adresine gidin.
-
Environment bölümünde USER değeri rabisu_app ise kurulum başarılıdır.
-
Güvenlik için testten sonra info.php dosyasını silin.
Sıkça Sorulan Sorular
1. Neden Unix Socket kullanmalıyım? Aynı sunucuda TCP bağlantısına göre daha az gecikme oluşturur.
2. 502 Bad Gateway hatası neden oluşur? Genellikle fastcgi_pass ile listen yolları uyuşmadığında görülür.
3. Birden fazla PHP sürümü çalıştırılabilir mi? Evet, her PHP sürümü için ayrı PHP-FPM havuzu tanımlanabilir.
4. pm = dynamic ile pm = static farkı nedir? Dynamic, trafiğe göre işlem sayısını ayarlar. Static sabit sayıda işlem çalıştırır.
Sonuç
Ubuntu üzerinde Nginx ve PHP-FPM birlikte kullanıldığında daha güvenli ve yüksek performanslı bir yapı elde edilir. Ayrı PHP havuzları sayesinde uygulamalar izole çalışır ve kaynaklar daha verimli kullanılır. Bu mimari, modern ve ölçeklenebilir yapıyı Rabisu Bulut platformunda deneyebilirsiniz.