Установка Nginx и настройка работы с PHP-FPM
Для установки Nginx и php-fpm используем менеджер пакетов apt
:
sudo apt install nginx php8.1 php8.1-fpm
Проверим что nginx и php-fpm запустились:
ps auxf
Перейдем в папку /etc/nginx/
:
cd /etc/nginx/
Отредактируем файл конфигурации nginx нашего сайта /etc/nginx/sites-enabled/default
:
vi /etc/nginx/sites-enabled/default
Добавим конфигурацию в файл /etc/nginx/sites-enabled/default
:
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
index index.html index.htm index.nginx-debian.html;
server_name _;
location / {
try_files $uri $uri/ =404;
}
}
Добавим также конфигурацию для работы сервера php-fpm в файл /etc/nginx/sites-enabled/default
:
location ~ \.php$ {
include snippets/fastcgi-php.conf;
root /var/www/html;
fastcgi_pass unix:/run/php/php8.1-fpm.sock;
}
Проверим что новая конфигурация не имеет ошибок:
sudo nginx -t
Ошибок нет. Перезапустим сервер:
sudo systemctl reload nginx
Проверим что сервер возвращает страницу по умолчанию:
curl localhost:80
Для проверки работы сервера php-fpm создадим файл info.php
в директории /var/www/html
. Содежимое файла:
<?php
phpinfo();
?>
Для проверки того что сервер php-fpm работает как надо запросим страницу info.php
:
curl localhost/info.php
Установка Apache2. Настроить обработки PHP
Установим сервер apache2
и модуль libapache2-mod-php8.1
:
sudo apt install apache2 libapache2-mod-php8.1
Изменим порт на котором работает сервер apache2
, так как порт 80 уже занят сервером nginx. Перейдем в директорию /etc/apache2
:
cd /etc/apache2
Изменим файл конфигурации портов ports.conf
. Внесем в него следующую конфигурацию:
Listen 8080
Проверим что конфигурация работает и запустим сервер apache2
:
sudo apachectl -t
sudo systemctl start apache2
sudo systemctl status apache2
Проверим что сервер apache2
возвращает страницу по умолчанию на порту 8080:
curl localhost:8080
Проверим что сервер apache2
обрабатывает php и возвращает страницу info.php
на порту 8080:
curl localhost:8080/info.php
Настройка схемы обратного прокси для Nginx (динамика — на Apache2)
Чтобы настроить схему обратного прокси для Nginx добавим кофигурацию в файл /etc/nginx/sites-enabled/default
:
vi `/etc/nginx/sites-enabled/default`
location / {
proxy_pass http://localhost:8080;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
}
location ~* ^.+.(jpg|jpeg|gif|png|ico|css|zip|pdf|txt|tar|js)$ {
root /var/www/html;
}
Закоментируем предыдущую конфигурацию для сервера php-fpm:
# location ~ \.php$ {
# include snippets/fastcgi-php.conf;
# root /var/www/html;
# fastcgi_pass unix:/run/php/php8.1-fpm.sock;
# }
Закоментируем предыдущую конфигурацию запроса файлов:
# location / {
# # First attempt to serve request as file, then
# # as directory, then fall back to displaying a 404.
# try_files $uri $uri/ =404;
# }
Проверим что новая конфигурация не имеет ошибок:
sudo nginx -t
Ошибок нет. Перезапустим сервер:
sudo systemctl reload nginx
Проверим что сервер nginx
возвращает страницу по умолчанию:
curl localhost
Проверим что сервер nginx
возвращает страницу info.php
:
curl localhost/info.php
Настройка схемы балансировки трафика между несколькими серверами Apache на стороне Nginx с помощью модуля ngx_http_upstream_module
Укажем порт, на котором будет работать второй сервер Apache. Для этого откроем файл конфигурации Apache:
sudo vi /etc/apache2/ports.conf
Добавим в него строку
Listen 8081
Создадим новый файл конфигурации для второго сервера Apache:
sudo vi /etc/apache2/sites-available/second-server.conf
Внесем следующий код в файл конфигурации:
<VirtualHost *:8081>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/second-server
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Активируем файл конфигурации второго сервера apache2:
sudo a2ensite second-server.conf
Проверим что конфигурация работает и перезапустим веб-сервер:
sudo apachectl -t
sudo systemctl reload apache2
Добавим простой html документ в директорию /var/www/second-server
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<h1>Hello world!</h1>
</body>
</html>
Определим блок upstream в файле etc/nginx/sites-enabled/default
. Для определения серверов Apache, которые будут балансироваться:
upstream apache_servers {
server localhost:8080;
server localhost:8081;
}
Определим блок server
для определения порта и хоста nginx
, который будет использоваться для балансировки трафика:
server {
listen 80;
server_name _;
location / {
proxy_pass http://apache_servers;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
Проверим конфигурацию и перезапустим Nginx для применения изменений:
sudo nginx -t
sudo systemctl reload nginx
Теперь Nginx будет балансировать трафик между серверами Apache, которые были определены в блоке upstream.