Logiss.ru

Ваша компьютерная помощь
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Установка Nginx в CentOS 7

alt=»Блог Михаила Григорьева» />

10 Июл 2021 23:07:41 | 0 comments

Установка и базовая настройка Nginx на CentOS 7

Про установку и базовую настройку Nginx на Debian я уже писал неоднократно, а вот CentOS как-то обошел стороной.

Исправим же это.

Исходные данные: ОС CentOS 7
Задача: Установить и настроить Nginx (ветка Mainline)

1. Установим вспомогательные утилиты

2. Добавим репозитарий Nginx в ОС

Добавим файл репозитария Nginx:

Включим репозитарий nginx-mainline:

3. Установим Nginx и OpenSSL (опционально)

4. Запустим Nginx

5. Проверим факта запуска Nginx

Строка «Active: active (running)» говорит о работе Nginx.

6. Проверим открытые порты

Видим, что Nginx ожидает соединения на 80 порту на всех сетевых интерфейсах.

Теперь займемся базовой настройкой.

1. Создадим директорию для хранения SSL сертификатов и DH-ключей, а также создаем файл с параметрами для DHE-шифров:

2. Создадим директории для хранения настроек Web-сайтов:

3. Отредактируем основной файл настроек Nginx.

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

Скачать уже готовый файл для Nginx версии 1.21.x :

После этого проверяем конфигурацию Nginx:

Если ошибок нет, то перезагружаем конфигурацию Nginx:

4. Меняем системные лимиты на количество открытых файлов.

Т.к. мы указали в nginx.conf параметр worker_rlimit_nofile = 10000, то будем исходить из него.

Традиционно во всех статьях в Интернет все меняют лимиты через редактирование файла /etc/security/limits.conf, но это неправильно, т.к. для CentOS этот файл не работает так как хочется.

В CentOS 7 используется система инициализации systemd и поэтому лимиты на максимальное количество открытых файлов нужно настроить для systemd, для этого выполняем:

Теперь проверим лимиты, для этого смотрим строку «Max open files» в выводе:

ВАЖНО! Если на Вашем сервере с CentOS включен firewall (посмотреть список правил можно командой iptables -nvL), то необходимо разрешить сетевые подключения на порт 80 и 443. В данной статье я не буду рассматривать как это сделать.

Теперь по адресу http://IP-адрес-вашего-сервер Вы сможете увидеть приветственную страницу «Welcome to nginx!».

За вывод данной страницы отвечает пока один единственный виртуальный сервер, его конфигурация находится в файле /etc/nginx/conf.d/default.conf

Выведем его содержимое без комментариев:

На данном этапе Вы должны прочитать документацию о том как Nginx обрабатывает входящие запросы, определение виртуальных серверов по имени и IP адресу и там же описана конфигурация простого сайта на PHP, но настройка PHP-FPM — это уже тема следующей статьи.

На этом базовая настройка Nginx завершена, до скорых встреч.

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

Как установить Nginx на CentOS 7

Nginx произносится как engine x — это бесплатный высокопроизводительный HTTP-сервер и обратный прокси-сервер с открытым исходным кодом, отвечающий за обработку нагрузки некоторых из крупнейших сайтов в Интернете.

Nginx можно использовать как автономный веб-сервер и как обратный прокси для Apache и других веб-серверов.

Читайте так же:
Что делать, если пролил жидкость на ноутбук

По сравнению с Apache, Nginx может обрабатывать гораздо большее количество одновременных подключений и имеет меньший объем памяти на каждое подключение.

Из этого руководства вы узнаете, как установить Nginx на вашем компьютере с CentOS 7 и управлять им.

Подготовка

Перед тем, как начать работу с руководством, убедитесь, что вы вошли в систему как пользователь с привилегиями sudo и у вас нет Apache или какой-либо другой службы, работающей на порте 80 или 443.

Установка Nginx на CentOS

Выполните следующие действия, чтобы установить Nginx на свой сервер CentOS:

  1. Пакеты Nginx доступны в репозиториях EPEL. Если у вас еще не установлен репозиторий EPEL, вы можете сделать это, набрав:
  2. Установите Nginx, набрав следующую команду yum:

Если вы устанавливаете пакет из репозитория EPEL впервые, yum может предложить вам импортировать ключ EPEL GPG:

Проверьте статус службы Nginx с помощью следующей команды:

Результат должен выглядеть примерно так:

Используйте следующие команды, чтобы открыть необходимые порты:

Управляйте службой Nginx с помощью systemctl

Вы можете управлять службой Nginx так же, как и любым другим модулем systemd.

Чтобы остановить службу Nginx, запустите:

Чтобы запустить его снова, введите:

После внесения некоторых изменений в конфигурацию перезагрузите службу Nginx:

Если вы хотите отключить службу Nginx для запуска при загрузке:

И чтобы снова включить его:

Структура файла конфигурации Nginx и рекомендации

  • Все файлы конфигурации Nginx находятся в каталоге /etc/nginx/ .
  • Главный файл конфигурации Nginx — это /etc/nginx/nginx.conf .
  • Чтобы упростить поддержку конфигурации Nginx, рекомендуется создать отдельный файл конфигурации для каждого домена.
  • Новые файлы блоков сервера Nginx должны оканчиваться на .conf и храниться в /etc/nginx/conf.d . Вы можете иметь столько серверных блоков, сколько вам нужно.
  • Рекомендуется следовать стандартному соглашению об именах, например, если ваше доменное имя — mydomain.com тогда ваш файл конфигурации должен называться /etc/nginx/conf.d/mydomain.com.conf
  • Если вы используете повторяющиеся сегменты конфигурации в серверных блоках своих доменов, рекомендуется создать каталог с именем /etc/nginx/snippets преобразовав эти сегменты в фрагменты и включив файл фрагмента в блоки сервера.
  • Файлы журнала Nginx ( access.log и error.log ) находятся в каталоге /var/log/nginx/ . Рекомендуется иметь разные файлы access и журналов error для каждого блока сервера.
  • Вы можете установить корневой каталог документов домена в любое место. Наиболее распространенные места для webroot:
    • /home/<user_name>/<site_name>
    • /var/www/<site_name>
    • /var/www/html/<site_name>
    • /opt/<site_name>
    • /usr/share/nginx/html

    Выводы

    Поздравляем, вы успешно установили Nginx на свой сервер CentOS 7. Теперь вы готовы начать развертывание своих приложений и использовать Nginx в качестве веб-сервера или прокси-сервера. Если вы намереваетесь разместить несколько доменов на своем сервере CentOS, вам следует научиться создавать блоки сервера Nginx .

    В настоящее время безопасный сертификат является обязательной функцией для всех веб-сайтов. Чтобы защитить свой сайт с помощью бесплатного сертификата Let’s Encrypt SSL, вы можете ознакомиться с нашим руководством о том, как защитить Nginx с помощью Let’s Encrypt в CentOS 7 .

    Этот пост является частью серии Install LEMP Stack on CentOS 7 . Другие сообщения из этой серии:

    Установка и оптимальная настройка Nginx + LAMP (CentOS 7)

    Недавно приняли решение переехать с хостинга на VPS, будем использовать: CentOS 7, Nginx, Apache, PHP, MySQL. Несмотря на большое количество статей на эту тему, многие аспекты не упоминаются, поэтому выкладываем эту статью чтобы услышать мнение знающих и опытных людей. Настраивать сервер как Вы уже поняли будем первый раз, поэтому о актуальности статьи можно будет судить из комментариев. Nginx будет отдавать статику, а динамику Apache (скрипты PHP), чтобы снизить нагрузку на сервер.

    Все настройки будем применять на рабочем сервере нашего проекта с конфигурацией сервера: CPU — 2 × 2000 МГц и RAM — 2048 МБ.

    Для начала работы находим подходящий VPS с предустановленной CentOS 7, к серверу будем подключаться по SSH через PuTTY.

    Вводим название хоста и порт, нажимаем Open:

    image

    Далее вводим логин [Enter], потом пароль (обратите внимание, ввод пароля не отображается) [Enter]:

    Обновить систему, при этом сохранить устаревшие версии пакетов:

    Создаём файловую структуру и пользователей под сайты.

    Создаём каталог (папку) для файлов под все сайты:

    Под каждый отдельный сайт выполните такие действия.

    Содержимое каждого сайта будет находиться в собственном каталоге, поэтому создаём нового пользователя и отдельный каталог для разграничения прав доступа:
    -b папка в которой будет создан каталог пользователя
    -m создать каталог
    -U создаём группу с таким же именем как у пользователя
    -s /bin/false отключаем пользователю shell

    ]# useradd name.site -b /website/ -m -U -s /bin/false

    ]# mkdir -p -m 754 /website/name.site/www
    [root@test

    ]# mkdir -p -m 754 /website/name.site/logs
    [root@test

    ]# mkdir -p -m 777 /website/name.site/tmp

    ]# chown -R name.site:name.site /website/name.site/

    ]# chmod 755 /website/name.site

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

    Инструкции по установке приведены на официальном сайте Nginx.

    Для настройки репозитория yum в CentOS создаём файл /etc/yum.repos.d/nginx.repo:

    ]# cd /etc/yum.repos.d
    [root@test

    ]# rpm —import http://nginx.org/keys/nginx_signing.key

    ]# systemctl start nginx.service

    image

    ]# systemctl stop nginx.service

    Устанавливаем Apache и PHP.

    Устанавливаем Apache (в CentOS — httpd):

    ]# systemctl start httpd.service

    image
    Временно останавливаем:

    ]# systemctl stop httpd.service

    Настраиваем Nginx.

    Добавляем в автозагрузку:

    ]# systemctl enable nginx.service

    user nginx;
    worker_processes 2;
    pid /var/run/nginx.pid;

    events <
    worker_connections 1024;
    multi_accept on;
    >

    http <
    error_log /var/log/nginx/error.log warn;
    access_log off;

    charset utf-8;
    server_tokens off;

    include /etc/nginx/mime.types;
    default_type application/octet-stream;

    reset_timedout_connection on;
    client_header_timeout 15;
    client_body_timeout 30;
    send_timeout 15;
    keepalive_timeout 5;
    keepalive_requests 30;
    client_max_body_size 8m;

    limit_rate_after 30M;
    limit_rate 500K;

    open_file_cache max=10000 inactive=3m;
    open_file_cache_min_uses 2;
    open_file_cache_valid 1m;

    sendfile on;
    tcp_nodelay on;
    tcp_nopush on;

    Для каждого сайта создаём виртуальный хост Nginx.

    Чтобы Nginx получил доступ к файлам сайта, добавим пользователя nginx в группу name.site:

    ]# usermod -a -G name.site nginx

    server <
    listen 80;
    server_name name.site www.name.site;
    #access_log /website/name.site/logs/nginx_access.log;
    error_log /website/name.site/logs/nginx_error.log;

    location / <
    proxy_pass http://127.0.0.1:8080/;
    proxy_read_timeout 300s;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_buffering off;
    >

    * .(css|js|png|gif|jpg|jpeg|ico)$ <
    root /website/name.site/www;
    expires 1d;
    >

    error_page 500 502 503 504 /50x.html;
    location = /50x.html <
    root /usr/share/nginx/html;
    >
    >

    * .(css|js|png|gif|jpg|jpeg|ico)$ <
    root /serves/name.site/www;
    expires 1d;
    >

    Настраиваем Apache.

    Посмотрите какой именно модуль Apache у вас установлен. У меня — apache2-mpm-prefork (один процесс с одним потоком будет обрабатывать одно соединение, рекомендуется как безопасный совместно с PHP):

    ServerRoot «/etc/httpd»
    DocumentRoot «/website»
    Include conf.modules.d/*.conf

    User apache
    Group apache

    Listen 127.0.0.1:8080
    ServerName 127.0.0.1:8080
    ServerAdmin root@localhost

    ServerSignature Off
    ServerTokens Prod

    RLimitMEM 786432000
    TimeOut 250

    AddDefaultCharset utf-8
    DefaultLanguage ru

    KeepAlive Off
    ContentDigest Off
    EnableSendfile off

    ErrorLog «logs/error_log»
    LogLevel error

    <IfModule mime_module>
    TypesConfig /etc/mime.types
    </IfModule>

    <Directory />
    DirectoryIndex index.php
    AllowOverride none
    Require all denied
    </Directory>

    <IfModule mpm_prefork_module>
    StartServers 5
    MinSpareServers 5
    MaxSpareServers 10
    MaxClients 30
    MaxRequestsPerChild 2500
    </IfModule>

    <Files «.ht*»>
    Require all denied
    </Files>

    Для каждого сайта создаём виртуальный хост Apache.

    Добавляем пользователя apache в группу каждого сайта:

    ]# usermod -a -G name.site apache

    <VirtualHost *:8080>
    ServerName name.site
    ServerAlias www.name.site

    <Directory «/website/name.site»>
    AllowOverride None
    Require all granted
    </Directory>

    ErrorLog /website/name.site/logs/error.log
    CustomLog /website/name.site/logs/requests.log combined
    </VirtualHost>

    Блок VirtualHost, указывается какой порт слушать:

    Проверка Nginx и Apache.

    Добавляем Apache в автозагрузку:

    ]# systemctl enable httpd.service

    ]# touch /website/name.site/www/index.php
    [root@test

    ]# cp /etc/httpd/conf.d/php.conf /etc/httpd/sites-enabled/php.conf

    ]# systemctl start nginx.service
    [root@test

    ]# systemctl start httpd.service

    Настраиваем PHP.

    engine = On
    expose_php = Off
    short_open_tag = Off
    zlib.output_compression = Off
    disable_functions = exec, passthru, shell_exec, system, proc_open, popen, curl_exec, curl_multi_exec, parse_ini_file, show_source, etc

    display_startup_errors = Off
    display_errors = Off
    log_errors = On
    error_log = «/usr/local/zend/var/log/php.log»
    ignore_repeated_errors = Off
    ignore_repeated_source = Off
    html_errors = On

    implicit_flush = Off
    output_buffering = 4K
    realpath_cache_size = 2M
    realpath_cache_ttl = 1800
    zend.enable_gc = On

    max_input_time = 200
    max_execution_time = 30
    file_uploads = On

    memory_limit = 256M
    post_max_size = 8M
    upload_max_filesize = 2M
    max_file_uploads = 4

    extension_dir = «/usr/local/zend/lib/php_extensions»
    date.timezone = Europe/Moscow
    default_mimetype = «text/html»
    default_charset = «UTF-8»

    variables_order = «CGPS»
    register_argc_argv = Off
    auto_globals_jit = On
    enable_dl = Off

    allow_url_fopen = On
    allow_url_include = Off

    Устанавливаем и настраиваем MySQL.

    Немного про безопасность.

    Под root заходить нежелательно, поэтому создаём нового пользователя:

    ]# gpasswd -a newuser wheel

    ]# service sshd restart

    P.S. Можно использовать Nginx с php-fpm, но есть такое мнение, что при правильно настроенном Apache особой разницы в производительности не наблюдается.

    Особое внимание хотелось обратить на безопасность и производительность сервера, поэтому если вы нашли ошибки или недочёты, просим написать это в комментариях и в случае необходимости мы внесём изменения в статью.

    Установка Nginx в CentOS 7

    Nginx (или Engine X) — это бесплатный, свободный и мощный HTTP- и прокси-сервер с открытым исходным кодом и архитектурой на основе обработки событий. Он написан на языке программирования С и может работать как в Windows, так и в Unix-подобных системах.

    Кроме функции веб-сервера, программа может работать в качестве обратного прокси, прокси для TCP/UDP или почты, а также в качестве балансировщика нагрузки. Nginx используется для обеспечения работы огромного количества сайтов в сети интернет, а также известна, как самый высокопроизводительный веб-сервер. В этой статье мы рассмотрим, как выполняется установка Nginx CentOS 7, а также как выполнить первоначальную настройку программы.

    Установка Nginx в CentOS 7

    Веб-сервер Nginx есть в официальных репозиториях дистрибутива, та версия уже устарела, и если вы хотите получить новую версию с современными возможностями, вам придётся использовать репозиторий EPEL. Для его добавления в систему выполните:

    yum install epel-release

    Затем можно установить Nginx:

    yum install nginx

    Чтобы запустить сервис Nginx, выполните:

    systemctl start nginx

    Затем необходимо добавить программу в автозагрузку:

    systemctl enable nginx

    Далее надо разрешить трафик для веб-сервера в брандмауэре системы:

    firewall-cmd —zone=public —permanent —add-service=http
    firewall-cmd —zone=public —permanent —add-service=https

    И перезагрузить брандмауэр:

    Если все было сделано правильно, то, открыв адрес сервера, на который вы устанавливали Nginx, вы увидите страницу по умолчанию:

    Настройка расположения файлов сайта

    Установка Nginx CentOS 7 завершена, теперь будет рассмотрена настройка Nginx. Нам нужно сообщить Nginx, где будут находится файлы нашего сайта. В конфигурационном файле /etc/nginx.conf, уже настроен один виртуальный хост. Его мы и будем использовать. Здесь указана опция default_server, поэтому он будет открываться для всех запросов к Nginx:

    Сначала нужно создать само расположение файлов. Создайте папку /var/www/html/default, в которой будут храниться наши файлы сайтов, и дайте на неё права пользователю nginx:

    mkdir /var/www/html/default
    chown nginx:nginx /var/www/html/default

    Также можно создать файл index.html в этой папке для теста веб-сервера с таким текстом:

    Этот файл тоже должен принадлежать пользователю Nginx. Далее в конфигурационном файле /etc/nginx/nginx.conf найдите секцию server и замените значение параметра root на /var/www/html/default:

    Теперь Nginx будет брать файлы сайта из этого каталога при всех запросах. Перезапустите Nginx:

    systemctl restart nginx

    Затем откройте снова адрес сервера в браузере, чтобы посмотреть, работает ли наше расположение файлов. Если всё было сделано правильно, вы увидите сообщение it works:

    Если возникает ошибка, убедитесь, что у Nginx есть права для доступа к этому файлу, а также, что SELinux отключён или правильно настроен.

    Настройка PHP-FPM Nginx CentOS

    Если вам нужен Nginx, то скорее всего, вам нужно также настроить его для работы с интерпретатором PHP. Дальше будет разобрана настройка php-fpm Nginx CentOS 7. Прочитать более подробно про установку PHP 7 в CentOS можно в отдельной статье, а в этой статье мы будем работать с версией, доступной в официальных репозиториях. Для Nginx нам необходимо установить пакет php-fpm:

    yum install php-fpm

    Затем запустите службу php-fpm командой:

    systemctl start php-fpm

    Откройте конфигурационный файл php-fpm, который находится по адресу /etc/php-fpm.d/www.conf и посмотрите, на каком порту ожидает соединений запущенная служба. По умолчанию это 9000:

    Далее нам осталось только связать Nginx с новой службой. Для этого в секцию server добавьте такой код:

    .php$ <
    try_files $uri =404;
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_param SCRIPT_NAME $fastcgi_script_name;
    fastcgi_buffer_size 128k;
    fastcgi_buffers 256 16k;
    fastcgi_busy_buffers_size 256k;
    fastcgi_temp_file_write_size 256k;
    include fastcgi_params;
    >

    Здесь очень важно значение этого параметра:

    Оно должно соответствовать тому, которое мы видели в файле /etc/php-fpm.d/www.conf. Это адрес и порт на котором ожидает подключения служба php-fpm. Всё остальное можно оставить как есть и модифицировать при необходимости. Затем перезагрузите Nginx:

    sudo systemctl reload nginx

    Опция reload позволяет перечитать конфигурацию без перезагрузки веб-сервера. Осталось создать тестовый файл с таким содержимым:

    Затем откройте адрес сервера на который был установлен Nginx плюс phpinfo.php в браузере:

    Теперь вы увидите, что php-fpm nginx настроен полностью и корректно работает.

    Обратите внимание, что секция location для php — это регулярное выражение и если у вас будут более общие регулярные выражения, то эта секция должна находиться перед ними, потому что Nginx не будет проверять все регулярные выражения и искать самое подходящее, а выберет первое, которое совпадёт.

    Выводы

    В этой статье мы разобрали, как установить Nginx CentOS 7, а также как настроить первый веб-сайт и подключить обработку скриптов с помощью интерпретатора php-fpm. В следующих статьях разберёмся с настройкой виртуальных хостов для Nginx и SSL-сертификатов.

    alt=»Creative Commons License» width=»» />
    Статья распространяется под лицензией Creative Commons ShareAlike 4.0 при копировании материала ссылка на источник обязательна.

    Оцените статью:

    Об авторе

    Основатель и администратор сайта losst.ru, увлекаюсь открытым программным обеспечением и операционной системой Linux. В качестве основной ОС сейчас использую Ubuntu. Кроме Linux, интересуюсь всем, что связано с информационными технологиями и современной наукой.

    5 комментариев

    А зачем php в статье про nginx? мб стоит как то более подробно расписать возможности nginx, например stream проксирование, либо возможность разным сайтам работать под разными пользователями. Подобных этой статей слишком много уже.

    почему синтаксис $yum install nginx? ведь должно быть
    #yum install nginx
    $ sudo yum install nginx
    или не прав?

    После перезапуска в браузере выдает 403 ошибку, где права не применились?
    # ls -l
    итого 60
    drwxr-xr-x. 2 root root 6 май 10 16:14 conf.d
    drwxr-xr-x. 2 root root 6 май 10 16:14 default.d
    -rw-r—r—. 1 root root 1077 май 10 16:10 fastcgi.conf
    -rw-r—r—. 1 root root 1077 май 10 16:10 fastcgi.conf.default
    -rw-r—r—. 1 root root 1007 май 10 16:10 fastcgi_params
    -rw-r—r—. 1 root root 1007 май 10 16:10 fastcgi_params.default
    -rw-r—r—. 1 root root 2837 май 10 16:10 koi-utf
    -rw-r—r—. 1 root root 2223 май 10 16:10 koi-win
    -rw-r—r—. 1 root root 3957 май 10 16:10 mime.types
    -rw-r—r—. 1 root root 3957 май 10 16:10 mime.types.default
    -rw-r—r—. 1 nginx nginx 2467 июл 6 21:31 nginx.conf
    -rw-r—r—. 1 root root 2656 май 10 16:10 nginx.conf.default
    -rw-r—r—. 1 root root 636 май 10 16:10 scgi_params
    -rw-r—r—. 1 root root 636 май 10 16:10 scgi_params.default
    -rw-r—r—. 1 root root 664 май 10 16:10 uwsgi_params
    -rw-r—r—. 1 root root 664 май 10 16:10 uwsgi_params.default
    -rw-r—r—. 1 root root 3610 май 10 16:10 win-utf

    О каких вопросах в комментариях может быть речь, если даже вызов phpinfo написан с ошибкой. Не читайте статью — пустая трата времени.

    Я полчаса потратил на ковыряние конфигов, только после твоего коммента дошло! Сайт нормальный вроде, но авторы косячат иногда!

    Подскажите, пожалуйста, какие права должны быть на директорию /home/test, если нужно настроить http сервер так, чтобы он отображал содержимое домашнего каталога пользователя test командой curl localhost или по IP сервера.

Ссылка на основную публикацию
Adblock
detector