Установка NGINX + PHP7 последних версий

Администрирование linux
Ответить
ustim
Администратор
Сообщения: 130
Зарегистрирован: 03 июн 2021, 09:01
Откуда: Краснодар
Контактная информация:

Установка NGINX + PHP7 последних версий

Сообщение ustim »

Устанавливаем NGINX последней версии

Для начала проверим кандидата на установку

Код: Выделить всё

apt-cache policy nginx
скорее всего у вас отобразится версия 1.14, а если посмотреть на официальном сайте, то на данный момент имеется версия 1.18

Ставим необходимые пакеты

Код: Выделить всё

sudo apt install curl gnupg2 ca-certificates lsb-release
Для подключения apt-репозитория для стабильной версии nginx, выполните следующую команду:

Код: Выделить всё

echo "deb http://nginx.org/packages/debian `lsb_release -cs` nginx" \
    | sudo tee /etc/apt/sources.list.d/nginx.list
Если предпочтительно использовать пакеты для основной версии nginx, выполните следующую команду вместо предыдущей:

Код: Выделить всё

echo "deb http://nginx.org/packages/mainline/debian `lsb_release -cs` nginx" \
    | sudo tee /etc/apt/sources.list.d/nginx.list
Загружаем и устанавливаем ключ

Код: Выделить всё

curl -fsSL https://nginx.org/keys/nginx_signing.key | sudo apt-key add -
Обновляем пакеты и проверяем кандидата на установку

Код: Выделить всё

apt-get update

Код: Выделить всё

apt-cache policy nginx
Теперь у нас должна отобразиться последняя версия.
Устанавливаем эту самую последнюю версию

Код: Выделить всё

sudo apt-get install nginx
Проверяем факт установки

Код: Выделить всё

nginx -v
Запускаем NGINX

Код: Выделить всё

sudo service nginx start
Теперь переходим к настройке, открываем файл /etc/nginx/nginx.conf

Код: Выделить всё

nano /etc/nginx/nginx.conf
Теперь изменим пользователя, от имени которого работает nginx, в Debian/Ubuntu веб-сервер работает от пользователя www-data
В самом начале исправляем на
user www-data;
Рабочих процессов я укажу 2, поскольку у меня 2 ядра.
worker_processes 2;
Немного подправим секцию events
events {
worker_connections 1024;
use epoll;
}
Далее после строки
access_log /var/log/nginx/access.log main;
добавим
client_header_timeout 30;
client_body_timeout 30;
reset_timedout_connection on;
client_max_body_size 32m;
client_body_buffer_size 128k;
Так же подправим
sendfile on;
tcp_nopush on;
Ниже зададим параметры gzip-сжатия:
gzip on;
gzip_disable "msie6";
gzip_proxied any;
gzip_min_length 1024;
gzip_comp_level 4;
gzip_types text/plain text/css application/json application/javascript application/x-javascript text/xml application/xml application/xml+rss text/javascript application/atom+xml application/rdf+xml;
Ну и в самом конце, после
include /etc/nginx/conf.d/*.conf;
добавим
include /etc/nginx/sites-enabled/*;
Это позволит подключать конфигурации виртуальных хостов из папки sites-enabled.

Сохраним и проверим конфиг командой:

Код: Выделить всё

nginx -t
Перезапускаем

Код: Выделить всё

service nginx restart
Теперь настраиваем виртуальные хосты.
Создадим директории

Код: Выделить всё

mkdir /etc/nginx/sites-available

Код: Выделить всё

mkdir /etc/nginx/sites-enabled
А так же структуру папок для веб сервера

Код: Выделить всё

mkdir /var/www

Код: Выделить всё

mkdir /var/www/example.org
Затем создадим конфигурационный файл для нашего тестового сайта

Код: Выделить всё

touch /etc/nginx/sites-available/example.org.conf
Откроем его

Код: Выделить всё

nano /etc/nginx/sites-available/example.org.conf
И добавим в файл
server {
listen 80;

server_name example.org;
charset utf-8;

root /var/www/example.org;
index index.html index.htm index.php;

access_log /var/log/nginx/example.org_access.log;
error_log /var/log/nginx/example.org_error.log;
}

server {

listen 80;

server_name www.example.org;
rewrite ^(.*) http://example.org$1 permanent;
}
Его синтаксис достаточно прост и понятен, первая секция server задает основные параметры сайта, его имя, кодировку, расположение корневой директории и файлов логов. Вторая секция нужна для перенаправления сайта с www на без www.

Если вы хотите сделать данный виртуальный хост сайтом по умолчанию, т.е. тем на который будут переадресовываться все запросы, для которых nginx не нашел подходящего виртуального хоста или без имени сервера вообще, например, по IP-адресу, то добавьте к директиве listen опцию default, начиная с версии 0.8.1 можно использовать опцию default_server:

Код: Выделить всё

listen 80 default;
Сохраняем конфигурацию и подключаем ее к nginx:

Код: Выделить всё

ln -s /etc/nginx/sites-available/example.org.conf  /etc/nginx/sites-enabled/
Проверяем конфигурацию и заставим nginx ее перечитать:

Код: Выделить всё

nginx -t

Код: Выделить всё

service nginx reload
Теперь создадим для теста индексный файл

Код: Выделить всё

nano /var/www/example.org/index.html
Заполним его
<body><h1>Наш сайт работает!</h1></body>
И проверим работоспособность сайта. Все должно работать!
ustim
Администратор
Сообщения: 130
Зарегистрирован: 03 июн 2021, 09:01
Откуда: Краснодар
Контактная информация:

Re: Установка NGINX + PHP7 последних версий

Сообщение ustim »

Устанавливаем PHP7 последней версии

Как обычно проверяем кандидата на установку

Код: Выделить всё

apt-cache policy php
Скорее всего версия будет 7.0 - это старая.

Для установки свежей версии выполняем команды:

Код: Выделить всё

apt-get -y install apt-transport-https lsb-release ca-certificates

Код: Выделить всё

wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg

Код: Выделить всё

sh -c 'echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list'
Обновляемся

Код: Выделить всё

apt-get update
Проверяем кандидата

Код: Выделить всё

apt-cache policy php
В моем случае версия была 7.2. Хорошо

Устанавливаем

Код: Выделить всё

apt install php-fpm
Проверяем установленную версию Стартуем

Код: Выделить всё

service php7.2-fpm start
Так же желательно добавить дополнительные модули

Код: Выделить всё

apt install php-mbstring php-xml php-gd php-mysql php-imagick php-common php-cli php-opcache
После установки, открываем файл

Код: Выделить всё

nano /etc/php/7.2/fpm/php.ini
И исправляем по необходимости
post_max_size = 8M
этот параметр задает максимальный размер данных загружаемых методом POST, влияет, например, на размер загружаемых средствами PHP файлов. По умолчанию 8 МБ, можем изменить по собственным потребностям.
cgi.fix_pathinfo=0
Раскомментируем и установим опцию, для устранения уязвимости
upload_max_filesize = 8M
Увеличивает размер максимально загружаемого файла
Данное значение должно быть больше или равно значению post_max_size, иначе вы будете ограничены в загрузке файлов меньшим из указанных в этих опциях размером.
После этого рестарт PHP

Код: Выделить всё

service php7.2-fpm restart
Теперь научим Nginx работать с PHP-FPM, для этого в файл конфигурации виртуального хоста нужно добавить настройки, которые будут перенаправлять (проксировать) все запросы к динамическому содержимому на FastCGI-шлюз.

Если сайтов несколько, то аналогичные настройки потребуется добавить каждому виртуальному хосту, поэтому, чтобы не делать лишних действий, имеет смысл вынести данные настройки в шаблон и подключать к виртуальному хосту уже его. Такой подход имеет еще один плюс, если вам потребуется изменить настройки, то делать это придется только в одном месте.

Создадим директорию для хранения шаблонов

Код: Выделить всё

mkdir /etc/nginx/templates
Создаем шаблон

Код: Выделить всё

touch /etc/nginx/templates/php-fpm.conf
Открываем его

Код: Выделить всё

nano /etc/nginx/templates/php-fpm.conf
Добавляем
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
Указанный нами блок location будет обрабатывать все запросы к php-файлам, первая директива в нем проверяет наличие запрошенного файла, в противном случае отдавая ошибку 404. Вторая устанавливает параметры соединения с FastCGI-шлюзом, в нашем случае с PHP-FPM, соединение устанавливается через UNIX-сокет, как наиболее производительный способ соединения. Затем указывается индексный файл и подгружаются настройки Nginx для FastCGI.

В принципе этого уже достаточно, чтобы работать с динамическим содержимым, но не будем спешить и добавим в файл еще несколько блоков.
location ~ /\.ht {
deny all;
}
Несмотря на то, что Nginx не использует htaccess-файлы, они, вместе с файлами htpasswd могут находиться в директории сайта, особенно если до этого он работал на Apache и будет правильно запретить доступ к ним в целях безопасности.

Также следует настроить кэширование статического содержимого
location ~* \.(gif|jpeg|jpg|txt|png|tif|tiff|ico|jng|bmp|doc|pdf|rtf|xls|ppt|rar|rpm|swf|zip|bin|exe|dll|deb|cur)$ {
expires 168h;
}
Данная конструкция включает кэширование на стороне браузера, сообщая тому, что "срок годности" указанных файлов - 168 часов (1 неделя) и при последующих обращениях на ваш сайт данные файлы следует брать из локального кэша. Мы привели примерный список, вы можете самостоятельно добавить в него нужные расширения файлов.

Также зададим кэширование для скриптов и стилей
location ~* \.(css|js)$ {
expires 180m;
}
Для них установим срок кэширования в 3 часа, что позволит соблюсти баланс между скоростью применения возможных изменений в этих файлах и уменьшением количества запросов к вашему сайту.

Теперь откроем файл конфигурации виртуального хоста

Код: Выделить всё

nano /etc/nginx/sites-available/example.org.conf
и в конце первой секции server добавим строку подключения шаблона

Код: Выделить всё

include /etc/nginx/templates/php-fpm.conf;
Получится так
sites-available.PNG
Сохраним все настройки, проверим конфигурацию и перезапустим Nginx

Код: Выделить всё

nginx -t

Код: Выделить всё

service nginx reload
Чтобы проверить работу PHP создадим в корневой директории сайта файл index.php

Код: Выделить всё

nano /var/www/example.org/index.php
со следующим содержимым:
<?php
phpinfo();
?>
Переходим на сайт, должна отобразиться информация о PHP

На этом настройку нашего сервера можно считать законченной. При переносе или размещении на нем новых сайтов не забывайте правильно устанавливать права и владельца. Стандартный набор прав: 644 для файлов и 755 для папок, его можно быстро установить командой:

Код: Выделить всё

chmod -R u=rw,g=r,o=r,a+X /var/www/example.org
Также не забывайте устанавливать правильного владельца, им должен быть пользователь, от имени которого работает веб-сервер, в нашем случае www-data, владелец устанавливается командой:

Код: Выделить всё

chown -R www-data:www-data /var/www/example.org
Ответить