Започвам темата с много условности. Сложно за обяснение и най-вероятно много неща ще ги прескачам, но логиката трябва да стане ясна. Приликата с Apache е малка, синтаксиса също доста е различен. Започваме с post.tlan.net. Ще ползваме PHP като сървис използвайки менажера на процеси PHP-FPM. PHP-FPM стартира няколко процеса изпълнявайки PHP скриптове. Процесите работят или по TCP или на сокет. Би трябвало да покажа и инсталацията на PHP но тя идва заедно с iRedMail и тази операция е направена. Само ще настройваме.
nano /etc/nginx/sites-available/post.tlan.net.conf server { listen 80; listen [::]:80; server_name post.tlan.net mail.tlan.net; # Redirect all insecure http requests to https. location / { return 301 https://$host$request_uri; } } server { listen 443 ssl http2; listen [::]:443 ssl http2; server_name post.tlan.net mail.tlan.net; root /var/www/post.tlan.net; index index.html index.php; error_log /var/log/nginx/post.tlan.net_error.log; access_log /var/log/nginx/post.tlan.net_access.log; ssl_certificate /etc/letsencrypt/live/post.tachko.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/post.tachko.com/privkey.pem; ssl_stapling on; location / { try_files $uri $uri/ =404; } } service php8.2-fpm status * php8.2-fpm.service - The PHP 8.2 FastCGI Process Manager Loaded: loaded (/lib/systemd/system/php8.2-fpm.service; enabled; preset: enabled) Active: active (running) since Thu 2025-03-20 19:56:15 UTC; 29min ago Docs: man:php-fpm8.2(8) Process: 129710 ExecStartPost=/usr/lib/php/php-fpm-socket-helper install /run/php/php-fpm.sock /etc/php/8.2/fpm/pool.d/www.conf 8> Main PID: 129704 (php-fpm8.2) Status: "Processes active: 0, idle: 5, Requests: 590, slow: 0, Traffic: 0.40req/sec" Tasks: 6 (limit: 18955) Memory: 16.4M CPU: 349ms CGroup: /system.slice/php8.2-fpm.service |-129704 "php-fpm: master process (/etc/php/8.2/fpm/php-fpm.conf)" |-131347 "php-fpm: pool inet" |-131355 "php-fpm: pool inet" |-131356 "php-fpm: pool inet" |-131357 "php-fpm: pool inet" `-131360 "php-fpm: pool inet" Mar 20 20:21:03 post php-fpm[129704]: [NOTICE] [pool inet] child 129705 exited with code 0 after 1487.557118 seconds from start Mar 20 20:21:03 post php-fpm[129704]: [NOTICE] [pool inet] child 131347 started Mar 20 20:21:06 post php-fpm[129704]: [NOTICE] [pool inet] child 129706 exited with code 0 after 1490.556355 seconds from start Mar 20 20:21:06 post php-fpm[129704]: [NOTICE] [pool inet] child 131355 started Mar 20 20:21:09 post php-fpm[129704]: [NOTICE] [pool inet] child 129707 exited with code 0 after 1493.556970 seconds from start Mar 20 20:21:09 post php-fpm[129704]: [NOTICE] [pool inet] child 131356 started Mar 20 20:21:12 post php-fpm[129704]: [NOTICE] [pool inet] child 129708 exited with code 0 after 1496.555832 seconds from start Mar 20 20:21:12 post php-fpm[129704]: [NOTICE] [pool inet] child 131357 started Mar 20 20:21:15 post php-fpm[129704]: [NOTICE] [pool inet] child 129709 exited with code 0 after 1499.559077 seconds from start Mar 20 20:21:15 post php-fpm[129704]: [NOTICE] [pool inet] child 131360 started
Преди да продължим с конфигурацията да видим как работи PHP (по сокед или по TCP).
nano /etc/php/8.2/fpm/pool.d/www.conf [inet] user = www-data group = www-data listen = 127.0.0.1:9999 listen.owner = www-data listen.group = www-data listen.mode = 0660 ; IP addresses must be separated by comma, and no space between comma and ip. listen.allowed_clients = 127.0.0.1
Работи по TCP на порт 9999. Знаейки, че работи по TCP конфигурационния файл на виртуалния хост ще бъде съобразен с тази особенност.
nano /etc/nginx/sites-available/post.tlan.net.conf server { listen 80; listen [::]:80; server_name post.tlan.net mail.tlan.net; # Redirect all insecure http requests to https. location / { return 301 https://$host$request_uri; } } server { listen 443 ssl http2; listen [::]:443 ssl http2; server_name post.tlan.net mail.tlan.net; root /var/www/post.tlan.net; index index.html index.php; error_log /var/log/nginx/post.tlan.net_error.log; access_log /var/log/nginx/post.tlan.net_access.log; ssl_certificate /etc/letsencrypt/live/post.tachko.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/post.tachko.com/privkey.pem; ssl_stapling on; location / { try_files $uri $uri/ =404; } ### Секция за PHP location ~ \.php$ { fastcgi_pass 127.0.0.1:9999; fastcgi_index index.php; fastcgi_param fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include /etc/nginx/fastcgi_params; } } ### Проверка за синтактични грешки nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful ### Рестартираме Nginx и PHP service nginx restart service php8.2-fpm restart echo "<?php phpinfo(); ?>" >> /var/www/post.tlan.net/info.php
include snippets/fastcgi-php.conf; # Nginx php-fpm sock config: fastcgi_pass unix:/run/php/php8.1-fpm.sock; # Nginx php-cgi config : # Nginx PHP fastcgi_pass 127.0.0.1:9000; # deny access to Apache .htaccess on Nginx with PHP, # if Apache and Nginx document roots concur location ~ /\.ht { deny all; } fastcgi_pass 127.0.0.1:9000; - с тази директива указваме, че рабоим по TCP на порт 9999. Отваряме сайта на 80 порт или на 443 той ще бъде пренасочен на 9999, a tam PHP-CGI ще го поеме и ще го обработи и ще го подаде на Ngnix. fastcgi_index index.php; - ако не указваме в браузъра кой файл да отваряме, по-подразбиране ще отваря index.php. fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - дефенираме променливата SCRIPT_FILENAME за процеса fastcgi_script_name include /etc/nginx/fastcgi_params; - включва допълнителни параметри за обработка на заявки за fastcgi.
echo "<?php phpinfo(); ?>" >> /var/www/post.tlan.net/info.php