Nginx (engine x) — это легкий веб-сервер, обратный прокси-сервер и прокси-сервер электронной почты (IMAP/POP3). Его создал Игорь Сысоев из России дляRambler MediaВо время работы он был разработан с использованием языка C.
Игорь Сысоев открыл исходный код Nginx и предоставил ему самую свободную лицензию, подобную BSD, состоящую из двух пунктов. Поскольку Nginx использует архитектуру, управляемую событиями, для одновременной обработки миллионов TCP-соединений, высокомодульная конструкция и бесплатная лицензия заставляют сторонние модули, расширяющие функции Nginx, появляться в бесконечном потоке, а отличный дизайн обеспечивает превосходную стабильность, поэтому он широко распространен. используется в качестве веб-сервера на веб-сайтах с высокой посещаемостью.
Так называемый режим обратного прокси (обратного прокси) относится к прокси-серверу для принятия запросов соединения в Интернете, а затем пересылать запрос на сервер во внутренней сети, и результаты, возвращаемые с сервера к клиенту, запрашивающему соединение В интернет-терминал в этом случае внешний прокси-сервер на производительности обратного прокси-сервера.
Поскольку есть обратный прокси, есть и прямой прокси. Прямой прокси-сервер — это сервер, который находится между клиентом и исходным сервером.Чтобы получить контент с исходного сервера, клиент отправляет запрос на прокси-сервер и указывает цель, а затем прокси-сервер перенаправляет запрос на исходный сервер. и возвращает полученный контент клиенту.
Можно сказать, что прямой прокси-прокси — это клиент, а обратный прокси-прокси — это сервер.
Использование Nginx имеет следующие преимущества:
Преимущество | инструкция |
---|---|
Быстрее | Nginx может отвечать на запросы быстрее, чем другие веб-серверы |
Высокая масштабируемость | Nginx использует дизайн с низким уровнем связи и имеет множество отличных сторонних модулей. |
Высокая стабильность | Каждый рабочий процесс относительно независим, и главный процесс может быстро «подтянуть» новый рабочий дочерний процесс для предоставления услуг в случае сбоя одного рабочего процесса. |
низкое потребление памяти | В целом, 10 000 неактивных соединений HTTP Keep-Alive потребляют всего 2,5 МБ памяти в Nginx, что является основой для Nginx для поддержки большого числа одновременных соединений. Одна машина поддерживает более 100 000 одновременных подключений, что не является пределом, предел в основном зависит от памяти. |
горячее развертывание | Разделение процесса управления aster и рабочего рабочего процесса позволяет Nginx обеспечивать функцию горячего развертывания, то есть исполняемые файлы Nginx могут быть обновлены при условии бесперебойной работы 7 часов в сутки. Конечно, он также поддерживает такие функции, как обновление элементов конфигурации и замена файлов журнала без остановки службы. |
Самая либеральная лицензия BSD | Это мощная движущая сила быстрого роста Nginx. Лицензионное соглашение BSD не только позволяет пользователям использовать Nginx бесплатно, но также позволяет пользователям напрямую использовать или изменять исходный код Nginx в своих собственных проектах, а затем публиковать их. |
богатые модули | Благодаря многочисленным официальным функциональным модулям и сторонним функциональным модулям Nginx может удовлетворить большинство сценариев приложений. Эти функциональные модули можно накладывать друг на друга для достижения более мощных и сложных функций. Некоторые модули также поддерживают интеграцию Nginx и Perl, Lua и других языков сценариев. , значительно повышая эффективность разработки. |
Библиотека зависимостей
Сейчас на серверах в основном используются операционные системы Linux.Перед компиляцией и установкой Nginx необходимо установить его зависимые библиотеки.
Вот несколько веб-серверов для завершения самых основных функций необходимых библиотек.
GCC
GCC (GNU Compiler Collection) может использоваться для компиляции программ на языке C.
Nginx обычно не предоставляет бинарные исполняемые программы напрямую, поэтому нам нужно скомпилировать его исходный код.
И мы можем использовать C++ для написания HTTP-модуля Nginx, тогда нам нужно использовать компилятор G++.
Установите компилятор G++ с помощью yum:
yum install -y gcc-c++
PCRE
Библиотека PCRE PCRE (Perl-совместимые регулярные выражения, Perl-совместимые регулярные выражения) — это библиотека функций, разработанная Филипом Хейзелом, в настоящее время используемая многими программами, библиотека поддерживает регулярные выражения. Фактически, он произошел от RegEx, Регулярные выражения Perl также являются производными от RegEx, написанного Генри Спенсером.
Если мы используем регулярные выражения в файле конфигурации nginx.conf, то библиотека PCRE должна быть скомпилирована в Nginx при компиляции Nginx, потому что HTTP-модуль Nginx полагается на нее для разбора регулярных выражений.
Конечно, если вы не подтвердите использование регулярных выражений, вам не нужно его устанавливать.
Способ установки yum следующий:
yum install -y pcre pcre-devel
pcre-devel — это библиотека разработки, необходимая для вторичной разработки с использованием PCRE, включая заголовочные файлы и т. д., которая также требуется для компиляции Nginx.
библиотека zlib
Библиотека zlib используется для сжатия содержимого HTTP-пакетов в формате gzip, если включить gzip в nginx.conf, И укажите использовать gzip для сжатия ответов HTTP определенных типов (тип контента), чтобы уменьшить объем сетевой передачи, тогда zlib должен быть скомпилирован в Nginx во время компиляции.
Его метод установки yum выглядит следующим образом
yum install -y zlib zlib-devel
Точно так же zlib — это библиотека для прямого использования, а zlib-devel — это библиотека, необходимая для вторичной разработки.
Библиотека разработки OpenSSL
Если наш сервер будет не только поддерживать HTTP, но и передавать HTTP по более безопасному протоколу SSL, тогда нам нужен OpenSSL.
Кроме того, если мы хотим использовать хеш-функции, такие как MD5, SHA1 и т. д., их также необходимо установить.
Способ установки yum следующий:
yum install -y openssl openssl-devel
Скачать исходный пакет
ВходитьСкачать интерфейс официального сайта Nginx, выберите последнюю стабильную версию.
Затем используйте команду wget для загрузки:
[root@host nginx]# wget http://nginx.org/download/nginx-1.16.0.tar.gz
--2019-05-23 03:28:52-- http://nginx.org/download/nginx-1.16.0.tar.gz
Resolving nginx.org... 62.210.92.35, 95.211.80.227, 2001:1af8:4060:a004:21::e3
Connecting to nginx.org|62.210.92.35|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1032345 (1008K) [application/octet-stream]
Saving to: “nginx-1.16.0.tar.gz”
100%[==========================================================================================================================================>] 1,032,345 715K/s in 1.4s
2019-05-23 03:28:53 (715 KB/s) - “nginx-1.16.0.tar.gz” saved [1032345/1032345]
распаковать файлы:
[root@host nginx]# tar xf nginx-1.16.0.tar.gz
[root@host nginx]# ls
nginx-1.16.0 nginx-1.16.0.tar.gz
[root@host nginx]# cd nginx-1.16.0
[root@host nginx-1.16.0]# ls
auto CHANGES CHANGES.ru conf configure contrib html LICENSE man README src
Скомпилируйте и установите
Для компиляции и установки Nginx используйте следующие три команды:
./configure
make
make install
Если библиотека, от которой вы зависите, не может быть найдена, выполните./configure
Команда сообщит об ошибке, например, библиотека PCRE не может быть найдена:
./configure: error: the HTTP rewrite module requires the PCRE library.
You can either disable the module by using --without-http_rewrite_module
option, or install the PCRE library into the system, or build the PCRE library
statically from the source with nginx by using --with-pcre=<path> option.
Нормальный вывод должен быть следующим и сгенерированMakefile
:
[root@host nginx-1.16.0]# ./configure
checking for OS
+ Linux 4.10.4-1.el6.elrepo.i686 i686
checking for C compiler ... found
+ using GNU C compiler
+ gcc version: 4.4.7 20120313 (Red Hat 4.4.7-23) (GCC)
checking for gcc -pipe switch ... found
checking for -Wl,-E switch ... found
checking for gcc builtin atomic operations ... found
checking for C99 variadic macros ... found
checking for gcc variadic macros ... found
checking for gcc builtin 64 bit byteswap ... found
checking for unistd.h ... found
checking for inttypes.h ... found
checking for limits.h ... found
checking for sys/filio.h ... not found
checking for sys/param.h ... found
checking for sys/mount.h ... found
checking for sys/statvfs.h ... found
checking for crypt.h ... found
checking for Linux specific features
checking for epoll ... found
checking for EPOLLRDHUP ... found
checking for EPOLLEXCLUSIVE ... not found
checking for O_PATH ... not found
checking for sendfile() ... found
checking for sendfile64() ... found
checking for sys/prctl.h ... found
checking for prctl(PR_SET_DUMPABLE) ... found
checking for prctl(PR_SET_KEEPCAPS) ... found
checking for capabilities ... found
checking for crypt_r() ... found
checking for sys/vfs.h ... found
checking for nobody group ... found
checking for poll() ... found
checking for /dev/poll ... not found
checking for kqueue ... not found
checking for crypt() ... not found
checking for crypt() in libcrypt ... found
checking for F_READAHEAD ... not found
checking for posix_fadvise() ... found
checking for O_DIRECT ... found
checking for F_NOCACHE ... not found
checking for directio() ... not found
checking for statfs() ... found
checking for statvfs() ... found
checking for dlopen() ... not found
checking for dlopen() in libdl ... found
checking for sched_yield() ... found
checking for sched_setaffinity() ... found
checking for SO_SETFIB ... not found
checking for SO_REUSEPORT ... found
checking for SO_ACCEPTFILTER ... not found
checking for SO_BINDANY ... not found
checking for IP_TRANSPARENT ... found
checking for IP_BINDANY ... not found
checking for IP_BIND_ADDRESS_NO_PORT ... not found
checking for IP_RECVDSTADDR ... not found
checking for IP_SENDSRCADDR ... not found
checking for IP_PKTINFO ... found
checking for IPV6_RECVPKTINFO ... found
checking for TCP_DEFER_ACCEPT ... found
checking for TCP_KEEPIDLE ... found
checking for TCP_FASTOPEN ... not found
checking for TCP_INFO ... found
checking for accept4() ... found
checking for eventfd() ... found
checking for int size ... 4 bytes
checking for long size ... 4 bytes
checking for long long size ... 8 bytes
checking for void * size ... 4 bytes
checking for uint32_t ... found
checking for uint64_t ... found
checking for sig_atomic_t ... found
checking for sig_atomic_t size ... 4 bytes
checking for socklen_t ... found
checking for in_addr_t ... found
checking for in_port_t ... found
checking for rlim_t ... found
checking for uintptr_t ... uintptr_t found
checking for system byte ordering ... little endian
checking for size_t size ... 4 bytes
checking for off_t size ... 8 bytes
checking for time_t size ... 4 bytes
checking for AF_INET6 ... found
checking for setproctitle() ... not found
checking for pread() ... found
checking for pwrite() ... found
checking for pwritev() ... found
checking for sys_nerr ... found
checking for localtime_r() ... found
checking for clock_gettime(CLOCK_MONOTONIC) ... not found
checking for clock_gettime(CLOCK_MONOTONIC) in librt ... found
checking for posix_memalign() ... found
checking for memalign() ... found
checking for mmap(MAP_ANON|MAP_SHARED) ... found
checking for mmap("/dev/zero", MAP_SHARED) ... found
checking for System V shared memory ... found
checking for POSIX semaphores ... not found
checking for POSIX semaphores in libpthread ... found
checking for struct msghdr.msg_control ... found
checking for ioctl(FIONBIO) ... found
checking for struct tm.tm_gmtoff ... found
checking for struct dirent.d_namlen ... not found
checking for struct dirent.d_type ... found
checking for sysconf(_SC_NPROCESSORS_ONLN) ... found
checking for sysconf(_SC_LEVEL1_DCACHE_LINESIZE) ... found
checking for openat(), fstatat() ... found
checking for getaddrinfo() ... found
checking for PCRE library ... found
checking for PCRE JIT support ... not found
checking for zlib library ... found
creating objs/Makefile
Configuration summary
+ using system PCRE library
+ OpenSSL library is not used
+ using system zlib library
nginx path prefix: "/usr/local/nginx"
nginx binary file: "/usr/local/nginx/sbin/nginx"
nginx modules path: "/usr/local/nginx/modules"
nginx configuration prefix: "/usr/local/nginx/conf"
nginx configuration file: "/usr/local/nginx/conf/nginx.conf"
nginx pid file: "/usr/local/nginx/logs/nginx.pid"
nginx error log file: "/usr/local/nginx/logs/error.log"
nginx http access log file: "/usr/local/nginx/logs/access.log"
nginx http client request body temporary files: "client_body_temp"
nginx http proxy temporary files: "proxy_temp"
nginx http fastcgi temporary files: "fastcgi_temp"
nginx http uwsgi temporary files: "uwsgi_temp"
nginx http scgi temporary files: "scgi_temp"
Проверить версию Nginx
После успешной установки вы можете проверить версию Nginx через параметр -v.
[root@host sbin]# /usr/local/nginx/sbin/nginx -v
nginx version: nginx/1.16.0
запускать
Nginx поддерживает прямой запуск, а также поддерживает запуск с параметрами, что будет продемонстрировано ниже.
Оккупация порта
Nginx должен использовать порт 80. Если порт 80 занят, при запуске будет сообщено о следующей ошибке:
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
можно использоватьlsof
Инструмент проверяет занятость порта.Если он у вас не установлен, вы можете использовать следующую команду для его установки:
yum install -y lsof
Проверяем занятость порта 80 на локальной машине и убиваем занятый процесс:
[root@host sbin]# lsof -i :80
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
java 1765 root 53u IPv6 15062 0t0 TCP *:http (LISTEN)
[root@host sbin]# killall -9 java
[root@host sbin]# lsof -i :80
[root@host sbin]#
Начать по умолчанию
использоватьwhereis
Команда Nginx для просмотра каталога установки:
[root@host nginx-1.16.0]# whereis nginx
nginx: /usr/local/nginx
Если аргументы не начинаются, он будет использовать значение по умолчаниюnginx.conf
Файл конфигурации запускает Nginx:
/usr/local/nginx/sbin/nginx
После успешного запуска при повторном запросе сервера вы увидите веб-страницу со следующим содержимым:
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.
Начать с параметров
Параметр -c указывает, как запускается файл конфигурации:
./nginx -c mynginx.conf
Параметр -p указывает каталог установки Nginx:
./nginx -p mydir/nginx
Параметр -g временно указывает некоторые глобальные элементы конфигурации.
./nginx -g "pid varnginx/test.pid;"
Это означает, что вышеуказанная командная строка PID-файл будет записан varnginx / test.pid в.
Ограничение параметра -g заключается в том, что указанный элемент конфигурации не может конфликтовать с элементом конфигурации в nginx.conf по пути по умолчанию, иначе он не может быть запущен.
Как и в приведенном выше примере, такие элементы конфигурации, как этот: pid logs/nginx.pid, не могут существовать в nginx.conf по умолчанию.
Другое ограничение заключается в том, что когда служба Nginx, запущенная в режиме -g, выполняет другие командные строки, необходимо включить параметр -g, иначе элементы конфигурации могут не совпадать.
Не запуская Nginx, используйте параметр -t, чтобы просто проверить файл конфигурации на наличие ошибок. Например:
./nginx -t
Результат выполнения показывает, правильна ли конфигурация.
[root@host sbin]# ./nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
При тестировании параметров конфигурации используйте параметр -q, чтобы избежать вывода на экран информации ниже уровня ошибки. Например:
./nginx -t -q
Не работает
Есть два основных способа остановить службы Nginx.
Один из них — быстрая остановка, то есть немедленно остановить все сетевые запросы, обрабатываемые службой Nginx, и немедленно разорвать соединение, чтобы остановить службу.
Другой — мягко остановиться, что позволяет Nginx завершить обработку текущего запроса, но больше не получать новые запросы, а затем закрыть соединение и перестать работать.
Услуга быстрой остановки
/usr/local/nginx/sbin/nginx -s stop
убить службу
kill -s SIGTERM 进程ID
илиkill -s SIGINT 进程ID
с вышеуказанным./nginx -s stop
Эффект команды такой же.
[root@host sbin]# ps -ef|grep nginx
root 10568 1 0 04:22 ? 00:00:00 nginx: master process ./nginx
nobody 10569 10568 0 04:22 ? 00:00:00 nginx: worker process
root 10571 5440 0 04:23 pts/1 00:00:00 grep nginx
[root@host sbin]# kill -s SIGINT 10568
[root@host sbin]# ps -ef|grep nginx
root 10574 5440 0 04:24 pts/1 00:00:00 grep nginx
[root@host sbin]#
изящно остановить службу
Если вы хотите, чтобы служба Nginx нормально обрабатывала все текущие запросы перед остановкой службы, вы можете использовать параметр -s quit для остановки службы.
Например:
./nginx -s quit
Эта команда отличается от быстрой остановки службы Nginx.
Когда сервис быстро остановлен, рабочий процесс и главный процесс выпрыгивают из цикла и выходят на процесс сразу после получения сигнала.
В то время как «элегантный» для остановки службы сначала закроет порт прослушивания, чтобы прекратить прием новых соединений, затем соединение в настоящее время обрабатывает все обработанные и, наконец, завершает процесс.
Подобно службе быстрой остановки, вы можете напрямую отправить сигнал QUIT главному процессу, чтобы остановить службу, и его действие будет таким же, как и при выполнении.-s quit
Команда та же.
Например:
kill -s SIGQUIT <nginx master pid>
Если вы хотите остановить рабочий процесс «изящно», вы можете остановить службу, отправив сигнал WINCH процессу .
Например:
kill -s SIGWINCH <nginx worker pid>
послать сигнал
./nginx -g TERM | INT | QUIT
Сигналы TERM и INT для быстрой остановки, сигналы QUIT для плавной остановки.
Конфигурация перезагрузки Nginx
Заставьте запущенный Nginx перечитать элементы конфигурации и применить их
Используйте параметр -s reload, чтобы запущенная служба Nginx перезагрузила файл nginx.conf. Например:
usrlocal/nginx/sbin/nginx -s reload
откат файла журнала
Используйте параметр -s reopen для повторного открытия файла журнала, чтобы текущий файл журнала можно было переименовать или переместить в другой каталог для резервного копирования, а при повторном открытии был создан новый файл журнала.
这个功能使得日志文件不至于过大。 Например:
./nginx -s reopen
Это имеет тот же эффект, что и отправка сигнала USR1 с командой kill.
kill -s SIGUSR1 <nginx master pid>
Суммировать
В этой статье кратко рассказывается о роли и преимуществах Nginx, затем демонстрируется, как установить Nginx, а также запустить и остановить службу.