{"id":1595,"date":"2025-11-09T21:26:03","date_gmt":"2025-11-09T18:26:03","guid":{"rendered":"https:\/\/www.dchost.com\/blog\/ofiste-bir-sabah-php-yukseltmesi-ter-damlalari-ve-kucuk-bir-aydinlanma\/"},"modified":"2025-11-09T21:26:03","modified_gmt":"2025-11-09T18:26:03","slug":"ofiste-bir-sabah-php-yukseltmesi-ter-damlalari-ve-kucuk-bir-aydinlanma","status":"publish","type":"post","link":"https:\/\/www.dchost.com\/blog\/ofiste-bir-sabah-php-yukseltmesi-ter-damlalari-ve-kucuk-bir-aydinlanma\/","title":{"rendered":"Ofiste Bir Sabah: PHP Y\u00fckseltmesi, Ter Damlalar\u0131 ve K\u00fc\u00e7\u00fck Bir Ayd\u0131nlanma"},"content":{"rendered":"<div class=\"dchost-blog-content-wrapper\"><p>{<br \/>\n  &#8220;title&#8221;: &#8220;Tek Sunucuda Birden Fazla PHP S\u00fcr\u00fcm\u00fc Nas\u0131l Bar\u0131\u015f \u0130\u00e7inde Ya\u015far? Nginx + PHP\u2011FPM Havuzlar\u0131yla Site Bazl\u0131 Kurulum&#8221;,<br \/>\n  &#8220;content&#8221;: &#8220;<\/p>\n<p>Hi\u00e7 ba\u015f\u0131n\u0131za geldi mi? Bir m\u00fc\u015fterinin sitesi PHP 8.2 istiyor, di\u011feri sakin sakin 7.4\u2019te tak\u0131l\u0131yor. Birini g\u00fcncelliyorsunuz, \u00f6teki pat diye beyaz ekran. Benzer bir sabah\u0131, kahvemi bile bitiremeden ya\u015fad\u0131m. Ekran\u0131n bir k\u00f6\u015fesinde hata logu, di\u011fer k\u00f6\u015fesinde Slack. O an anlad\u0131m ki tek sunucuda tek s\u00fcr\u00fcm, baz\u0131 projeler i\u00e7in biraz fazla romantik bir hayal.<\/p>\n<p>\u0130\u015fte o g\u00fcn Nginx ve PHP\u2011FPM havuzlar\u0131n\u0131n sihriyle tan\u0131\u015ft\u0131m. Her siteye kendi PHP s\u00fcr\u00fcm\u00fcn\u00fc, kendi havuzunu, kendi kurallar\u0131n\u0131 verince ortal\u0131k bir anda d\u00fczene girdi. Ne tek sunucu kullanmaktan vazge\u00e7tim, ne de eski uygulamalara fazlaca m\u00fcdahale etmek zorunda kald\u0131m. Bu yaz\u0131da, ayn\u0131 sunucuda birden fazla PHP s\u00fcr\u00fcm\u00fcn\u00fc, Nginx ve PHP\u2011FPM havuzlar\u0131yla nas\u0131l yan yana, kavgas\u0131z d\u00f6nd\u00fcrece\u011fimizi ak\u0131c\u0131 bir dille anlataca\u011f\u0131m. Hem ad\u0131m ad\u0131m kurulumdan bahsedece\u011fiz, hem de pratik ipu\u00e7lar\u0131 ve \u00e7arp\u0131c\u0131 hatalar \u00fczerinden ge\u00e7ece\u011fiz. Sonunda, siz de \u201cBen bunu neden daha \u00f6nce yapmad\u0131m?\u201d diyebilirsiniz.<\/p>\n<div id=\"toc_container\" class=\"toc_transparent no_bullets\"><p class=\"toc_title\">\u0130&ccedil;indekiler<\/p><ul class=\"toc_list\"><li><a href=\"#Neden_Tek_Sunucuda_Birden_Fazla_PHP_Surumune_Ihtiyac_Duyariz\"><span class=\"toc_number toc_depth_1\">1<\/span> Neden Tek Sunucuda Birden Fazla PHP S\u00fcr\u00fcm\u00fcne \u0130htiya\u00e7 Duyar\u0131z?<\/a><\/li><li><a href=\"#Mantigi_Kafada_Oturtalim_Nginx_Ister_PHPFPM_Yapar\"><span class=\"toc_number toc_depth_1\">2<\/span> Mant\u0131\u011f\u0131 Kafada Oturtal\u0131m: Nginx \u0130ster, PHP\u2011FPM Yapar<\/a><ul><li><a href=\"#Havuzlar_Ne_Ise_Yarar\"><span class=\"toc_number toc_depth_2\">2.1<\/span> Havuzlar Ne \u0130\u015fe Yarar?<\/a><\/li><li><a href=\"#Soket_mi_1270019000_mi\"><span class=\"toc_number toc_depth_2\">2.2<\/span> Soket mi, 127.0.0.1:9000 mi?<\/a><\/li><\/ul><\/li><li><a href=\"#Ortama_Hazirlik_Paketler_Servisler_ve_Dosya_Duzeni\"><span class=\"toc_number toc_depth_1\">3<\/span> Ortama Haz\u0131rl\u0131k: Paketler, Servisler ve Dosya D\u00fczeni<\/a><ul><li><a href=\"#Kucuk_ama_Kritik_Not_CLI_Surumu\"><span class=\"toc_number toc_depth_2\">3.1<\/span> K\u00fc\u00e7\u00fck ama Kritik Not: CLI S\u00fcr\u00fcm\u00fc<\/a><\/li><\/ul><\/li><li><a href=\"#Site_Bazli_PHPFPM_Havuzlari_Iki_Sitede_Iki_Ayri_Dunya\"><span class=\"toc_number toc_depth_1\">4<\/span> Site Bazl\u0131 PHP\u2011FPM Havuzlar\u0131: \u0130ki Sitede \u0130ki Ayr\u0131 D\u00fcnya<\/a><ul><li><a href=\"#PHP_81_icin_Havuz_site1\"><span class=\"toc_number toc_depth_2\">4.1<\/span> PHP 8.1 i\u00e7in Havuz (site1)<\/a><\/li><li><a href=\"#PHP_74_icin_Havuz_site2\"><span class=\"toc_number toc_depth_2\">4.2<\/span> PHP 7.4 i\u00e7in Havuz (site2)<\/a><\/li><\/ul><\/li><li><a href=\"#Nginx_Sunucu_Bloklari_Hangi_Site_Hangi_PHPye_Gidecek\"><span class=\"toc_number toc_depth_1\">5<\/span> Nginx Sunucu Bloklar\u0131: Hangi Site Hangi PHP\u2019ye Gidecek?<\/a><ul><li><a href=\"#site1com_PHP_81_soketine_gitsin\"><span class=\"toc_number toc_depth_2\">5.1<\/span> site1.com (PHP 8.1 soketine gitsin)<\/a><\/li><li><a href=\"#site2com_PHP_74_soketine_gitsin\"><span class=\"toc_number toc_depth_2\">5.2<\/span> site2.com (PHP 7.4 soketine gitsin)<\/a><\/li><\/ul><\/li><li><a href=\"#Guvenlik_ve_Izolasyon_Her_Site_Kendi_Kum_Havuzunda_Oynasin\"><span class=\"toc_number toc_depth_1\">6<\/span> G\u00fcvenlik ve \u0130zolasyon: Her Site Kendi Kum Havuzunda Oynas\u0131n<\/a><\/li><li><a href=\"#Sik_Gorulen_Hatalar_502ler_Izinler_ve_CLIda_Yanlis_Surum\"><span class=\"toc_number toc_depth_1\">7<\/span> S\u0131k G\u00f6r\u00fclen Hatalar: 502\u2019ler, \u0130zinler ve CLI\u2019da Yanl\u0131\u015f S\u00fcr\u00fcm<\/a><\/li><li><a href=\"#Performans_Ipuclari_pm_Ayari_OPcache_ve_Soketin_Sesi\"><span class=\"toc_number toc_depth_1\">8<\/span> Performans \u0130pu\u00e7lar\u0131: pm Ayar\u0131, OPcache ve Soketin Sesi<\/a><\/li><li><a href=\"#Surum_Gecisleri_Kirmadan_Korkmadan_Adim_Adim\"><span class=\"toc_number toc_depth_1\">9<\/span> S\u00fcr\u00fcm Ge\u00e7i\u015fleri: K\u0131rmadan, Korkmadan, Ad\u0131m Ad\u0131m<\/a><\/li><li><a href=\"#Bonus_Notlar_Dizin_Duzeni_Sertifikalar_ve_Kucuk_Dokunuslar\"><span class=\"toc_number toc_depth_1\">10<\/span> Bonus Notlar: Dizin D\u00fczeni, Sertifikalar ve K\u00fc\u00e7\u00fck Dokunu\u015flar<\/a><\/li><li><a href=\"#Adim_Adim_Mini_Rehber_Bastan_Sona_Kisa_Bir_Tur\"><span class=\"toc_number toc_depth_1\">11<\/span> Ad\u0131m Ad\u0131m Mini Rehber: Ba\u015ftan Sona K\u0131sa Bir Tur<\/a><\/li><li><a href=\"#Kapanis_Sunucuda_Baris_Sende_Huzur\"><span class=\"toc_number toc_depth_1\">12<\/span> Kapan\u0131\u015f: Sunucuda Bar\u0131\u015f, Sende Huzur<\/a><\/li><\/ul><\/div>\n<h2 id='section-2'><span id=\"Neden_Tek_Sunucuda_Birden_Fazla_PHP_Surumune_Ihtiyac_Duyariz\">Neden Tek Sunucuda Birden Fazla PHP S\u00fcr\u00fcm\u00fcne \u0130htiya\u00e7 Duyar\u0131z?<\/span><\/h2>\n<p>Her projenin nefesi, ritmi, ya\u015f\u0131 farkl\u0131. Kimi Laravel\u2019le gen\u00e7 ve atak, kimi y\u0131llar\u0131n WordPress\u2019iyle temkinli. T\u00fcm\u00fcn\u00fc tek tiple\u015ftirince birinin kalbi k\u0131r\u0131l\u0131yor. Baz\u0131 eklentiler g\u00fcncel PHP\u2019yi severken, baz\u0131 miras kodlar aceleye gelemez. Tek bir sunucuda birden fazla s\u00fcr\u00fcm\u00fc \u00e7al\u0131\u015ft\u0131rabilmek, \u201chepsini memnun etme\u201d \u015fans\u0131n\u0131 veriyor. Bazen ge\u00e7i\u015f s\u00fcrecinde kontroll\u00fc ilerlemek istersiniz; staging ortam\u0131 8.2\u2019de, canl\u0131 hala 7.4\u2019te kal\u0131r. B\u00f6ylece acele edilmez; hatalar daha yola \u00e7\u0131kmadan toplan\u0131r.<\/p>\n<p>Masraf k\u0131sm\u0131n\u0131 da d\u00fc\u015f\u00fcn\u00fcn. Her s\u00fcr\u00fcm i\u00e7in ayr\u0131 sunucu a\u00e7mak yerine, eldeki kaynaklar\u0131 ak\u0131ll\u0131ca b\u00f6lmek hem c\u00fczdana hem zihne iyi geliyor. Ayr\u0131ca y\u00f6netimi tek merkezde tutunca izleme, yedek, g\u00fcvenlik gibi i\u015fler daha derli toplu hale geliyor. Sadece bir ko\u015ful var: Her \u015feyin kimlikli ve net olmas\u0131. Hangi site, hangi havuz, hangi soket; kar\u0131\u015fmayacak.<\/p>\n<h2 id='section-3'><span id=\"Mantigi_Kafada_Oturtalim_Nginx_Ister_PHPFPM_Yapar\">Mant\u0131\u011f\u0131 Kafada Oturtal\u0131m: Nginx \u0130ster, PHP\u2011FPM Yapar<\/span><\/h2>\n<p>Resmi \u015f\u00f6yle d\u00fc\u015f\u00fcn\u00fcn: Nginx \u00f6nde duran nazik bir garson. Gelen .php isteklerini mutfa\u011fa, yani PHP\u2011FPM\u2019e ta\u015f\u0131yor. PHP\u2011FPM ise arka tarafta, her biri farkl\u0131 s\u00fcr\u00fcmde, farkl\u0131 kurallara sahip havuzlardan olu\u015fan bir mutfak. Siz hangi sitenin hangi havuza gidece\u011fini Nginx\u2019te se\u00e7iyorsunuz. Havuzlar\u0131 da PHP\u2011FPM\u2019in kendi yap\u0131land\u0131rma dosyalar\u0131nda kuruyorsunuz. Geriye, herkesin kendi tabak ve \u00e7atallar\u0131yla sofraya gelmesi kal\u0131yor.<\/p>\n<h3><span id=\"Havuzlar_Ne_Ise_Yarar\">Havuzlar Ne \u0130\u015fe Yarar?<\/span><\/h3>\n<p>Havuz dedi\u011fimiz \u015fey, belirli bir kullan\u0131c\u0131yla, belirli bir klas\u00f6re ve belirli s\u0131n\u0131rlara ba\u011fl\u0131 \u00e7al\u0131\u015fan PHP s\u00fcre\u00e7leri toplulu\u011fu. Bir siteyi yoracak trafik geldi\u011finde di\u011ferini etkilemesin diye, havuzlar adeta kum havuzlar\u0131 gibi. \u0130\u00e7eride doya doya ko\u015fturulur, ama d\u0131\u015far\u0131ya ta\u015fmaz.<\/p>\n<h3><span id=\"Soket_mi_1270019000_mi\">Soket mi, 127.0.0.1:9000 mi?<\/span><\/h3>\n<p>Yerel sunucuda, ayn\u0131 makinede Nginx ile PHP\u2011FPM konu\u015furken Unix soket kullanmak pratik ve h\u0131zl\u0131d\u0131r. Sadece dosya izinlerine dikkat edersiniz, olay biter. TCP portu ise a\u011f s\u0131n\u0131rlar\u0131 a\u015ft\u0131\u011f\u0131n\u0131zda, konteynerler aras\u0131 ya da ba\u015fka sunucuya y\u00f6nlendirirken g\u00fczeldir. Bu yaz\u0131da sokete yaslanaca\u011f\u0131z; i\u015fler sade kals\u0131n.<\/p>\n<h2 id='section-4'><span id=\"Ortama_Hazirlik_Paketler_Servisler_ve_Dosya_Duzeni\">Ortama Haz\u0131rl\u0131k: Paketler, Servisler ve Dosya D\u00fczeni<\/span><\/h2>\n<p>\u00d6nce paketler. Ubuntu\/Debian taraf\u0131nda birden fazla PHP s\u00fcr\u00fcm\u00fcn\u00fc yan yana kurmak \u00e7ok konforlu. Toplulukta s\u0131k kullan\u0131lan paket deposu \u00fczerinden 7.x ile 8.x\u2019i ayn\u0131 anda kurabiliyorsunuz. Ben \u00e7o\u011fu zaman 7.4, 8.1 ve 8.2 \u00fc\u00e7l\u00fcs\u00fcyle \u00e7al\u0131\u015ft\u0131m. <a href=\"https:\/\/launchpad.net\/~ondrej\/+archive\/ubuntu\/php\" rel=\"nofollow noopener\" target=\"_blank\">Ubuntu&#8217;da birden fazla PHP s\u00fcr\u00fcm\u00fc i\u00e7in Ond\u0159ej Sur\u00fd paket deposu<\/a> bu i\u015fte y\u0131llard\u0131r hayat kurtar\u0131yor. RHEL\/CentOS ekosisteminde de benzer \u015fekilde alternatif depolarla ilerleniyor; mant\u0131k de\u011fi\u015fmiyor.<\/p>\n<p>Kurulumdan sonra \u015funa dikkat: Her s\u00fcr\u00fcm\u00fcn kendi PHP\u2011FPM servisi oluyor. \u00d6rne\u011fin php7.4\u2011fpm, php8.1\u2011fpm, php8.2\u2011fpm. Her birinin alt\u0131nda da pool.d klas\u00f6r\u00fc var. \u0130\u015fte site bazl\u0131 havuz dosyalar\u0131n\u0131 oraya b\u0131rakaca\u011f\u0131z.<\/p>\n<h3><span id=\"Kucuk_ama_Kritik_Not_CLI_Surumu\">K\u00fc\u00e7\u00fck ama Kritik Not: CLI S\u00fcr\u00fcm\u00fc<\/span><\/h3>\n<p>Sunucuda komut sat\u0131r\u0131nda kulland\u0131\u011f\u0131n\u0131z php ile Nginx\u2019in arka tarafta \u00e7a\u011f\u0131rd\u0131\u011f\u0131 PHP\u2011FPM s\u00fcr\u00fcm\u00fc farkl\u0131 olabilir. Composer ya da cron i\u015fleri i\u00e7in bunu bilerek davran\u0131n. Komutlar\u0131 t\u00fcmden &#8216;php&#8217; yerine &#8216;php8.1&#8217; gibi tam s\u00fcr\u00fcm ad\u0131yla \u00e7a\u011f\u0131rmak, kar\u0131\u015f\u0131kl\u0131\u011f\u0131 s\u0131f\u0131ra indirir.<\/p>\n<h2 id='section-5'><span id=\"Site_Bazli_PHPFPM_Havuzlari_Iki_Sitede_Iki_Ayri_Dunya\">Site Bazl\u0131 PHP\u2011FPM Havuzlar\u0131: \u0130ki Sitede \u0130ki Ayr\u0131 D\u00fcnya<\/span><\/h2>\n<p>Varsayal\u0131m iki siteniz var: birincisi <strong>site1.com<\/strong> ve PHP 8.1 istiyor, ikincisi <strong>site2.com<\/strong> ve 7.4\u2019te kalacak. \u0130kisinin de kendi Unix kullan\u0131c\u0131s\u0131 bulunsun: &#8216;site1&#8217; ve &#8216;site2&#8217;. Kodlar s\u0131ras\u0131yla \/var\/www\/site1\/current ve \/var\/www\/site2\/current alt\u0131nda. \u015eimdi iki ayr\u0131 havuz kural\u0131m.<\/p>\n<h3><span id=\"PHP_81_icin_Havuz_site1\">PHP 8.1 i\u00e7in Havuz (site1)<\/span><\/h3>\n<pre class=\"language-bash line-numbers\"><code class=\"language-bash\">; \/etc\/php\/8.1\/fpm\/pool.d\/site1.conf\n[site1]\nuser = site1\ngroup = site1\n\nlisten = \/run\/php\/site1-php81.sock\nlisten.owner = www-data\nlisten.group = www-data\nlisten.mode = 0660\n\npm = ondemand\npm.max_children = 10\npm.process_idle_timeout = 20s\n\n; G\u00fcvenli s\u0131n\u0131rlar\nphp_admin_value[open_basedir] = \/var\/www\/site1\/current:\/tmp\nphp_admin_value[upload_tmp_dir] = \/tmp\nphp_admin_value[sys_temp_dir] = \/tmp\nphp_admin_value[error_log] = \/var\/log\/php8.1-fpm\/site1-error.log\nphp_admin_value[log_errors] = On\nphp_admin_value[memory_limit] = 256M\nphp_admin_value[post_max_size] = 64M\nphp_admin_value[upload_max_filesize] = 64M\n\n; Yava\u015f \u00e7al\u0131\u015fan istekleri yakalayal\u0131m\nrequest_slowlog_timeout = 5s\nslowlog = \/var\/log\/php8.1-fpm\/site1-slow.log\n\n; Durum sayfas\u0131\npm.status_path = \/php-fpm-status<\/code><\/pre>\n<h3><span id=\"PHP_74_icin_Havuz_site2\">PHP 7.4 i\u00e7in Havuz (site2)<\/span><\/h3>\n<pre class=\"language-bash line-numbers\"><code class=\"language-bash\">; \/etc\/php\/7.4\/fpm\/pool.d\/site2.conf\n[site2]\nuser = site2\ngroup = site2\n\nlisten = \/run\/php\/site2-php74.sock\nlisten.owner = www-data\nlisten.group = www-data\nlisten.mode = 0660\n\npm = ondemand\npm.max_children = 8\npm.process_idle_timeout = 20s\n\nphp_admin_value[open_basedir] = \/var\/www\/site2\/current:\/tmp\nphp_admin_value[upload_tmp_dir] = \/tmp\nphp_admin_value[sys_temp_dir] = \/tmp\nphp_admin_value[error_log] = \/var\/log\/php7.4-fpm\/site2-error.log\nphp_admin_value[log_errors] = On\nphp_admin_value[memory_limit] = 192M\nphp_admin_value[post_max_size] = 32M\nphp_admin_value[upload_max_filesize] = 32M\n\nrequest_slowlog_timeout = 5s\nslowlog = \/var\/log\/php7.4-fpm\/site2-slow.log\n\npm.status_path = \/php-fpm-status<\/code><\/pre>\n<p>Burada havuzun kullan\u0131c\u0131 ve grup olarak site sahibini se\u00e7ti\u011fine dikkat edin. Kodlara bu kullan\u0131c\u0131n\u0131n sahip olmas\u0131 iyi bir izolasyon sa\u011flar. &#8216;listen.owner&#8217; ve &#8216;listen.group&#8217; ile Nginx\u2019in \u00e7al\u0131\u015ft\u0131\u011f\u0131 kullan\u0131c\u0131ya (\u00e7o\u011fu da\u011f\u0131t\u0131mda www-data) soket eri\u015fimi veriyoruz. Her s\u00fcr\u00fcm\u00fcn loglar\u0131 da kendi klas\u00f6rlerinde. B\u00f6ylece bir performans sorunu oldu\u011funda hangi sitenin midesi a\u011fr\u0131yor hemen g\u00f6r\u00fcl\u00fcr.<\/p>\n<h2 id='section-6'><span id=\"Nginx_Sunucu_Bloklari_Hangi_Site_Hangi_PHPye_Gidecek\">Nginx Sunucu Bloklar\u0131: Hangi Site Hangi PHP\u2019ye Gidecek?<\/span><\/h2>\n<p>\u015eimdi topu Nginx\u2019e atal\u0131m. Temel bir sunucu blo\u011funu, ilgili havuzun soketine i\u015faret edecek \u015fekilde kuruyoruz. Kal\u0131p mant\u0131kl\u0131 olursa, yeni site eklemek dakikalara d\u00fc\u015fer.<\/p>\n<h3><span id=\"site1com_PHP_81_soketine_gitsin\">site1.com (PHP 8.1 soketine gitsin)<\/span><\/h3>\n<pre class=\"language-nginx line-numbers\"><code class=\"language-nginx\"># \/etc\/nginx\/sites-available\/site1.conf\nserver {\n    server_name site1.com www.site1.com;\n    root \/var\/www\/site1\/current\/public;\n    index index.php index.html;\n\n    access_log \/var\/log\/nginx\/site1-access.log;\n    error_log  \/var\/log\/nginx\/site1-error.log;\n\n    location \/ {\n        try_files $uri $uri\/ \/index.php?$query_string;\n    }\n\n    location ~ \\.php$ {\n        include snippets\/fastcgi-php.conf;\n        fastcgi_pass unix:\/run\/php\/site1-php81.sock;\n        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;\n    }\n\n    location ~* \\.(jpg|jpeg|png|gif|svg|webp|css|js|ico)$ {\n        expires 7d;\n        add_header Cache-Control 'public';\n    }\n\n    location = \/php-fpm-status {\n        allow 127.0.0.1;\n        deny all;\n        include snippets\/fastcgi-php.conf;\n        fastcgi_pass unix:\/run\/php\/site1-php81.sock;\n    }\n}<\/code><\/pre>\n<h3><span id=\"site2com_PHP_74_soketine_gitsin\">site2.com (PHP 7.4 soketine gitsin)<\/span><\/h3>\n<pre class=\"language-nginx line-numbers\"><code class=\"language-nginx\"># \/etc\/nginx\/sites-available\/site2.conf\nserver {\n    server_name site2.com www.site2.com;\n    root \/var\/www\/site2\/current\/public;\n    index index.php index.html;\n\n    access_log \/var\/log\/nginx\/site2-access.log;\n    error_log  \/var\/log\/nginx\/site2-error.log;\n\n    location \/ {\n        try_files $uri $uri\/ \/index.php?$query_string;\n    }\n\n    location ~ \\.php$ {\n        include snippets\/fastcgi-php.conf;\n        fastcgi_pass unix:\/run\/php\/site2-php74.sock;\n        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;\n    }\n\n    location ~* \\.(jpg|jpeg|png|gif|svg|webp|css|js|ico)$ {\n        expires 7d;\n        add_header Cache-Control 'public';\n    }\n\n    location = \/php-fpm-status {\n        allow 127.0.0.1;\n        deny all;\n        include snippets\/fastcgi-php.conf;\n        fastcgi_pass unix:\/run\/php\/site2-php74.sock;\n    }\n}<\/code><\/pre>\n<p>Bu kadar. Dosyalar\u0131 etkinle\u015ftirip Nginx\u2019i yeniden y\u00fcklediniz mi, her site kendi havuzunda pi\u015fer. FastCGI k\u0131s\u0131mlar\u0131n\u0131 detayl\u0131 ke\u015ffetmek isterseniz, Nginx\u2019in kendi kayna\u011f\u0131 iyi bir referans: <a href=\"https:\/\/nginx.org\/en\/docs\/http\/ngx_http_fastcgi_module.html\" rel=\"nofollow noopener\" target=\"_blank\">Nginx fastcgi ayarlar\u0131n\u0131n resmi belgeleri<\/a>. PHP\u2011FPM havuz parametrelerinin anlam\u0131n\u0131 da tek tek merak ederseniz, <a href=\"https:\/\/www.php.net\/manual\/en\/install.fpm.configuration.php\" rel=\"nofollow noopener\" target=\"_blank\">PHP\u2011FPM havuzu se\u00e7eneklerinin resmi d\u00f6k\u00fcm\u00fc<\/a> ho\u015f bir k\u0131lavuzdur.<\/p>\n<h2 id='section-7'><span id=\"Guvenlik_ve_Izolasyon_Her_Site_Kendi_Kum_Havuzunda_Oynasin\">G\u00fcvenlik ve \u0130zolasyon: Her Site Kendi Kum Havuzunda Oynas\u0131n<\/span><\/h2>\n<p>\u0130\u015fin tad\u0131 izolasyonda. Her site i\u00e7in ayr\u0131 Unix kullan\u0131c\u0131s\u0131, ayr\u0131 havuz, ayr\u0131 log ve ayr\u0131 tmp. B\u00f6yle yap\u0131nca izin hatalar\u0131 biraz artar, kabul, ama riskler ciddi azal\u0131r. Kod dizinleri site sahibi kullan\u0131c\u0131ya ait olsun, Nginx sadece okuma iznine sahip kals\u0131n. Soket dosyas\u0131nda dinleyen taraf PHP\u2011FPM oldu\u011fu i\u00e7in, Nginx\u2019e sadece client taraf\u0131 yetiyor; bu y\u00fczden &#8216;listen.owner&#8217; ve &#8216;listen.group&#8217; kritik.<\/p>\n<p>Bir de k\u00fc\u00e7\u00fck ama etkili dokunu\u015flar var. &#8216;open_basedir&#8217; ile sitenin yaln\u0131zca kendi klas\u00f6r\u00fcne eri\u015fece\u011fini kronikle\u015ftirin. &#8216;upload_tmp_dir&#8217; ve &#8216;sys_temp_dir&#8217; de\u011ferlerini sabitleyin ki s\u00fcrpriz dosya izinleri \u00e7\u0131kmas\u0131n. Hata loglar\u0131n\u0131 ayr\u0131\u015ft\u0131r\u0131n; ayn\u0131 dosyada herkes ba\u011f\u0131r\u0131rsa kimse duyulmaz. \u0130stek baz\u0131nda s\u0131n\u0131rlar da g\u00fczel bir emniyet kemeri: &#8216;request_terminate_timeout&#8217; \u00e7ok uzun scriptleri sonland\u0131r\u0131r, &#8216;request_slowlog_timeout&#8217; yava\u015flayanlar\u0131 ayna kar\u015f\u0131s\u0131na \u00e7\u0131kar\u0131r.<\/p>\n<p>G\u00fcvenli\u011fi seviyorsan\u0131z, giri\u015f kap\u0131lar\u0131n\u0131 koruyan k\u00fc\u00e7\u00fck \u00e7\u00f6z\u00fcmler de hayat\u0131 kolayla\u015ft\u0131r\u0131r. WordPress admin giri\u015flerini kontrol alt\u0131nda tutmak i\u00e7in kulland\u0131\u011f\u0131m bir yolu \u015f\u00f6yle anlatm\u0131\u015ft\u0131m: <a href=\"https:\/\/www.dchost.com\/blog\/vps-log-yonetimi-nasil-rayina-oturur-grafana-loki-promtail-ile-merkezi-loglama-tutma-sureleri-ve-alarm-kurallari\/\">VPS\u2019te merkezi loglamay\u0131; Grafana Loki + Promtail rehberimiz<\/a> ile Nginx ve PHP\u2011FPM loglar\u0131n\u0131 toplay\u0131p uyar\u0131lar kurmak, sorunlar\u0131 erken yakalamay\u0131 kolayla\u015ft\u0131r\u0131r. Bir uyar\u0131 \u2018502 \u00e7o\u011fald\u0131\u2019 dedi\u011finde, hangi havuzun sars\u0131ld\u0131\u011f\u0131n\u0131 saniyeler i\u00e7inde g\u00f6r\u00fcrs\u00fcn\u00fcz.<\/p>\n<h2 id='section-8'><span id=\"Sik_Gorulen_Hatalar_502ler_Izinler_ve_CLIda_Yanlis_Surum\">S\u0131k G\u00f6r\u00fclen Hatalar: 502\u2019ler, \u0130zinler ve CLI\u2019da Yanl\u0131\u015f S\u00fcr\u00fcm<\/span><\/h2>\n<p>\u0130lk kurulumda genelde birka\u00e7 klasik hata kap\u0131y\u0131 \u00e7alar. En me\u015fhuru <strong>502 Bad Gateway<\/strong>. Nedenleri tahmin edilebilir. Nginx yanl\u0131\u015f sokete bak\u0131yor olabilir, PHP\u2011FPM havuzu \u00e7al\u0131\u015fm\u0131yordur, ya da soket dosyas\u0131n\u0131n izinleri Nginx\u2019e kapal\u0131d\u0131r. \u00c7\u00f6z\u00fcm i\u00e7in \u00fc\u00e7l\u00fc kontrol iyi gider: Soket yolunu do\u011fru yazd\u0131n\u0131z m\u0131, servisin durumu &#8216;active&#8217; mi, &#8216;listen.mode&#8217; ve &#8216;listen.owner&#8217; do\u011fru mu?<\/p>\n<p>Bir di\u011fer s\u0131k\u0131nt\u0131 &#8216;Permission denied&#8217;. Genellikle kod dizini, havuzun kullan\u0131c\u0131 ve grubuna ait de\u011fildir veya Nginx\u2019e okuma izni verilmemi\u015ftir. Sakin kal\u0131n; dizinin sahibini site kullan\u0131c\u0131s\u0131na verip, Nginx grubuna okuma izni tan\u0131mlay\u0131n. Gerekirse public dizinine \u00f6zel izinler atay\u0131n.<\/p>\n<p>CLI s\u00fcr\u00fcm\u00fc ise ayr\u0131 bir tuzak. Nginx, \u00f6rne\u011fin 8.1 havuzunu kullan\u0131rken siz terminalde &#8216;php -v&#8217; dedi\u011finizde 7.4 g\u00f6rebilirsiniz. Bu bir sorun de\u011fildir, ama cron veya artisan\/composer gibi komutlar\u0131 \u00e7al\u0131\u015ft\u0131r\u0131rken gere\u011fini yerine getirin. &#8216;php8.1 artisan migrate&#8217; ya da cronda &#8216;\/usr\/bin\/php8.1&#8217; gibi tam yol kullanmak, kafa kar\u0131\u015f\u0131kl\u0131klar\u0131n\u0131 \u00f6nler.<\/p>\n<p>Son olarak OPcache\u2019yi unutmay\u0131n. Farkl\u0131 s\u00fcr\u00fcmlerde farkl\u0131 ini dosyalar\u0131 var; her s\u00fcr\u00fcm\u00fcn opcache ayar\u0131 kendi klas\u00f6r\u00fcnde. Kod yay\u0131n\u0131ndan sonra &#8216;reload&#8217; etti\u011finizde OPcache\u2019nin \u0131s\u0131nmas\u0131 i\u00e7in birka\u00e7 dakika tan\u0131mak performans i\u00e7in iyidir.<\/p>\n<h2 id='section-9'><span id=\"Performans_Ipuclari_pm_Ayari_OPcache_ve_Soketin_Sesi\">Performans \u0130pu\u00e7lar\u0131: pm Ayar\u0131, OPcache ve Soketin Sesi<\/span><\/h2>\n<p>Havuz ba\u015f\u0131na s\u00fcre\u00e7 say\u0131s\u0131, sunucunuzu ya u\u00e7ar ya da yorabilir. Trafi\u011fi \u00f6ng\u00f6rerek &#8216;pm.max_children&#8217; de\u011ferini ger\u00e7ek\u00e7i tutmak \u00f6nemli. Ben genelde &#8216;pm = ondemand&#8217; ile ba\u015flar, CPU ve RAM davran\u0131\u015f\u0131n\u0131 izleyerek \u00e7ocuk say\u0131s\u0131n\u0131 t\u00f6rp\u00fclerim. Yo\u011fun sitelerde &#8216;pm = dynamic&#8217; ile bir taban ve tavan belirlemek de i\u015fe yarar. Temel mesele, hi\u00e7bir havuzun kaynaklar\u0131 tek ba\u015f\u0131na yutmamas\u0131d\u0131r.<\/p>\n<p>OPcache canl\u0131l\u0131\u011f\u0131n anahtar\u0131. Production\u2019da opcache\u2019yi a\u00e7\u0131k, bellek de\u011ferlerini de uygulaman\u0131z\u0131n b\u00fcy\u00fckl\u00fc\u011f\u00fcne g\u00f6re makul tutun. Laravel ve WordPress gibi \u00e7at\u0131lar\u0131n dosya say\u0131s\u0131 fazlad\u0131r; ger\u00e7ek\u00e7i bir &#8216;opcache.memory_consumption&#8217; sizi rahatlat\u0131r. Dosya izleme yenileme aral\u0131klar\u0131n\u0131 \u00e7ok k\u0131saltmay\u0131n; gereksiz invalidation performans\u0131 ta\u015f\u0131r.<\/p>\n<p>Soket veya TCP bahisleri ise pratikte kuruluma bakar. Ayn\u0131 makinede Unix soket kullanmak bana her zaman temiz ve \u00f6l\u00e7\u00fclebilir g\u00f6r\u00fcnd\u00fc. \u0130zinleri oturtunca stabil gider. Y\u00fcr\u00fcmede bir p\u00fcr\u00fcz g\u00f6r\u00fcrseniz, TCP\u2019ye ge\u00e7mek de sorun \u00e7\u00f6zebilir; \u00f6nemli olan, de\u011fi\u015fiklik yapt\u0131\u011f\u0131n\u0131zda \u00f6l\u00e7\u00fcp izlemektir. Bu arada FastCGI katman\u0131n\u0131n detaylar\u0131n\u0131 kurcalamak isterseniz, resmi kaynak iyi a\u00e7\u0131kl\u0131yor: <a href=\"https:\/\/nginx.org\/en\/docs\/http\/ngx_http_fastcgi_module.html\" rel=\"nofollow noopener\" target=\"_blank\">Nginx fastcgi mod\u00fcl\u00fc belgesi<\/a>.<\/p>\n<h2 id='section-10'><span id=\"Surum_Gecisleri_Kirmadan_Korkmadan_Adim_Adim\">S\u00fcr\u00fcm Ge\u00e7i\u015fleri: K\u0131rmadan, Korkmadan, Ad\u0131m Ad\u0131m<\/span><\/h2>\n<p>Diyelim ki site2\u2019yi 7.4\u2019ten 8.1\u2019e alacaks\u0131n\u0131z. Benim izledi\u011fim yol \u015funa benziyor. \u00d6nce 8.1 taraf\u0131nda yeni bir havuz a\u00e7ar\u0131m, \u00f6rne\u011fin &#8216;site2-php81.sock&#8217;. Ayn\u0131 sunucu blo\u011funda yeni bir testing hostu tan\u0131mlar\u0131m: test.site2.com gibi. Bu test alan ad\u0131 do\u011frudan 8.1 soketine gider. QA ve kabul s\u00fcre\u00e7leri burada yap\u0131l\u0131r, loglar burada akar, OPcache burada \u0131s\u0131n\u0131r.<\/p>\n<p>Her \u015fey yolundaysa, canl\u0131 domainin Nginx blo\u011funda tek de\u011fi\u015fiklik yapar\u0131m: &#8216;fastcgi_pass&#8217; sat\u0131r\u0131n\u0131 yeni sokete \u00e7eviririm. Bu de\u011fi\u015fikli\u011fi &#8216;nginx -t&#8217; ile test eder, &#8216;systemctl reload nginx&#8217; ile kesintisiz devreye al\u0131r\u0131m. Gerekirse iki sunucu blo\u011funu k\u0131sa bir s\u00fcre birlikte tutar, ge\u00e7i\u015fi geri almak i\u00e7in eski blo\u011fu kommentte bekletirim. Bu k\u00fc\u00e7\u00fck rit\u00fcel, stres seviyesini ciddi azalt\u0131r.<\/p>\n<p>Ge\u00e7i\u015ften sonra g\u00f6zlem s\u00fcresi k\u0131ymetli. Kullan\u0131c\u0131 davran\u0131\u015f\u0131, hatalar, yava\u015f loglar\u0131. Bir iki saatte de\u011fil, bir iki g\u00fcnde i\u00e7iniz rahat eder. Bu d\u00f6nemde uyar\u0131lar\u0131n\u0131z varsa hayat kolayla\u015f\u0131r; 5xx artarsa haber ver, ortalama yan\u0131t s\u00fcresi z\u0131plarsa \u00f6t gibi basit ama etkili kurallar zaman kazand\u0131r\u0131r.<\/p>\n<h2 id='section-11'><span id=\"Bonus_Notlar_Dizin_Duzeni_Sertifikalar_ve_Kucuk_Dokunuslar\">Bonus Notlar: Dizin D\u00fczeni, Sertifikalar ve K\u00fc\u00e7\u00fck Dokunu\u015flar<\/span><\/h2>\n<p>Dizin d\u00fczeni standard\u0131, gelecekteki siz i\u00e7in yap\u0131lm\u0131\u015f bir iyiliktir. \/var\/www\/site1\/current gibi semantik bir simbiyoz, deployment i\u015fini de g\u00fczelle\u015ftirir. &#8216;current&#8217; sembol\u00fcn\u00fc yeni s\u00fcr\u00fcme al\u0131p, PHP\u2011FPM veya Nginx\u2019e reload verdi\u011finizde tertemiz bir devreye alma ya\u015fars\u0131n\u0131z. Log dosyalar\u0131n\u0131 site bazl\u0131 ay\u0131r\u0131n; zamanla bir alt klas\u00f6re tarih bazl\u0131 d\u00f6nd\u00fcrmek de iyi gider.<\/p>\n<p>SSL sertifikalar\u0131 taraf\u0131nda Let\u2019s Encrypt gibi \u00e7\u00f6z\u00fcmleri devreye almak kolay. Nginx sunucu bloklar\u0131na minimal eklemelerle otomatik yenileme rutini sa\u011flan\u0131r. Burada anahtar, sertifikay\u0131 yenilerken sunucu bloklar\u0131n\u0131 bozmamakt\u0131r; staging\/live ayr\u0131m\u0131nda acemice bir kopyala\u2011yap\u0131\u015ft\u0131r bazen kafa kar\u0131\u015ft\u0131r\u0131r.<\/p>\n<p>Bir di\u011fer k\u00fc\u00e7\u00fck detay da bak\u0131m sayfalar\u0131. Ge\u00e7i\u015f s\u0131ras\u0131nda milisaniyelik reload\u2019larda bile kullan\u0131c\u0131ya p\u00fcr\u00fczs\u00fcz bir deneyim vermek istersiniz. Nginx\u2019in &#8216;try_files&#8217; yakla\u015f\u0131m\u0131yla hafif bir bak\u0131m sayfas\u0131n\u0131 devreye almak, acil durumlarda da hayat kurtar\u0131r.<\/p>\n<h2 id='section-12'><span id=\"Adim_Adim_Mini_Rehber_Bastan_Sona_Kisa_Bir_Tur\">Ad\u0131m Ad\u0131m Mini Rehber: Ba\u015ftan Sona K\u0131sa Bir Tur<\/span><\/h2>\n<p>\u0130\u015fi topyek\u00fbn g\u00f6rmek isteyenler i\u00e7in k\u0131saca \u00f6zetleyeyim. \u00d6nce gerekli PHP s\u00fcr\u00fcmlerini kurun ve PHP\u2011FPM servislerini etkinle\u015ftirin. Her site i\u00e7in ayr\u0131 kullan\u0131c\u0131 a\u00e7\u0131n, dizinleri sahipleriyle olu\u015fturun. Havuz dosyalar\u0131n\u0131 do\u011fru s\u00fcr\u00fcm\u00fcn pool.d klas\u00f6r\u00fcne b\u0131rak\u0131n; soket yollar\u0131n\u0131 not edin. Nginx sunucu bloklar\u0131n\u0131 haz\u0131rlay\u0131p ilgili havuza ba\u011flay\u0131n. Test edin, reload edin, loglar\u0131 izleyin. Cron ve CLI s\u00fcre\u00e7lerinde do\u011fru PHP s\u00fcr\u00fcm\u00fcn\u00fc \u00f6zellikle \u00e7a\u011f\u0131r\u0131n. Her \u015fey yolundayken OPcache ve pm ayarlar\u0131yla k\u00fc\u00e7\u00fck tuning\u2019ler yap\u0131n.<\/p>\n<p>Yap\u0131land\u0131rma se\u00e7eneklerinin tamam\u0131n\u0131 merak edenler i\u00e7in dok\u00fcmantasyon elinizin alt\u0131nda. <a href=\"https:\/\/www.php.net\/manual\/en\/install.fpm.configuration.php\" rel=\"nofollow noopener\" target=\"_blank\">PHP\u2011FPM havuz parametrelerinin a\u00e7\u0131klamalar\u0131n\u0131<\/a> okuyup i\u015fin mutfa\u011f\u0131na daha da yakla\u015fabilirsiniz. Bir parametrenin tek sat\u0131rl\u0131k de\u011fi\u015fimi bile, yo\u011fun bir sitede b\u00fcy\u00fck fark yaratabilir.<\/p>\n<h2 id='section-13'><span id=\"Kapanis_Sunucuda_Baris_Sende_Huzur\">Kapan\u0131\u015f: Sunucuda Bar\u0131\u015f, Sende Huzur<\/span><\/h2>\n<p>Tek sunucuda birden fazla PHP s\u00fcr\u00fcm\u00fcn\u00fc \u00e7al\u0131\u015ft\u0131rmak ilk bak\u0131\u015fta g\u00f6z korkutabilir. Ama mant\u0131\u011f\u0131 yerle\u015ftirdikten sonra, Nginx\u2019in nazik kar\u015f\u0131lama masas\u0131n\u0131 ve PHP\u2011FPM\u2019in d\u00fczenli mutfa\u011f\u0131n\u0131 kurdu\u011funuzda, her \u015fey ritmini buluyor. Her site i\u00e7in ayr\u0131 havuz demek, ayr\u0131 nefes demek. Loglar\u0131 ayr\u0131, tmp\u2019si ayr\u0131, limiti ayr\u0131. Ar\u0131za \u00e7\u0131kt\u0131\u011f\u0131nda kimin sorunu oldu\u011funu dakikalar i\u00e7inde anl\u0131yorsunuz; g\u00fcncelleme gerekti\u011finde de k\u00fc\u00e7\u00fck ad\u0131mlarla ilerleyip b\u00fcy\u00fck dertlerden ka\u00e7\u0131n\u0131yorsunuz.<\/p>\n<p>Pratik tavsiye olarak \u015funlar\u0131 cebinize koyun: Havuzlar\u0131 isimlendirirken anlaml\u0131 olun, soket yollar\u0131n\u0131 standardize edin, CLI\u2019da hangi PHP\u2019yi \u00e7a\u011f\u0131rd\u0131\u011f\u0131n\u0131z\u0131 bilerek hareket edin. G\u00f6zlemi ihmal etmeyin; k\u00fc\u00e7\u00fck uyar\u0131lar ve izleme panolar\u0131 bir\u00e7ok s\u00fcrprizi daha do\u011fmadan \u00e7\u00f6zer. Bu yaz\u0131 umar\u0131m yolunuzu ayd\u0131nlat\u0131r. Tak\u0131ld\u0131\u011f\u0131n\u0131z yerde geri d\u00f6n\u00fcp bakabilece\u011finiz bir rehber niyetine dursun. Bir dahaki yaz\u0131da daha derin performans dokunu\u015flar\u0131n\u0131 ve sorunsuz deploy hilelerini konu\u015furuz. O zamana kadar, sunucunuz sakin, siteleriniz h\u0131zl\u0131 olsun.<\/p>\n<p>&#8220;,<br \/>\n  &#8220;focus_keyword&#8221;: &#8220;Tek sunucuda birden fazla PHP s\u00fcr\u00fcm\u00fc&#8221;,<br \/>\n  &#8220;meta_description&#8221;: &#8220;Tek sunucuda birden fazla PHP s\u00fcr\u00fcm\u00fcn\u00fc Nginx ve PHP\u2011FPM havuzlar\u0131yla site bazl\u0131, g\u00fcvenli ve h\u0131zl\u0131 \u015fekilde kurmay\u0131 ad\u0131m ad\u0131m, ger\u00e7ek \u00f6rneklerle kolayca \u00f6\u011frenin.&#8221;,<br \/>\n  &#8220;faqs&#8221;: [<br \/>\n    {<br \/>\n      &#8220;question&#8221;: &#8220;Tek sunucuda hem PHP 7.4 hem de 8.2\u2019yi ayn\u0131 anda \u00e7al\u0131\u015ft\u0131rabilir miyim?&#8221;,<br \/>\n      &#8220;answer&#8221;: &#8220;Evet, m\u00fcmk\u00fcn. Her PHP s\u00fcr\u00fcm\u00fc i\u00e7in ayr\u0131 PHP\u2011FPM servisi kurup, her siteye ayr\u0131 havuz ve soket tan\u0131mlars\u0131n\u0131z. Nginx\u2019te ilgili sitenin .php isteklerini do\u011fru sokete y\u00f6nlendirince sorunsuzca beraber ya\u015farlar.&#8221;<br \/>\n    },<br \/>\n    {<br \/>\n      &#8220;question&#8221;: &#8220;502 Bad Gateway hatas\u0131 al\u0131yorum, nereden ba\u015flayay\u0131m?&#8221;,<br \/>\n      &#8220;answer&#8221;: &#8220;Genelde \u00fc\u00e7 noktay\u0131 kontrol etmek i\u015fe yarar: PHP\u2011FPM havuzu ger\u00e7ekten \u00e7al\u0131\u015f\u0131yor mu, Nginx do\u011fru soket yoluna bak\u0131yor mu, soket izinleri Nginx\u2019in kullan\u0131c\u0131 ve grubunu kaps\u0131yor mu. Bu \u00fc\u00e7l\u00fc \u00e7o\u011fu 502\u2019nin k\u00f6k\u00fcn\u00fc g\u00f6sterir.&#8221;<br \/>\n    },<br \/>\n    {<br \/>\n      &#8220;question&#8221;: &#8220;Cron ve CLI taraf\u0131nda hangi PHP s\u00fcr\u00fcm\u00fcn\u00fc kullanmal\u0131y\u0131m?&#8221;,<br \/>\n      &#8220;answer&#8221;: &#8220;Nginx\u2019in kulland\u0131\u011f\u0131 FPM s\u00fcr\u00fcm\u00fc ile terminaldeki &#8216;php&#8217; komutu ayn\u0131 olmak zorunda de\u011fil. Cron veya komutlar i\u00e7in &#8216;php8.1&#8217; gibi tam s\u00fcr\u00fcm binarisini kullanmak en temiz y\u00f6ntemdir; kar\u0131\u015f\u0131kl\u0131k ya\u015fanmaz.&#8221;<br \/>\n    },<br \/>\n    {<br \/>\n      &#8220;question&#8221;: &#8220;Soket mi yoksa 127.0.0.1:9000 gibi TCP mi tercih etmeliyim?&#8221;,<br \/>\n      &#8220;answer&#8221;: &#8220;Ayn\u0131 sunucuda \u00e7al\u0131\u015f\u0131yorsan\u0131z Unix soket genellikle pratik ve h\u0131zl\u0131 olur. \u0130zinleri do\u011fru ayarlay\u0131n yeter. Ayr\u0131 makineye ya da konteynere konu\u015facaksan\u0131z TCP mant\u0131kl\u0131d\u0131r. Esas olan de\u011fi\u015fiklikten sonra \u00f6l\u00e7mek ve izlemektir.&#8221;<br \/>\n    }<br \/>\n  ]<br \/>\n}<\/p>\n<\/div>","protected":false},"excerpt":{"rendered":"<p>{ &#8220;title&#8221;: &#8220;Tek Sunucuda Birden Fazla PHP S\u00fcr\u00fcm\u00fc Nas\u0131l Bar\u0131\u015f \u0130\u00e7inde Ya\u015far? Nginx + PHP\u2011FPM Havuzlar\u0131yla Site Bazl\u0131 Kurulum&#8221;, &#8220;content&#8221;: &#8220; Hi\u00e7 ba\u015f\u0131n\u0131za geldi mi? Bir m\u00fc\u015fterinin sitesi PHP 8.2 istiyor, di\u011feri sakin sakin 7.4\u2019te tak\u0131l\u0131yor. Birini g\u00fcncelliyorsunuz, \u00f6teki pat diye beyaz ekran. Benzer bir sabah\u0131, kahvemi bile bitiremeden ya\u015fad\u0131m. Ekran\u0131n bir k\u00f6\u015fesinde hata logu, [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":1596,"comment_status":"","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[26],"tags":[],"class_list":["post-1595","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-teknoloji"],"_links":{"self":[{"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/posts\/1595","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/comments?post=1595"}],"version-history":[{"count":0,"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/posts\/1595\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/media\/1596"}],"wp:attachment":[{"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/media?parent=1595"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/categories?post=1595"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/tags?post=1595"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}