Опубликовал(а) strider - 23 апр 2019, 12:54
- 23 апр 2019, 12:54
#10
PHP (рекурсивный акроним словосочетания PHP: Hypertext Preprocessor) - это распространенный язык программирования общего назначения с открытым исходным кодом. PHP специально сконструирован для веб-разработок и его код может внедряться непосредственно в HTML.
Начиная с этого момента мы будем описывать установку NGINX и PHP-FPM на Debian GNU/Linux.
Этап 1 - Анализ и подготовка окружения
Для начала нам нужно подключиться к серверу по SSH, узнать количество процессоров, обновить список пакетов и произвести установку утилит.
Этап 2 - Установка веб-сервера Nginx и PHP
APT автоматически установит модуль PHP-FPM для NGINX и все их зависимости и, затем, активирует их. NGINX должен быть перезапущен для того, чтобы изменения вступили в силу. Например:
Все конфигурационные файлы находятся в папке /etc/php, например для PHP-FPM конфигурационный файл находится по адресу /etc/php/7.3/fpm:
Далее мы рассмотрим и изменим важные настройки в файле php.ini. Чтобы избежать ошибок не добавляйте новые строки, а ищите уже существующие и изменяйте значения на нужные.
Параметр open_basedir создан для обеспечения безопасности, ограничивая доступ к открытию файлов указанием директории, выше которой этого сделать нельзя. Укажите директорию где располагаются файлы для выполнения:
Этап 3 - Установка базы данных MySQL Community Edition
Установим систему управления базами данных MySQL Community Edition, через официальные репозитории. Прежде чем мы это сделаем, нам нужно установить необходимый пакет GnuPG, реализацию стандарта OpenPGP с открытым исходным кодом.
Загрузите файл с помощью утилиты wget, не забудьте вставить только что скопированный адрес вместо выделенной части ниже:
Теперь вы можете приступить к установке:
По умолчанию вам будет доступна установка 8.0 версии MySQL:
Во-первых, вам потребуется задать определенные правила надежности пароля для пользователей MySQL. Введите Y и ENTER, чтобы включить его, или просто нажмите ENTER, чтобы пропустить его. Если этот параметр включен, вам также будет предложено выбрать уровень 0–2 для строгой проверки пароля. Выберите номер и нажмите ENTER, чтобы продолжить. Рекомендуется выбрать 1.
Затем вас спросят, хотите ли вы изменить пароль root. Поскольку мы только что создали пароль при установке MySQL, мы можем смело пропустить это. Нажмите клавишу ВВОД, чтобы продолжить без обновления пароля.
На остальные запросы можно ответить да. Вам будет предложено удалить анонимного пользователя MySQL, запретить удаленный вход в систему root, удаление тестовой базы данных и перезагрузку таблиц привилегий, чтобы гарантировать, что предыдущие изменения вступили в силу должным образом. Введите Y и нажмите клавишу ВВОД для каждого запроса. Сценарий завершится после того, как будут получены ответы на все запросы. Теперь MySQL достаточно защищена.
Начиная с этого момента мы будем описывать установку NGINX и PHP-FPM на Debian GNU/Linux.
Этап 1 - Анализ и подготовка окружения
Для начала нам нужно подключиться к серверу по SSH, узнать количество процессоров, обновить список пакетов и произвести установку утилит.
Код: Выделить всё
cat /proc/cpuinfo | grep processor | wc -l
Код: Выделить всё
apt update -y
Код: Выделить всё
apt install mc htop -y
Этап 2 - Установка веб-сервера Nginx и PHP
APT автоматически установит модуль PHP-FPM для NGINX и все их зависимости и, затем, активирует их. NGINX должен быть перезапущен для того, чтобы изменения вступили в силу. Например:
Код: Выделить всё
APT автоматически добавит необходимые строки в соответствующие php.ini и т.д. В зависимости от расширения, будет внесены записи типа extension=foo.so. В любом случае, чтобы эти изменения вступили в силу, будет необходимо перезапустить сервер веб-сервер.apt install nginx php-fpm php-cli php-xml php-gd php-curl php-zip php-mbstring -y
Все конфигурационные файлы находятся в папке /etc/php, например для PHP-FPM конфигурационный файл находится по адресу /etc/php/7.3/fpm:
Код: Выделить всё
Конфигурационный файл php.ini является основным инструментом настройки ядра PHP. Он считается каждый раз при инициализации PHP.nano /etc/php/7.3/fpm/php.ini
Далее мы рассмотрим и изменим важные настройки в файле php.ini. Чтобы избежать ошибок не добавляйте новые строки, а ищите уже существующие и изменяйте значения на нужные.
Параметр open_basedir создан для обеспечения безопасности, ограничивая доступ к открытию файлов указанием директории, выше которой этого сделать нельзя. Укажите директорию где располагаются файлы для выполнения:
Код: Выделить всё
Параметр cgi.fix_pathinfo позволит пользователям сформировать PHP запросы таким образом, чтобы запускать скрипты, к которым у них не должно быть доступа. Мы можем предотвратить такое поведение раскомментировав эту строку и изменив её значение на “0”:open_basedir = /var/www/
Код: Выделить всё
Наберите ваш адрес или домен в вашем веб-браузере. Вы должны увидеть страницу Nginx по умолчанию. Для отображения *.php-страниц вашего сайта вам необходимо настроить конфигурацию Nginx. Отредактируйте файл конфигурации веб-сервера Nginx:
cgi.fix_pathinfo=0
Код: Выделить всё
Для строки worker_processes auto; установите значение равное числу процессоров, например 4.nano /etc/nginx/nginx.conf
Код: Выделить всё
Затем отредактируйте файл конфигурации сайта который создается по умолчанию. Вам нужно заменить домен example.com на ваш домен:
user www-data;
pid /run/nginx.pid;
#worker_processes auto;
worker_processes 4;
worker_rlimit_nofile 65535;
events {
multi_accept on;
worker_connections 65535;
}
http {
charset utf-8;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
server_tokens off;
log_not_found off;
types_hash_max_size 2048;
client_max_body_size 16M;
# MIME
include mime.types;
default_type application/octet-stream;
# logging
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log warn;
# load configs
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
Код: Выделить всё
nano /etc/nginx/sites-available/default
Код: Выделить всё
Создайте директорию которая у вас указана в конфигурации (/var/web/www):
# subdomains redirect
server {
listen 80;
listen [::]:80;
server_name *.example.com;
return 301 http://example.com$request_uri;
}
server {
listen 80;
listen [::]:80;
server_name example.com;
#set /var/web/www;
root /var/web/www;
# logging
access_log /var/log/nginx/example.com.access.log;
error_log /var/log/nginx/example.com.error.log warn;
# index.php
index index.php;
# index.php fallback
location / {
try_files $uri $uri/ /index.php?$args;
}
# security
# add_header X-Frame-Options "SAMEORIGIN" always;
# add_header X-XSS-Protection "1; mode=block" always;
# add_header X-Content-Type-Options "nosniff" always;
# add_header Referrer-Policy "no-referrer-when-downgrade" always;
# add_header Content-Security-Policy "default-src 'self' http: https: data: blob: 'unsafe-inline'" always;
# . files
# location ~ /\.(?!well-known) {
# deny all;
# }
# handle .php
location ~ \.php$ {
# 404
try_files $fastcgi_script_name =404;
# default fastcgi_params
include fastcgi_params;
# fastcgi settings
fastcgi_pass unix:/var/run/php/php7.3-fpm.sock;
fastcgi_index index.php;
fastcgi_buffers 8 16k;
fastcgi_buffer_size 32k;
# fastcgi params
fastcgi_param DOCUMENT_ROOT $realpath_root;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
fastcgi_param PHP_ADMIN_VALUE "/usr/lib/php/:/tmp/";
}
# additional config
# favicon.ico
location = /favicon.ico {
log_not_found off;
access_log off;
}
# robots.txt
location = /robots.txt {
log_not_found off;
access_log off;
}
# assets, media
location ~* \.(?:css(\.map)?|js(\.map)?|jpe?g|png|gif|ico|cur|heic|webp|tiff?|mp3|m4a|aac|ogg|midi?|wav|mp4|mov|webm|mpe?g|avi|ogv|flv|wmv)$ {
expires 7d;
access_log off;
}
# svg, fonts
location ~* \.(?:svgz?|ttf|ttc|otf|eot|woff2?)$ {
add_header Access-Control-Allow-Origin "*";
expires 7d;
access_log off;
}
# gzip
gzip on;
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_types text/plain text/css text/xml application/json application/javascript application/rss+xml application/atom+xml image/svg+xml;
# WordPress: deny wp-content, wp-includes php files
location ~* ^/(?:wp-content|wp-includes)/.*\.php$ {
deny all;
}
# WordPress: deny wp-content/uploads nasty stuff
location ~* ^/wp-content/uploads/.*\.(?:s?html?|php|js|swf)$ {
deny all;
}
# WordPress: deny wp-content/plugins (except earlier rules)
location ~ ^/wp-content/plugins {
deny all;
}
# WordPress: deny scripts and styles concat
location ~* \/wp-admin\/load-(?:scripts|styles)\.php {
deny all;
}
# WordPress: deny general stuff
location ~* ^/(?:xmlrpc\.php|wp-links-opml\.php|wp-config\.php|wp-config-sample\.php|wp-comments-post\.php|readme\.html|license\.txt)$ {
deny all;
}
}
Код: Выделить всё
После создания директории вы должны установить права:
mkdir /var/web/www
Код: Выделить всё
Далее требуется перезапустить Nginx и PHP службы. Вам нужно использовать инструмент командной строки systemctl.
chown -R www-data:www-data /var/web
Код: Выделить всё
systemctl restart nginx
Код: Выделить всё
Отредактируйте файл в директории которую использует Nginx.
systemctl restart php7.3-fpm
Код: Выделить всё
nano /var/web/www/index.php
Код: Выделить всё
Наберите IP-адрес вашего хоста в веб-браузере. Вы должны увидеть страницу c информацией о сервере. После вы можете поместить файлы вашего в сайта в директорию.<?php
phpinfo();
?>
Этап 3 - Установка базы данных MySQL Community Edition
Установим систему управления базами данных MySQL Community Edition, через официальные репозитории. Прежде чем мы это сделаем, нам нужно установить необходимый пакет GnuPG, реализацию стандарта OpenPGP с открытым исходным кодом.
Код: Выделить всё
Откройте страницу загрузки репозитория MySQL в веб-браузере https://dev.mysql.com/downloads/repo/apt/. Репозиторий MySQL APT предоставляет простой и удобный способ установки и обновления продуктов MySQL. Найдите кнопку «Download» (Скачать) в правом нижнем углу и перейдите на следующую страницу. На этой странице вам будет предложено войти в систему или зарегистрировать учетную запись Oracle. Вы можете пропустить и вместо этого нажать ссылку «No thanks, just start my download» (Нет, спасибо, просто начните загрузку). Щелкните правой кнопкой мыши ссылку и выберите «Копировать адрес ссылки» (эта опция может быть сформулирована по-разному, в зависимости от вашего браузера).apt install gnupg -y
Загрузите файл с помощью утилиты wget, не забудьте вставить только что скопированный адрес вместо выделенной части ниже:
Код: Выделить всё
Внимание! Ссылка меняется с появлением новых версий пакета.wget https://dev.mysql.com/get/mysql-apt-config_0.8.13-1_all.deb
Теперь вы можете приступить к установке:
Код: Выделить всё
Обновите кэш пакетов apt, чтобы сделать новые пакеты программного обеспечения доступными:
dpkg -i mysql-apt-config_0.8.13-1_all.deb
Код: Выделить всё
После обновления вы можете использовать apt для установки последнего пакета сервера MySQL. apt update
По умолчанию вам будет доступна установка 8.0 версии MySQL:
Код: Выделить всё
MySQL с помощью команды позволяет запустить сценарий для выполнения изменений, связанных с безопасностью. Для этого вам потребуется ввести следующую команду:
apt install mysql-server -y
Код: Выделить всё
После запуска сценария введите пароль пользователя root для MySQL, который вы задали во время установки и нажмите клавишу ВВОД (Enter). Далее вам потребуется ответить на ряд запросов. Давайте пройдемся по ним:mysql_secure_installation
Во-первых, вам потребуется задать определенные правила надежности пароля для пользователей MySQL. Введите Y и ENTER, чтобы включить его, или просто нажмите ENTER, чтобы пропустить его. Если этот параметр включен, вам также будет предложено выбрать уровень 0–2 для строгой проверки пароля. Выберите номер и нажмите ENTER, чтобы продолжить. Рекомендуется выбрать 1.
Затем вас спросят, хотите ли вы изменить пароль root. Поскольку мы только что создали пароль при установке MySQL, мы можем смело пропустить это. Нажмите клавишу ВВОД, чтобы продолжить без обновления пароля.
На остальные запросы можно ответить да. Вам будет предложено удалить анонимного пользователя MySQL, запретить удаленный вход в систему root, удаление тестовой базы данных и перезагрузку таблиц привилегий, чтобы гарантировать, что предыдущие изменения вступили в силу должным образом. Введите Y и нажмите клавишу ВВОД для каждого запроса. Сценарий завершится после того, как будут получены ответы на все запросы. Теперь MySQL достаточно защищена.
Код: Выделить всё
mysql -u root -p
Код: Выделить всё
CREATE DATABASE database CHARACTER SET utf8 COLLATE utf8_general_ci;
Код: Выделить всё
CREATE USER 'dbadmin'@'localhost' IDENTIFIED BY '[email protected]';
Код: Выделить всё
GRANT ALL PRIVILEGES ON database.* TO 'dbadmin'@'localhost';
Код: Выделить всё
FLUSH PRIVILEGES;