Как установить nginx на centos 7 без интернета
Это руководство покажет, как установить и запустить Nginx на сервере CentOS 7.
2: Установка Nginx
Теперь можно приступать к установке Nginx на сервер. Для этого используйте команду yum:
sudo yum install nginx
Затем нужно ответить yes на извещение, после чего Nginx завершит установку на виртуальный выделенный сервер.
Тюнинг веб-сервера
Открываем на редактирование следующий файл:
И правим следующее:
upload_max_filesize = 256M
post_max_size = 256M
short_open_tag = On
date.timezone = "Europe/Moscow"
systemctl restart php-fpm
NGINX
Открываем на редактирование следующий файл:
И правим следующее:
После перезапускаем nginx:
systemctl restart nginx
Postfix
Чтобы отправляемая почта меньше попадала в СПАМ, необходимо выполнить следующие шаги:
Установка Memcached
Первым этапом мы установим и настроим сервис memcached. Вторым — модуль php-memcached.
Сервис memcached
Выполняем установку пакетов:
yum install memcached
После разрешаем автозапуск и запускаем сервис кэширования:
systemctl enable memcached --now
Модуль для php
Установить компонент из репозитория:
yum install php-pecl-memcached
После устаноки модуля перезапускаем php-fpm:
systemctl restart php-fpm
Чтобы проверить, что модуль memcached работаем, открываем наш сайт в браузере — в phpinfo должна появиться новая секция:
. или вводим команду:
php -m | grep memcached
Мы должны получить:
Postfix
В CentOS postfix уже установлен и запущен. Нам необходимо сделать несколько простых настроек:
myorigin = $mydomain
smtp_generic_maps = hash:/etc/postfix/generic_map
Открываем карту пересылки:
* данной настройкой мы будем подставлять всем отправляемым письмам без поля FROM адрес [email protected].
Для применения настроек перезагружаем почтовый сервер:
systemctl restart postfix
Установка и настройка FTP-сервера
В качестве FTP-сервера будем использовать ProFTPd, так как он позволяет авторизовываться под uid системных учетных записей. Для его установки вводим следующую команду:
yum install proftpd proftpd-utils
Создаем каталог для хранения настроек:
Создаем виртуального пользователя:
ftpasswd --passwd --file=/etc/proftpd.d/ftpd.passwd --name=ftpwww --uid=48 --gid=48 --home=/var/www --shell=/sbin/nologin
* где /etc/proftpd/ftpd.passwd — путь до файла, в котором хранятся пользователи; ftpwww — имя пользователя (логин); uid и gid — идентификаторы пользователя и группы системной учетной записи (apache); /var/www — домашний каталог пользователя; /sbin/nologin — оболочка, запрещающая локальный вход пользователя в систему.
Открываем на редактирование конфигурационный файл proftpd:
И редактируем следующее (комментируем):
В конце файла добавим следующее:
UseIPv6 off
IdentLookups off
PassivePorts 60000 65535
RequireValidShell off
AuthUserFile /etc/proftpd.d/ftpd.passwd
AuthPAM off
LoadModule mod_auth_file.c
AuthOrder mod_auth_file.c
* где 60000 - 65535 — диапазон динамических портов для пассивного режима.
Разрешаем автозапуск FTP-серверу и запускаем его:
systemctl enable proftpd --now
Пробуем подключиться к серверу, использую любые FTP-клиенты, например, FileZilla, Total Commander или тот же браузер.
Это базовая и самая простая настройка ProFTPd, но если необходимо настроить TLS или хранить виртуальных пользователей в базе MySQL, читайте подробнее инструкцию по настройке ProFTPd на CentOS 7.
Несмотря на то, что мы установили и настроили PHP-FPM, Apache нам понадобится, как минимум, по двум причинам. Во-первых, многие сайты используют файл .htaccess, который читает только Apache. Во-вторых, последний включает большое число модулей, которые может использовать портал.
В некоторых случаях, можно обойтись без Apache, но в данной инструкции мы опишем процедуру его установки и настройки.
Заходим в настройки:
И редактируем следующее:
* наш веб-сервер будет слушать на порту 8080, так как на 80 уже работает NGINX.
<IfModule dir_module>
DirectoryIndex index.php index.html
</IfModule>
* если не указан конкретный скрипт, сначала веб-сервер пытается найти и запустить index.php, затем index.html
<Directory /var/www/*/www>
AllowOverride All
Options Indexes ExecCGI FollowSymLinks
Require all granted
</Directory>
* где Directory — разрешенные каталоги для запуска из apache; Options — разрешенные опции; Require — с каких IP-адресов можно открывать сайты, определенные в данном каталоге. Итого, мы разрешаем все каталоги в /var/www, но только если следующий каталог будет www; разрешаем опции Indexes (возвращает список файлов, если нет индексного файла, например, index.php), ExecCGI (разрешены сценарии CGI), FollowSymLinks (включены символические ссылки в этом каталоге); доступ для данных каталого разрешен со всех адресов (all granted).
Разрешаем автозапуск и запускаем службу:
Создаем php-файл со следующим содержимым:
Открываем браузер и вводим в адресную строку IP-адрес нашего сервера и добавляем :8080. Мы должны увидеть привычную страницу:
NGINX + Apache
Ранее нами была настроена связка nginx + php-fpm. Теперь проверяем совместную работу первого с apache.
Открываем конфигурационный файл nginx:
* если при настройке nginx мы редактировали файл /etc/nginx/nginx.conf, то необходимо открыть его.
Находим наш настроенный location для php-fpm:
Проверяем и перезапускаем nginx:
systemctl restart nginx
Пробуем открыть в браузере IP-адрес нашего сервера — должна открыться та же страница, что при проверке Apache (с добавлением 8080):
Apache Real IP
Для решения проблемы будем использовать модуль mod_rpaf. Устанавливаем набор разработчика для apache:
Переходим в каталог /usr/local/src:
Переходим в распакованный каталог:
Собираем модуль и устанавливаем его:
* при возникновении ошибки ./apxs.sh: line 15: -c: command not found, необходимо поставить which командой yum install which.
Создаем конфигурационный файл со следующим содержимым:
И редактируем содержимое на:
Открываем браузер и вводим в адресную строку IP-адрес нашего сервера. Мы должны увидеть внешний адрес компьютера, с которого обращаемся к серверу.
Создание первого сайта
Задаем переменную, значение которой будет домен сайта:
Создаем новый файл виртуального домена NGINX:
* обязательно на конце должен быть .conf, так как только такие файлы веб-сервер подгружает в конфигурацию.
И добавляем следующее содержимое.
access_log /var/www/site1/log/nginx/access_log;
error_log /var/www/site1/log/nginx/error_log;
gzip on;
gzip_disable "msie6";
gzip_min_length 1000;
gzip_vary on;
gzip_proxied expired no-cache no-store private auth;
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript;
* ^.+\.(jpg|jpeg|gif|png|css|zip|tgz|gz|rar|bz2|doc|docx|xls|xlsx|exe|pdf|ppt|tar|wav|bmp|rtf|js)$ expires modified +1w;
>
>
* где site1.local — домен, для которого создается виртуальный домен; /var/www/site1 — каталог, в котором будет размещаться сайт.
** все запросы будут переводиться на локальный сервер, порт 8080, на котором работает apache, кроме обращений к статическим файла (jpg, png, css и так далее).
*** обратите внимание на выделения полужирным — здесь нужно подставить свои данные.
/.well-known root /usr/share/nginx/html;
allow all;
>
if ($uri !
server listen 443 ssl;
ssl on;
ssl_certificate /etc/nginx/ssl/cert.pem;
ssl_certificate_key /etc/nginx/ssl/cert.key;
access_log /var/www/site1/log/nginx/access_log;
error_log /var/www/site1/log/nginx/error_log;
gzip on;
gzip_disable "msie6";
gzip_min_length 1000;
gzip_vary on;
gzip_proxied expired no-cache no-store private auth;
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript;
/.well-known root /usr/share/nginx/html;
allow all;
>
* ^.+\.(jpg|jpeg|gif|png|css|zip|tgz|gz|rar|bz2|doc|docx|xls|xlsx|exe|pdf|ppt|tar|wav|bmp|rtf|js)$ expires modified +1w;
>
>
Теперь создаем виртуальный домен в Apache:
<VirtualHost *:8080>
Define root_domain site1.local
Define root_path /var/www/site1
ErrorLog $/log/apache/error_log
TransferLog $/log/apache/access_log
php_admin_value upload_tmp_dir $/tmp
php_admin_value doc_root $
php_admin_value open_basedir $:/usr/local/share/smarty:/usr/local/share/pear
php_admin_value session.save_path 0;0660;$/tmp
</VirtualHost>
Создаем каталоги для сайта:
mkdir -p /var/www/$TMP_SITE/
mkdir -p /var/www/$TMP_SITE/log/
Создаем индексный файл со следующим содержимым:
Задаем права на папки:
chown -R apache:apache /var/www/$TMP_SITE
chmod -R 775 /var/www/$TMP_SITE
Проверяем корректность настроек конфигурационных файлов:
systemctl reload nginx
Открываем сайт в браузере.
При необходимости, создаем базу данных.
> CREATE DATABASE site1 DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
* данными sql-командами мы создаем базу данных site1 и предоставляем к ней доступ для учетной записи dbuser с паролем password. При желании сделать соединение более безопасным, можно убрать WITH GRANT OPTION.
Общая настройка системы
Установка пакетов
1. Обновляем CentOS:
2. Устанавливаем репозиторий EPEL и пакет для загрузки:
yum install epel-release wget
Время
1. Устанавливаем часовой пояс:
timedatectl set-timezone Europe/Moscow
* данной командой мы установим часовой пояс по московскому времени.
2. Устанавливаем и запускаем службу для автоматической синхронизации времени:
yum install chrony
systemctl enable chronyd --now
Настройка безопасности
1. Отключаем SELinux:
sed -i "s/SELINUX=enforcing/SELINUX=disabled/" /etc/selinux/config
* первая команда редактирует конфигурационный файл, чтобы SELinux не запускался автоматически, вторая — отключает его разово. Подробнее читайте статью Как отключить SELinux.
2. Открываем необходимые порты в брандмауэре:
firewall-cmd --permanent --add-port=/tcp
firewall-cmd --permanent --add-port=/tcp
* 80, 443 и 8080 порты для веб-сервера; 20, 21 порты нужны для работы FTP; 60000-65535 также необходимы для работы FTP (динамические порты для пассивного режима); последняя команда перезапускает firewalld, чтобы применить новые правила. Подробнее про настройку firewalld.
Установка xCache
xCache не поддерживается в php7. Если мы установили именно эту версию, пропускаем установку данного пакета.
Запускаем установку xCache следующей командой:
yum install php-xcache
systemctl restart php-fpm
В phpinfo должно появиться следующее:
Установка PHP и PHP-FPM
Устанавливаем PHP и php-fpm следующей командой:
yum install php php-fpm
* В CentOS 7 будет установлена php версии 5.4. Если необходимо установить PHP 7, читайте статью Как установить PHP 7 на CentOS 7.
Запускаем php-fpm и разрешаем его автозапуск:
systemctl enable php-fpm --now
Настройка связки NGINX + PHP
Открываем файл для настройки виртуального домена по умолчанию. В зависимости от версии CentOS 7 пути могут различаться:
В секции location редактируем параметр index на следующее значение:
location / index index.php index.html index.htm;
>
* добавляем index.php в начало списка. Если параметра index нет, создаем его.
А внутри секции server добавим следующее:
Открываем настройки php-fpm:
Проверяем, настройки параметров:
. иначе, меняем значение. После перезагружаем php-fpm:
systemctl restart php-fpm
Проверяем правильность настроек nginx:
И перезагружаем его:
systemctl restart nginx
Создаем index.php в каталоге сайта по умолчанию со следующим содержимым:
Открываем в браузере IP-адрес нашего сервера. Теперь мы должны увидеть сводную информацию по PHP и его настройкам, например:
3: Запуск Nginx
Веб-сервер Nginx не запускается самостоятельно. Чтобы запустить Nginx, наберите:
sudo systemctl start nginx.service
На данном этапе можно выполнить проверку, чтобы убедиться, что все прошло должным образом; для этого посетите общественный IP-адрес сервера в веб-браузере (чтобы узнать общественный IP-адрес сервера, см. инструкции в следующем разделе):
Это должно вывести веб-страницу Nginx для CentOS 7 по умолчанию, которая предоставляет некоторую важную информацию, а также позволяет протестировать Nginx.
Если такая страница появилась, значит, все идет как надо.
Прежде чем продолжить, вероятно, понадобится активировать автоматический запуск Nginx, чтобы веб-сервер запускался при загрузке системы. Для этого введите следующую команду:
sudo servicectl enable nginx.service
Готово! Теперь веб-сервер Nginx установлен и запущен.
1: Репозиторий Nginx
Чтобы добавить yum-репозиторий Nginx на CentOS 7, откройте терминал и используйте следующую команду:
NGINX + PHP + PHP-FPM
В чистом виде, веб-сервер NGINX используется редко. Настроим связку с PHP и его обработчиком — PHP-FPM.
Для начала, устанавливаеми тот и другой следующими командами:
yum install php
yum install php-fpm
Разрешаем автозапуск php-fpm и запускаем его:
systemctl start php-fpm
systemctl enable php-fpm
Настройка NGINX для работы с PHP и PHP-FPM
Открываем настройки сайта по умолчанию:
Редактируем секцию location:
location / root /usr/share/nginx/html;
index index.php;
>
* здесь мы поменяли index.html на index.php. Эта настройка позволит автоматически искать и запускать файл index.php, если путь к скрипту не указан явно.
Приводим к следующему виду секцию server:
\.php$ set $root_path /usr/share/nginx/html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $root_path$fastcgi_script_name;
include fastcgi_params;
fastcgi_param DOCUMENT_ROOT $root_path;
>
* где /usr/share/nginx/html — корневой путь по умолчанию для хранения сайта; 9000 — порт, на котором работает php-fpm.
Веб-сервер, настроенный по данной инструкции можно будет использовать для размещения собственных сайтов в локальной сети или сети Интернет. Данная инструкция проверена для CentOS 7.
Как узнать общественный IP-адрес сервера
Чтобы узнать общественный IP сервера, запустите следующую команду:
ip addr show eth0 | grep inet | awk '< print $2; >' | sed 's/\/.*$//'
Root-каталог и конфигурационные файлы Nginx
Чтобы начать обслуживать собственные страницы или приложения через Nginx, нужно знать расположение конфигурационных файлов и root-каталога веб-сервера по умолчанию.
LEMP - представляет собой стек веб-технологий, который позволяет создать среду для работы, как слабо так и высоко нагруженных веб-приложений. LEMP является акронимом, каждая буква которого представляет следующие веб-технологии: L - Linux, E - Nginx, M - MySQL/MariaDB, P - PHP.
В данной статье рассмотрен пример установки LEMP-стека на VPS/VDS сервере под управлением операционной системы CentOS 7.
Перед началом установки стека LEMP рекомендуется обновить все ранее установленные пакеты приложений.
Для начала убедимся, что файервол у нас запущен и включен в автозапуск при перезагрузке сервера:
systemctl status firewalld;systemctl is-enabled firewalld;
Если в результате выполнения команд вы видите такие слова как inactive и disabled соответственно, то это означает, что файевол у вас не работает и ваш сервер не защищен. Запустить файервол можно так:
sudo systemctl start firewalld;sudo systemctl enable firewalld;
Перезапустим службу firewalld для того, чтобы изменения вступили в силу.
Теперь, при удачно выполненных предыдущих действиях, ваши будущие сайты будут доступны для всех.
Nginx (энджин экс) можно установить как минимум двумя способами.
Так как Nginx не входит в набор пакетов доступных из базового репозитория, то скачать и установить его вы сможете его из репозитория EPEL-release.
EPEL-release, в некоторых дистрибутивах, может быть не установлен по-умолчанию, поэтому для начала нужно убедится, что он у вас есть.
Если вы не видите никаких результатов для вышеуказанных команд, тогда EPEL репозитория у вас нет и его нужно установить.
Далее устанавливаем сам веб-сервер nginx
Минус данного способа в том, что часто в EPEL репозитории хранится устаревшая версия пакета Nginx. Установленную версию можно проверить следующей командой:
Для этого необходимо создать новый файл nginx.repo в каталоге /etc/yum.repos.d .
Файл нужно наполнить следующим содержимым:
Теперь установим Nginx, однако в качестве источника пакета автоматически будет выбран наш, только что созданный, репозиторий.
Включим Nginx и добавим его в автозапуск при перезагрузке системы.
sudo systemctl start nginx;sudo systemctl enable nginx;
Уже сейчас можно проверить работоспособность сервера. Наберите ip-адрес вашей машины в адресной строке браузера и вам будет выдана проверочная страница /usr/share/nginx/html/index.html .
Nginx запущен и исправно работает
Настроим параметры в главном конфигурационном файле Nginx.
Перед любым начальным изменением конфигов, рекомендую создавать их копии.
sudo cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf_backupПриступим к редактированию главного конфига Nginx.
log_format main '$remote_addr - $remote_user [$time_local] "$request" ' gzip_types text / plain text / css application / json application / x - javascript text / xml application / xml application / xml + rss text / javascript application / javascript application / msword application / rtf application / pdf application / x - font - ttf image / svg + xml image / x - icon ;После сохранения изменений, рекомендую всегда проверять конфиг на ошибки в синтаксисе.
Для создания возможности обработки нескольких доменов на одном ip-адресе, веб-сервер Apache использует виртуальные хосты - это специальные файлы конфигурации веб-сервера, которые настраиваются отдельно для каждого домена. В веб-сервере Nginx также присутствует такая возможность, однако в терминологии Nginx виртуальные хосты называются сервер-блоками.
Создание директорий для сайта
По умолчанию, Nginx создает один сервер-блок настроенный для обработки файлов из директории /usr/share/nginx/html , однако для создания самостоятельных сервер-блоков для каждого отдельного домена рекомендуется использовать директорию /var/www . Внутри каталога /var/www создадим новый каталог с именем вашего домена, внутри которого также добавим нужные подкаталоги - www , где будут хранится файлы сайта и log , где будут хранится логи работы веб-сервера.
Созданным директориям нужно присвоить владельца. Владельцем чаще всего назначается сам веб-сервер т.к. именно он проводит большинство операций с файлами.
Установка веб-сервера в качестве владельца особенно важна при установки каких-либо CMS-систем, например WordPress.
Так как нашим веб сервером будет Nginx, то и установим его в качестве владельца и группы. При необходимости группу можно будет заменить на любую удобную вам.
Также настроим права доступа для /var/www
Создание тестовой страницы.
Для проверки работоспособности будущего сервер-блока создадим главную страницу сайта - index.html . При желании, вы можете создать полноценную html-разметку, однако я ограничусь простым текстом, которым заполню файл с помощью команды - echo.
Создание сервер-блока
Изначально Nginx содержит только один сервер-блок с именем - default , его мы будет использовать в качестве шаблона для наших собственных сервер-блоков.
Создадим необходимые для работы каталоги и файл для настроек сервер-блока:
Для получения последней версии NGINX создаем файл с настройками нового репозитория:
И приводим его к следующему виду:
Обновляем систему и список пакетов:
* если система запросит подтверждение, отвечаем Y.
Устанавливаем NGINX следующей командой:
yum install nginx
firewall-cmd --permanent --add-port=80/tcp
firewall-cmd --permanent --add-port=443/tcp
Теперь добавляем NGINX в автозапуск при загрузке CentOS
systemctl enable nginx
И запускаем веб-сервер:
systemctl start nginx
Для проверки запустите браузер на другом компьютере и введите в адресную строку IP-адрес сервера, который был настроен. Должна загрузиться тестовая страница, наприимер:
Установка phpMyAdmin
Для установки phpMyAdmin вводим следующую команду:
yum install phpmyadmin
Однако, если мы устанавливали php версии 7 и выше, необходимо указать репозиторий, который мы использовали для этого, например:
yum --enablerepo=remi-php74 install phpmyadmin
* в данном примере предполагается, что мы использовали репозиторий remi-php74.
Это необходимо для корректной установки расширений PHP.
Теперь создадим для него отдельный виртуальный домен в NGINX:
И добавим в него следующее содержимое:
server listen 80;
server_name phpmyadmin.dmosk.local;
set $root_path /usr/share/phpMyAdmin;
location / root $root_path;
index index.php;
>
* где phpmyadmin.dmosk.local — адрес для виртуального домена, именно этот адрес должен быть введен в адресную строку браузера, чтобы открылся нужный сайт. Поэтому есть нет возможность зарегистрировать домен и имя узла в DNS, можно воспользоваться локальным файлом hosts. /usr/share/phpMyAdmin — это каталог, в который по умолчанию устанавливается phpMyAdmin.
После перезапускаем NGINX:
systemctl reload nginx
Также нужно перезапустить php-fpm, так как в процессе установки был добавлен модуль mbstring:
systemctl restart php-fpm
Установка NGINX
yum install nginx
Внесем небольшую корректировку в файл nginx.conf:
* на практике, может встретиться ошибка could not build server_names_hash, you should increase server_names_hash_bucket_size: 32. Она возникает при большом количестве виртуальных серверов или если один из них будет иметь длинное название. Данная строка в конфиге исправит ситуацию.
Разрешаем автозапуск сервиса и запустим его:
systemctl enable nginx --now
Проверим, что веб-сервер работает. Для этого открываем браузер на другом компьютере, который находится в одной сети и вводим в адресной строке IP-адрес сервера. В итоге мы должны увидеть заголовок «Welcome to nginx!»:
* обратите внимание, что данное приветствие может иметь и другой вид.
Установка MariaDB или MySQL
В данной статье мы установим MariaDB, но процедура установки и настройки MySQL аналогичная. Все расхождения будут отмечены явно в инструкции.
Устанавливаем MariaDB следующей командой:
yum install mariadb-server
* будет установлена mariadb версии 5.5. Если нужна другая, то читаем подробнее в инструкции Установка MariaDB на CentOS или Ubuntu.
** для установки mysql выполняем команду yum install mysql
Разрешаем автозапуск и запускаем СУБД:
systemctl enable mariadb --now
* для работы с mysql меняем mariadb на mysql.
Сразу создаем пароль для учетной записи root:
mysqladmin -u root password
PHP + MariaDB (MySQL)
Для возможности подключаться к базе данных скриптами PHP необходимо установить следующие модули:
yum install php-mysqli
Если мы установили php5, также ставим php-mysql:
yum install php-mysql
После перезагружаем php-fpm:
systemctl restart php-fpm
И открываем наш сайт в браузере. В phpinfo появится новая секция MySQL:
* нас не должно смущать, что установили мы mariadb, а заголовок mysql. Если посмотреть в таблицу, можно увидеть ячейку Client API version, в которой указано, что используется именно mariadb.
Требования
Для выполнения данного руководства понадобятся привилегии root. Чтобы узнать, как получить все root-привилегии, читайте руководство «Начальная настройка сервера CentOS 7».
Читайте также: