Linux ­Kurulu­m ve Y­onetim­i
  • Döküman Hakkında
  • Linux ve GNU'nun Geçmişi
    • CentOS, Debian ve FreeBSD Ana Sürümlerin Farkları
  • Temel Komutlar
    • Temel Terminal Komutları
    • Yardım Dosyaları
    • Dosya İzinleri, Yetkiler, Kullanıcılar ve Gruplar
    • Dosya Düzenleme Araçları
      • nano ve pico
      • vi
    • Sıkıştırılmış Dosyalar
  • Standart Girdi ve Çıktı
    • Standart Çıktı
    • Standart Girdi
    • UNIX Pipeline
    • Olmazsa Olmaz: stdio.h
    • Standart Hata ve File Descriptor
    • Forkbomb
    • Named Pipe
  • Gelişmiş Terminal Komutları
    • Tarih ve Saat Ayarlama
    • Sistem Yükünü İzleme
    • patch ve diff
    • xargs
    • awk ve sed
    • egrep ve Regular Expressions
    • rename
    • Imagemagick ve Görüntü Dosyaları
    • wget
    • Python ile Dosya Sunuculuğu
  • Temel Dağıtımlar
    • RHEL Tabanlı (CentOS, Rocky, Alma)
      • rpm Paketleri
      • DNF Paket Yöneticisi
      • Repo Ayarları
      • Network Ayarları
    • Debian
      • deb Paketleri
      • apt Paket Yöneticisi
      • Repo Ayarları
      • Network Ayarları
    • FreeBSD
      • Ports ve pkg Yönetimi
      • Güncelleme Teknikleri
      • Network Ayarları
    • Arch Linux
      • pacman ve AUR
      • Network Ayarları
    • Ortak Network Dosyaları
  • SSH
    • Uzak Sunucuya Bağlanma
    • sshd Sunucu Ayarları
    • Private ve Public Anahtarlar
    • Güvenli Dosya Aktarımı
    • sshfs
  • Kernel Boot
    • Sunucu Başlangıcına Genel Bakış
    • Çekirdeğin Yüklenmesi ve Boot Seçenekleri
    • Çekirdek Parametreleri
    • Bootloader Nedir?
  • User Space
    • Başlangıç: Init
    • Init Versiyonunu Belirlemek
    • System V
      • Servislerin Yönetimi
      • Çalışma Seviyeleri (Run Levels)
      • Örnek System V Servis Oluşturma
    • systemd
      • Servislerin Yönetimi
      • Birimler ve Birim Tipleri
      • Örnek systemd Servis Oluşturma
    • Acil Durumlar ve Tek Kullanıcı Modu
  • BASH Programlama
    • Döngüler ve Diğer Kontrol Yöntemleri
    • Menüler
  • Log Dosyaları
    • Log İnceleme ve Filtreleme
  • İnternet Servisleri
    • Bir sayfanın İnternetteki Serüveni
    • Nameserver Servisleri
    • Apache
    • PHP-FPM
    • FTP/FTPS/SFTP
      • vsftpd
      • ProFTPD
      • SFTP
      • Komut Satırından ftp Kullanımı
  • Zamanlanmış Görevler
    • crontab
    • at
  • Veritabanı
    • MySQL
      • MySQL Kurulumu
      • MySQL Servisini Çalıştırmak
      • Veritabanı ve Tablo oluşturmak
      • SQL Tablosuna Veri Eklemek
      • Temel SQL Sorgularına Giriş
        • Birinci bölüm
      • mysqldump ile yedekleme
      • Replikasyon teknikleri
      • Yedekleri içeri alma
    • PostgreSQL
      • PostgreSQL Kurulumu
      • Temel Yapılandırma
      • Temel Kullanım
    • MongoDB
      • MongoDB Kurulumu
      • Temel Yapılandırma
      • Temel Kullanım
    • Redis
      • Redis Kurulumu
      • Temel Yapılandırma
      • Temel Kullanım
  • Temel Network Yapılandırması
  • Gelişmiş Network Komutları
    • ip
    • ifconfig
    • route
    • ping
    • traceroute
    • dig
    • nslookup
    • netcat
    • nmap
    • tcpdump
    • Wireshark (Giriş)
    • Bantgenişliği Ölçümü
  • Güvenlik
    • Firewalld
    • IPTables
      • Temel İzinler
      • IP ve Port Engelleme
    • selinux
  • Disk Sistemleri
    • ext
    • zfs
    • lvm
  • RAID
    • RAID Biçimleri
    • Verinin Disklere Yayılması
    • Cache
    • Terimler ve Tavsiyeler
  • Örnek Kurulumlar ve Modern Yaklaşımlar
    • CentOS 7 Tam Sistem Kurulumu (Arşiv)
    • AlmaLinux ile Hosting Ortamı Kurulumu
    • Ubuntu ile Hosting Ortamı Kurulumu
    • Modern Hosting Yaklaşımları (PaaS, Coolify vb.)
  • Konteynerleştirme (Docker / Podman)
  • Yapılandırma Yönetimi (Ansible)
  • İzleme ve Uyarı (Prometheus / Grafana)
  • Nginx Web Sunucusu
  • Kubernetes (Giriş)
  • PCI-DSS ve Linux Sistemleri
  • İndeks
  • Kaynaklar
Powered by GitBook
On this page
  • Kurulum
  • Servis Yönetimi (systemctl)
  • PHP-FPM Havuz (Pool) Yapılandırması
  • Web Sunucusu Yapılandırması
  1. İnternet Servisleri

PHP-FPM

PHP, web geliştirmede yaygın olarak kullanılan popüler bir betik dilidir. PHP kodunu bir web sunucusu (Apache, Nginx vb.) ile çalıştırmanın çeşitli yolları vardır. Eski yöntemlerden biri Apache'nin mod_php modülünü kullanmaktı, ancak bu yöntem genellikle daha az esnek ve performanslıdır.

Modern ve önerilen yaklaşım, PHP-FPM (FastCGI Process Manager) kullanmaktır. PHP-FPM, PHP için alternatif bir FastCGI daemon'ıdır ve web sunucusundan bağımsız olarak çalışır. Web sunucusu, gelen PHP isteklerini FastCGI protokolü üzerinden PHP-FPM'e iletir, PHP-FPM isteği işler ve sonucu web sunucusuna geri gönderir.

PHP-FPM'in Avantajları:

  • Performans: Genellikle mod_php'den daha iyi performans sunar.

  • Esneklik: Farklı web siteleri veya uygulamalar için ayrı PHP-FPM havuzları (pools) tanımlanabilir. Her havuz farklı kullanıcı/grup kimliğiyle, farklı PHP ayarlarıyla (php.ini) ve farklı kaynak limitleriyle çalıştırılabilir. Bu, güvenlik ve izolasyonu artırır.

  • Kaynak Yönetimi: İşlem yönetimi (process management - pm) ayarları (static, dynamic, ondemand) ile kaynak kullanımı daha iyi kontrol edilebilir.

  • Web Sunucusu Bağımsızlığı: Hem Apache hem de Nginx gibi farklı web sunucularıyla kullanılabilir.

Kurulum

PHP-FPM ve ilgili PHP paketleri genellikle dağıtımın paket yöneticisi ile kurulur. PHP sürümü (örn. 8.1, 8.2) dağıtıma göre değişir. Belirli bir sürümü kurmak için ek depolar (örn. REMI, Ondřej Surý PPA) gerekebilir.

  • RHEL Tabanlı (dnf): (Genellikle remi-release deposu etkinleştirildikten sonra)

    # Örnek: PHP 8.2 ve yaygın modülleri kurma
    sudo dnf module enable php:remi-8.2 -y 
    sudo dnf install php php-fpm php-mysqlnd php-gd php-xml php-mbstring php-intl -y
  • Debian Tabanlı (apt): (Genellikle ondrej/php PPA'sı eklendikten sonra veya dağıtımın kendi sürümü)

    # Örnek: PHP 8.2 ve yaygın modülleri kurma
    sudo apt update
    sudo apt install php8.2 php8.2-fpm php8.2-mysql php8.2-gd php8.2-xml php8.2-mbstring php8.2-intl -y

Servis Yönetimi (systemctl)

PHP-FPM servisi systemd ile yönetilir. Servis adı genellikle PHP sürümünü içerir.

# Servisi başlatma (Örnek: PHP 8.2)
sudo systemctl start php8.2-fpm 

# Sistem başlangıcında otomatik çalışmasını sağlama
sudo systemctl enable php8.2-fpm

# Servisin durumunu kontrol etme
sudo systemctl status php8.2-fpm

# Yapılandırma değişikliğinden sonra yeniden başlatma
sudo systemctl restart php8.2-fpm 

PHP-FPM Havuz (Pool) Yapılandırması

PHP-FPM, farklı ayarlar ve kullanıcılarla çalışabilen havuzlar (pools) kullanır. Varsayılan havuz genellikle www olarak adlandırılır ve yapılandırması /etc/php/<sürüm>/fpm/pool.d/www.conf (Debian/Ubuntu) veya /etc/php-fpm.d/www.conf (RHEL/CentOS) gibi dosyalarda bulunur.

Her web sitesi veya uygulama için ayrı bir havuz oluşturmak iyi bir pratiktir.

Örnek Havuz Yapılandırması (/etc/php-fpm.d/example.com.conf):

[example.com] ; Havuz adı

; Çalıştırılacak Kullanıcı ve Grup
user = example_user
group = example_group

; Dinlenecek Soket (Unix soketi önerilir)
listen = /run/php-fpm/example.com.sock 

; Soket Sahibi ve Grubu (Web sunucusunun erişebilmesi için önemlidir)
listen.owner = nginx ; veya apache, httpd, www-data vb.
listen.group = nginx
listen.mode = 0660

; İşlem Yönetimi (Process Management)
pm = dynamic ; veya ondemand, static
pm.max_children = 10     ; Aynı anda çalışacak maksimum işlem sayısı
pm.start_servers = 2     ; Başlangıçta çalıştırılacak işlem sayısı (dynamic için)
pm.min_spare_servers = 1 ; Minimum boşta bekleyecek işlem sayısı (dynamic için)
pm.max_spare_servers = 3 ; Maksimum boşta bekleyecek işlem sayısı (dynamic için)
; pm.process_idle_timeout = 10s; ; Boştaki işlemin ne kadar süre sonra kapatılacağı (ondemand için)
; pm.max_requests = 500    ; Bir işlemin kaç istekten sonra yeniden başlatılacağı

; PHP Ayarları (isteğe bağlı, php.ini'yi geçersiz kılar)
; php_admin_value[memory_limit] = 128M
; php_admin_flag[log_errors] = on
; php_admin_value[error_log] = /var/log/php-fpm/example.com-error.log

Yeni bir havuz dosyası oluşturduktan veya mevcut olanı değiştirdikten sonra PHP-FPM servisini yeniden başlatmanız (sudo systemctl restart php<sürüm>-fpm) gerekir.

Web Sunucusu Yapılandırması

Web sunucusunun, PHP dosyalarına gelen istekleri ilgili PHP-FPM havuzunun dinlediği sokete (veya porta) FastCGI protokolü üzerinden iletmesi gerekir.

1. Apache ile PHP-FPM (mod_proxy_fcgi kullanarak)

Gerekli Apache modüllerini etkinleştirin:

# Debian/Ubuntu
sudo a2enmod proxy proxy_fcgi setenvif

# RHEL/CentOS (genellikle httpd ile gelir, conf.modules.d/ içinde kontrol edin)
# Gerekirse: sudo systemctl restart httpd 
sudo systemctl restart apache2 # Debian/Ubuntu için

Apache sanal ana bilgisayar yapılandırmasına (<VirtualHost> bloğu içine) aşağıdaki gibi bir direktif ekleyin (Unix soketi kullanarak):

# .php dosyalarına gelen istekleri PHP-FPM soketine yönlendir
<FilesMatch \.php$>
    SetHandler "proxy:unix:/run/php-fpm/example.com.sock|fcgi://localhost/"
</FilesMatch>

# Veya TCP soketi kullanılıyorsa (örn. 127.0.0.1:9001):
# <FilesMatch \.php$>
#    SetHandler "proxy:fcgi://127.0.0.1:9001"
# </FilesMatch>

# index.php'nin varsayılan dizin indeksi olmasını sağla
DirectoryIndex index.php index.html

Yapılandırmayı kontrol edip Apache'yi yeniden yükleyin:

sudo apachectl configtest
sudo systemctl reload apache2 # veya httpd

2. Nginx ile PHP-FPM

Nginx sanal ana bilgisayar yapılandırmasındaki (server bloğu içine) location bloğunu PHP isteklerini işleyecek şekilde düzenleyin (Unix soketi kullanarak):

server {
    listen 80;
    server_name example.com www.example.com;
    root /var/www/example.com/html;
    index index.php index.html index.htm;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf; # Dağıtımınızdaki standart fastcgi parametrelerini içerir

        # PHP-FPM soketine yönlendir
        fastcgi_pass unix:/run/php-fpm/example.com.sock;

        # Veya TCP soketi kullanılıyorsa:
        # fastcgi_pass 127.0.0.1:9001;
    }

    # .htaccess dosyalarına erişimi engelle (güvenlik)
    location ~ /\.ht {
        deny all;
    }
}

Yapılandırmayı kontrol edip Nginx'i yeniden yükleyin:

sudo nginx -t
sudo systemctl reload nginx

PHP-FPM, modern PHP uygulamalarını web sunucularıyla entegre etmek için standart ve performanslı bir yöntemdir. Farklı havuzlar kullanarak uygulamalar arasında daha iyi izolasyon ve kaynak yönetimi sağlar.

PreviousApacheNextFTP/FTPS/SFTP

Last updated 1 month ago