...   Как установить NGINX   — для работы с VPS на CentOS ?

NGINX - текущая версия: 1.15.5

  NGINX веб-сервер с открытым исходным кодом, который обеспечивает работу 400 миллионов веб-сайтов.

nginx [engine x] — это HTTP-сервер и обратный прокси-сервер, почтовый прокси-сервер, а также TCP/UDP прокси-сервер общего назначения, изначально написанный Игорем Сысоевым.

NGINX является одним из нескольких серверов, написанных для решения проблемы C10K. В отличие от традиционных серверов, NGINX не использует потоки для обработки запросов. Вместо этого он использует гораздо более масштабируемую управляемую событиями (асинхронную) архитектуру. Эта архитектура использует небольшие, но, что более важно, предсказуемые объемы памяти под нагрузкой. Даже если вы не собираетесь обрабатывать тысячи одновременных запросов, вы все равно можете воспользоваться высокопроизводительным и небольшим объемом памяти NGINX. NGINX масштабируется во всех направлениях: от самых маленьких VPS до больших кластеров серверов.  
Стремление Игоря Сысоева к решению проблемы C10K привело к тому, что он стал автором высокопроизводительного веб-сервера NGINX, который начал создавать в 2002 году (первоначально выпущен в 2004 году). Использование NGINX стало настолько популярными, что в 2011 году Игорь Сысоев основал компанию NGINX, Inc. В настоящее время - технический директор и соучредитель.

Согласно статистике w3techs в декабре 2018 года Nginx обслуживал или проксировал 40,5% самых нагруженных сайтов. Примеры успешного внедрения (популярные сайты, использующие Nginx): Sohu.com, Weibo.com, 360.cn, Twitch.tv, Csdn.net, Mail.ru, Wordpress.com.
Документация NGINX доступна на английском и русском языках.

 Загрузка и установка NGINX

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-клиент,

Убедитесь, что все установленные пакеты на сервере обновлены, введя команду:

yum update

Если обновление системы и списка пакетов проводится первый раз, то потребуется перезагрузка 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 ~]#


Готовые пакеты стабильной версии (Stable)

 CentOS 7 - создание файла nginx.repo для настройки репозитория NGINX

Для включения автоматического обновления пакетов 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, должно быть такое содержание -

[nginx]
name=nginx repo
baseurl=//nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1

Убедитесь, что созданный файл заканчивается как - .repo
(иначе он будет игнорироваться yum)
и разместите его в каталоге — /etc/yum.repos.d/

Файл - nginx.repo

Для CentOS 7.x, в файле 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 ~]#	

	

 CentOS 7 - установка NGINX

Установить 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 проверка прошла успешно


Готовые пакеты для версии Mainline (Основная версия)

 CentOS 7 - настройка репозитория NGINX для основной версии.

Если сервер работает на стабильной версии (Stable), то после установки основной версии (Mainlin) будут заменено только ядро сервера, а конфигурационные файлы Nginx останутся прежними.

Для настройки репозитория yum для RHEL/CentOS, создайте, в каталоге /etc/yum.repos.d/, файл с именем nginx.repo следующего содержания:
[nginx]
name=nginx repo
baseurl=//nginx.org/packages/mainline/OS/OSRELEASE/$basearch/
gpgcheck=0
enabled=1

Замените “OS” на “centos” или “rhel”, а “OSRELEASE” на “6” или “7”, для 6.x или 7.x версий.

Для CentOS 7.x, в файле nginx.repo, должно быть такое содержание -

[nginx]
name=nginx repo
baseurl=//nginx.org/packages/mainline/centos/7/$basearch/
gpgcheck=0
enabled=1

Настроить репозиторий yum - 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 ~]#



 Запуск Nginx

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-адрес или имя сайта, вы увидите:

Welcome to nginx!

If you see this page, the nginx web server is successfully installed and working. Further configuration is required.

For online documentation and support please refer to nginx.org.
Commercial support is available at nginx.com.

Thank you for using nginx.

Добро пожаловать в Nginx!

Если вы видите эту страницу, веб-сервер nginx успешно установлен и работает. Требуется дополнительная настройка.

Для онлайн-документации и поддержки обратитесь к nginx.org.
Коммерческая поддержка доступна на nginx.com.

Благодарим вас за использование nginx.


Если после вода в командную строку браузера имени сайта или выделенного 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)

default.conf Nginx

указан каталог для размещения веб-страниц -
/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\

Страница index.html - Добро пожаловать в Nginx!

Можете заменить тестовую страницу сервера Nginx на свою.


Проверка ответа сервера

Ответ "https:/an/server/management/nginx.html" → Основной робот Яндекса

Mozilla/5.0 (compatible; YandexBot/3.0; +//yandex.com/bots)
Код статуса HTTP 200 OK
Время ответа сервера 7 мс
IP сайта 88.253.253.127
Кодировка UTF-8(unicode-1-1-utf-8, UTF8)
Размер страницы 87,45 КБ

Ответ сервера Nginx

  • Server: nginx/1.14.1
  • Date: Tue, 13 Nov 2018 02:55:53 GMT
  • Content-Type: text/html
  • Content-Length: 89551
  • Last-Modified: Fri, 19 Oct 2018 02:17:14 GMT
  • Connection: keep-alive
  • ETag: "5bc93eaa-1

Параметры командной строки nginx

nginx поддерживает следующие параметры командной строки:

  • nginx -? | nginx -h — вывод справки по параметрам командной строки.
  • -c файл — использование альтернативного конфигурационного файла файл
    вместо файла по умолчанию (/etc/nginx/nginx.conf).
  • -g директивы — задание глобальных директив конфигурации, например
    nginx -g "pid /var/run/nginx.pid; worker_processes `sysctl -n hw.ncpu`;"
    
  • -p префикс — задание префикса пути nginx, т.е. каталога, в котором будут находиться файлы сервера (по умолчанию — каталог /usr/local/nginx).
  • -q — вывод только сообщений об ошибках при тестировании конфигурации.
  • -s сигнал — отправка сигнала главному процессу. Аргументом сигнал может быть:
    • nginx -s stop — быстрое завершение
    • nginx -s quit — плавное завершение
    • nginx -s reload — перезагрузка конфигурации, старт нового рабочего процесса с новой конфигурацией, плавное завершение старых рабочих процессов.
    • nginx -s reopen — переоткрытие лог-файлов
  • nginx -t — тестирование конфигурационного файла: nginx проверяет синтаксическую правильность конфигурации, а затем пытается открыть файлы, описанные в конфигурации.
  • nginx -T — то же, что и -t, а также вывод конфигурационных файлов в стандартный поток вывода (1.9.2).
  • nginx -v — вывод версии nginx.
  • nginx -V — вывод версии nginx, версии компилятора и параметров конфигурации сборки.

Запуск, остановка и отключение Nginx

добавить NGINX в автозапуск при загрузке CentOS:

systemctl enable nginx

запустить NGINX:

systemctl start nginx

Остановить Nginx:

systemctl stop nginx

перезапустить NGINX:

systemctl restart nginx

Перезагрузка конфигурации NGINX:

systemctl reload nginx


Запуск, остановка и отключение службы Apache

запустить сервер, используя скрипт управления apachectl —

apachectl start

остановить сервер —

apachectl stop

перезапустить сервер как пользователь root —

apachectl restart

Запуск, остановка, перезагрузка конфигурации
Чтобы запустить nginx, нужно выполнить исполняемый файл. Когда nginx запущен, им можно управлять, вызывая исполняемый файл с параметром -s. Используйте следующий синтаксис:

nginx -s сигнал
Где сигнал может быть одним из нижеследующих:
  • nginx -s stop — быстрое завершение
  • nginx -s quit — плавное завершение
  • nginx -s reload — перезагрузка конфигурационного файла
  • nginx -s reopen — переоткрытие лог-файлов
Например, чтобы остановить процессы nginx с ожиданием окончания обслуживания текущих запросов рабочими процессами, можно выполнить следующую команду:
nginx -s quit

просмотр списка всех запущенных процессов 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