nginx [engine x] — это HTTP-сервер и обратный прокси-сервер, почтовый прокси-сервер, а также TCP/UDP прокси-сервер общего назначения, изначально написанный Игорем Сысоевым.
NGINX является одним из нескольких серверов, написанных для решения проблемы C10K. В отличие от традиционных серверов, NGINX не использует потоки для обработки запросов. Вместо этого он использует гораздо более масштабируемую управляемую событиями (асинхронную) архитектуру. Эта архитектура использует небольшие, но, что более важно, предсказуемые объемы памяти под нагрузкой. Даже если вы не собираетесь обрабатывать тысячи одновременных запросов, вы все равно можете воспользоваться высокопроизводительным и небольшим объемом памяти NGINX. NGINX масштабируется во всех направлениях: от самых маленьких VPS до больших кластеров серверов.
Стремление Игоря Сысоева к решению проблемы C10K привело к тому, что он стал автором высокопроизводительного веб-сервера NGINX, который начал создавать в 2002 году (первоначально выпущен в 2004 году). Использование NGINX стало настолько популярными, что
в 2011 году Игорь Сысоев основал компанию NGINX, Inc. В настоящее время - технический директор и соучредитель.
NGINX Open Source доступен в двух версиях:
Основная версия (Mainline) — включает в себя последние функции и исправления ошибок и всегда обновляется. Версия надежна, но включает в себя некоторые экспериментальные модули и может иметь некоторое количество новых ошибок.
Стабильная версия (Stable) — не включает в себя все новейшие функции, но имеет исправления критических ошибок, которые всегда обращаются к основной версии. Рекомендуется стабильную версию для производственных серверов.
Готовый пакет или компиляция из источника
Как базовая линия NGINX Open Source, так и стабильные версии могут быть установлены двумя способами:
Готовый двоичный пакет. Это быстрый и простой способ установки NGINX Open Source. Пакет включает почти все официальные модули NGINX и доступен для большинства популярных операционных систем.
Бинарные файлы, которые вы компилируете из исходных кодов. Этот способ является более гибким: можно добавлять отдельные модули, включая модули сторонних производителей и применять последние исправления безопасности.
rpm (rpm command) — мощный диспетчер пакетов для Linux. Используется для запроса, сборки, установки, проверки, обновления и удаления отдельных программных пакетов
yum (yum command) — это интерактивный менеджер пакетов, основанный на rpm. Может автоматически выполнять обновления системы, включая анализ зависимостей и устаревшую обработку на основе метаданных репозитория. А также выполнять установку новых, удаление старых пакетов и выполнение запросов на установленных и/или доступных пакетах.
Перед установкой веб-сервера NGINX на VDS/VPS, войдите в систему как пользователь root, используя ssh-клиент,
Убедитесь, что все установленные пакеты на сервере обновлены, введя команду:
Если обновление системы и списка пакетов проводится первый раз, то потребуется перезагрузка OS.
На запрос подтверждения, нажать - Y.
Можно использовать аргумент -y, --assumeyes - answer yes for all questions (ответ «да» по всем вопросам).
root@avege ~
Using username "root". root@88.253.253.127's password: Send automatic password [root@avege ~]# yum -y update Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile epel/x86_64/metalink | 30 kB 00:00 * base: mirror.reconn.ru * epel: fedora-mirror01.rbc.ru * extras: centos-mirror.rbc.ru * remi-php72: mirror.reconn.ru * remi-safe: mirror.reconn.ru * updates: mirror.reconn.ru base | 3.6 kB 00:00 extras | 3.4 kB 00:00 litespeed | 3.6 kB 00:00 litespeed-update | 3.6 kB 00:00 remi-php72 | 2.9 kB 00:00 remi-safe | 2.9 kB 00:00 updates | 3.4 kB 00:00 No packages marked for update [root@avege ~]#
Проверка установленной версии NGINX - nginx -v
nginx не установлен.
root@avege ~
Using username "root". root@88.212.253.127's password: Send automatic password Last failed login: Wed Oct 24 09:38:01 UTC 2018 from 51.158.79.89 on ssh:notty There were 3 failed login attempts since the last successful login. Last login: Wed Oct 24 08:42:13 2018 from 94.41.221.128.dynamic.ufanet.ru [root@avege ~]# nginx -v -bash: nginx: command not found [root@avege ~]#
NGINX не является частью базового репозитория CentOS.
Поэтому, на ввод команды - yum install nginx, будет получен ответ - нет пакета nginx.
root@avege ~
Using username "root". root@88.212.253.127's password: Send automatic password [root@avege ~]# yum install nginx Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile * base: mirror.reconn.ru * extras: dedic.sh * updates: dedic.sh No package nginx available. Error: Nothing to do [root@avege ~]#
Для включения автоматического обновления пакетов nginx для Linux систем, нужно настроить репозиторий yum для дистрибутивов RHEL/CentOS (apt для дистрибутивов Debian/Ubuntu, zypper для SLES).
Настройка репозитория yum для RHEL/CentOS.
Создайте файл с именем /etc/yum.repos.d/nginx.repo и таким содержимым:
[nginx]
name=nginx repo
baseurl=//nginx.org/packages/OS/OSRELEASE/$basearch/
gpgcheck=0
enabled=1
В зависимости от используемого дистрибутива, замените “OS” на “centos” или “rhel”, а “OSRELEASE” на “6” или “7”, для, соответственно, 6.x или 7.x версий.
Для CentOS 7.x, в файле nginx.repo, должно быть такое содержание -
Убедитесь, что созданный файл заканчивается как - .repo
(иначе он будет игнорироваться yum)
и разместите его в каталоге — /etc/yum.repos.d/
Файл - nginx.repo
Обновление репозитория.
После создания и размещения nginx.repo в каталоге - /etc/yum.repos.d/
нужно обновить индексы пакетов командой - yum update
root@avege ~
Using username "root". root@88.212.253.127's password: Send automatic password [root@avege ~]# yum update Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile * base: dedic.sh * extras: dedic.sh * updates: dedic.sh base | 3.6 kB 00:00 extras | 3.4 kB 00:00 nginx | 2.9 kB 00:00 updates | 3.4 kB 00:00 nginx/x86_64/primary_db | 35 kB 00:00 No packages marked for update [root@avege ~]#
Установить nginx используя менеджер пакетов - yum install nginx
На запрос:
Установить 1 пакет
Общий размер скачивания: 750 k
Устанавливаемый размер: 2,6 M
Это нормально [y / d / N]: y
нажать - Y
root@avege ~
Using username "root". root@88.212.253.127's password: Send automatic password [root@avege ~]# yum install nginx Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile * base: dedic.sh * extras: dedic.sh * updates: dedic.sh Resolving Dependencies --> Running transaction check ---> Package nginx.x86_64 1:1.14.0-1.el7_4.ngx will be installed --> Finished Dependency Resolution Dependencies Resolved ================================================================== Package Arch Version Repository Size ================================================================== Installing: nginx x86_64 1:1.14.0-1.el7_4.ngx nginx 750 k Transaction Summary ================================================================== Install 1 Package Total download size: 750 k Installed size: 2.6 M Is this ok [y/d/N]: y Downloading packages: nginx-1.14.0-1.el7_4.ngx.x86_64.rpm | 750 kB 00:00 Running transaction check Running transaction test Transaction test succeeded Running transaction Installing : 1:nginx-1.14.0-1.el7_4.ngx.x86_64 1/1 ----------------------------------------------------------------- Thanks for using nginx! Please find the official documentation for nginx here: * //nginx.org/en/docs/ Please subscribe to nginx-announce mailing list to get the most important news about nginx: * //nginx.org/en/support.html Commercial subscriptions for nginx are available on: * //nginx.com/products/ ------------------------------------------------------------------ Verifying : 1:nginx-1.14.0-1.el7_4.ngx.x86_64 1/1 Installed: nginx.x86_64 1:1.14.0-1.el7_4.ngx Complete! [root@avege ~]#
Проверить установленную версию Nginx - команда:
nginx -v
root@avege ~
Using username "root". root@88.212.253.127's password: Send automatic password Last login: Wed Oct 24 13:24:55 2018 from 95.105.64.70 [root@avege ~]# nginx -v nginx version: nginx/1.14.0 [root@avege ~]#
Проверить файлы конфигурации на наличие синтаксических ошибок
nginx -t
root@avege ~
Using username "root". root@88.212.253.127's password: Send automatic password [[root@avege ~]# nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful [root@avege ~]#
nginx: конфигурационный файл /etc/nginx/nginx.conf синтаксис в порядке
nginx: конфигурационный файл /etc/nginx/nginx.conf проверка прошла успешно
Если сервер работает на стабильной версии (Stable), то после установки основной версии (Mainlin) будут заменено только ядро сервера, а конфигурационные файлы Nginx останутся прежними.
Для настройки репозитория yum для RHEL/CentOS, создайте, в каталоге /etc/yum.repos.d/, файл с именем nginx.repo следующего содержания:Замените “OS” на “centos” или “rhel”, а “OSRELEASE” на “6” или “7”, для 6.x или 7.x версий.
Для CentOS 7.x, в файле nginx.repo, должно быть такое содержание -
Обновление репозитория.
После размещения nginx.repo в каталоге - /etc/yum.repos.d/ (для версии Mainline)
нужно обновить индексы пакетов командой - yum update
root@avege ~
Using username "root". root@88.212.253.127's password: Send automatic password [root@avege ~]# yum update Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile epel/x86_64/metalink | 30 kB 00:00 * base: dedic.sh * epel: fedora-mirror01.rbc.ru * extras: dedic.sh * remi-php72: mirror.reconn.ru * remi-safe: mirror.reconn.ru * updates: mirror.reconn.ru base | 3.6 kB 00:00 epel | 3.2 kB 00:00 extras | 3.4 kB 00:00 litespeed | 3.6 kB 00:00 litespeed-update | 3.6 kB 00:00 nginx | 2.9 kB 00:00 remi-php72 | 3.0 kB 00:00 remi-safe | 3.0 kB 00:00 updates | 3.4 kB 00:00 (1/5): remi-php72/primary_db | 209 kB 00:00 (2/5): remi-safe/primary_db | 1.4 MB 00:00 epel/x86_64/primary FAILED //mirrors.colocall.net/epel/7/x86_64/repodata/bd030e21052dac53e5da059afdde2a73ba85a750f3a0b4d2f9f4db6de4f477db-primary.xml.gz: [Errno 14] HTTP Error 404 - Not Found Trying other mirror. To address this issue please refer to the below wiki article https://wiki.centos.org/yum-errors If above article doesn't help to resolve this issue please use https://bugs.centos.org/. (3/5): epel/x86_64/updateinfo | 932 kB 00:00 (4/5): epel/x86_64/primary | 3.6 MB 00:00 (5/5): nginx/x86_64/primary_db | 125 kB 00:01 epel 12707/12707 Resolving Dependencies --> Running transaction check ---> Package nginx.x86_64 1:1.14.1-1.el7_4.ngx will be updated ---> Package nginx.x86_64 1:1.15.6-1.el7_4.ngx will be an update --> Finished Dependency Resolution Dependencies Resolved ================================================================================ Package Arch Version Repository Size ================================================================================ Updating: nginx x86_64 1:1.15.6-1.el7_4.ngx nginx 761 k Transaction Summary ================================================================================ Upgrade 1 Package Total download size: 761 k Is this ok [y/d/N]: y Downloading packages: Delta RPMs disabled because /usr/bin/applydeltarpm not installed. nginx-1.15.6-1.el7_4.ngx.x86_64.rpm | 761 kB 00:02 Running transaction check Running transaction test Transaction test succeeded Running transaction Updating : 1:nginx-1.15.6-1.el7_4.ngx.x86_64 1/2 Cleanup : 1:nginx-1.14.1-1.el7_4.ngx.x86_64 2/2 Verifying : 1:nginx-1.15.6-1.el7_4.ngx.x86_64 1/2 Verifying : 1:nginx-1.14.1-1.el7_4.ngx.x86_64 2/2 Updated: nginx.x86_64 1:1.15.6-1.el7_4.ngx Complete! [root@avege ~]#
Проверить установленную версию Nginx - команда:
nginx -v
root@avege ~
Using username "root". root@88.212.253.127's password: Send automatic password Last login: Wed Oct 24 13:24:55 2018 from 95.105.64.70 [root@avege ~]# nginx -v nginx version: nginx/1.15.6 [root@avege ~]#
Проверить файлы конфигурации на наличие синтаксических ошибок
nginx -t
root@avege ~
Using username "root". root@88.212.253.127's password: Send automatic password [[root@avege ~]# nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful [root@avege ~]#
Перезапустить сервер Nginx - команда:
nginx -s reload
root@avege ~
Using username "root". root@88.212.253.127's password: Send automatic password Last login: Wed Oct 24 13:24:55 2018 from 95.105.64.70 [root@avege ~]# nginx -s reload [root@avege ~]#
Apache и Nginx (после установки) работают на 80 порту.
На одном IP-адресе вы не сможете запускать Apache и Nginx одновременно на порту 80. Невозможно, чтобы оба сервера прослушивали один и тот же порт на одном IP-адресе. (Можно, для того чтобы упростить отладку, использовать отдельные порты).
По этой причине, если Apache работает на вашем сервере, необходимо остановить его - apachectl stop
и запустить сервер Nginx - systemctl start nginx
root@avege ~
Using username "root". root@88.212.253.127's password: Send automatic password Last login: Wed Oct 24 16:55:35 2018 from 95.105.64.70 [root@avege ~]# apachectl stop [root@avege ~]# systemctl start nginx [root@avege ~]#
И, после ввода в адресную строку браузера IP-адрес или имя сайта, вы увидите:
Если после вода в командную строку браузера имени сайта или выделенного IP-адреса не видно тестовой или индексной страницы, то попробуйте ввести команды
lsof -i -P
iptables -I INPUT -p tcp --dport 80 -m state --state NEW -j ACCEPT
systemctl restart nginx
root@avege ~
Using username "root". root@88.212.253.127's password: Send automatic password Last login: Wed Oct 24 08:22:59 2018 from 94.41.221.128.dynamic.ufanet.ru [root@avege ~]# lsof -i -P COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME sshd 385 root 3u IPv4 3709651425 0t0 TCP *:22 (LISTEN) sshd 385 root 4u IPv6 3709651427 0t0 TCP *:22 (LISTEN) sendmail 403 root 4u IPv4 3709651803 0t0 TCP localhost.localdomain:25 (LISTEN) sshd 439 root 3r IPv4 3709656242 0t0 TCP avege.ru:22->94.41.221.128.dynamic.ufanet.ru:11291 (ESTABLISHED) sshd 448 root 3r IPv4 3709672810 0t0 TCP avege.ru:22->94.41.221.128.dynamic.ufanet.ru:11296 (ESTABLISHED) httpd 472 root 3u IPv4 3709685323 0t0 TCP *:80 (LISTEN) httpd 473 apache 3u IPv4 3709685323 0t0 TCP *:80 (LISTEN) sshd 480 root 3r IPv4 3709806379 0t0 TCP avege.ru:22->94.41.221.128.dynamic.ufanet.ru:11330 (ESTABLISHED) sshd 499 root 3r IPv4 3709810578 0t0 TCP avege.ru:22->5.188.10.180:40873 (ESTABLISHED) [root@avege ~]# iptables -I INPUT -p tcp --dport 80 -m state --state NEW -j ACCEPT [root@avege ~]# systemctl restart nginx [root@avege ~]#
После установки Nginx в файле default.conf (/etc/nginx/conf.d)
указан каталог для размещения веб-страниц -
/usr/share/nginx/html/;
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log /var/log/nginx/host.access.log main;
location / {
root /usr/share/nginx/html/;
index index.html index.htm;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass //127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
Страница index.html - "Добро пожаловать в Nginx!" - находится в этом каталоге - \usr\share\nginx\html\
Можете заменить тестовую страницу сервера Nginx на свою.
Ответ "https:/an/server/management/nginx.html" → Основной робот Яндекса
Код статуса HTTP | 200 OK |
Время ответа сервера | 7 мс |
IP сайта | 88.253.253.127 |
Кодировка | UTF-8(unicode-1-1-utf-8, UTF8) |
Размер страницы | 87,45 КБ |
nginx поддерживает следующие параметры командной строки:
nginx -g "pid /var/run/nginx.pid; worker_processes `sysctl -n hw.ncpu`;"
добавить NGINX в автозапуск при загрузке CentOS:
systemctl enable nginx
запустить NGINX:
systemctl start nginx
Остановить Nginx:
systemctl stop nginx
перезапустить NGINX:
systemctl restart nginx
Перезагрузка конфигурации NGINX:
systemctl reload nginx
запустить сервер, используя скрипт управления apachectl —
apachectl start
остановить сервер —
apachectl stop
перезапустить сервер как пользователь root —
apachectl restart
Запуск, остановка, перезагрузка конфигурации
Чтобы запустить nginx, нужно выполнить исполняемый файл. Когда nginx запущен, им можно управлять, вызывая исполняемый файл с параметром -s. Используйте следующий синтаксис:
просмотр списка всех запущенных процессов nginx
ps -ax | grep nginx 29798 ? Ss 0:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf 29799 ? S 0:03 nginx: worker process 30120 ? S 0:00 grep nginx