In this article, we are going to see how to change default Nginx port in Linux distributions. Nginx is a fast, open source multi-functional web server which was written by Igor Sysoev and released on October 4th, 2003. Apart from being a web server, It also acts as a reverse proxy and a load balancer allowing it to handle large numbers of concurrent HTTP connections and is mostly preferred to Apache in hosting enterprise websites which handle high traffic. It is used in high traffic websites such as Netflix and Dropbox to deliver their content in a quick, reliable and secure manner.
By default, Nginx listens to incoming HTTP connections on port 80 and port 443 for secure connections.
Installation of Nginx on CentOS and RHEL 7
Install epel release
yum install epel-release
Sample Output
Loading mirror speeds from cached hostfile * base: mirrors.linode.com * extras: mirrors.linode.com * updates: mirrors.linode.com Resolving Dependencies --> Running transaction check ---> Package epel-release.noarch 0:7-9 will be installed --> Finished Dependency Resolution Dependencies Resolved ======================================================================================================================================================================== Package Arch Version Repository Size ======================================================================================================================================================================== Installing: epel-release noarch 7-9 extras 14 k Transaction Summary ======================================================================================================================================================================== Install 1 Package Total download size: 14 k Installed size: 24 k Is this ok [y/d/N]:
Install nginx
yum install nginx
Sample Output
Dependencies Resolved ======================================================================================================================================================================== Package Arch Version Repository Size ======================================================================================================================================================================== Installing: nginx x86_64 1:1.12.2-1.el7 epel 529 k Installing for dependencies: fontconfig x86_64 2.10.95-11.el7 base 229 k fontpackages-filesystem noarch 1.44-8.el7 base 9.9 k gd x86_64 2.0.35-26.el7 base 146 k gperftools-libs x86_64 2.4-8.el7 base 272 k libX11 x86_64 1.6.5-1.el7 base 606 k libX11-common noarch 1.6.5-1.el7 base 164 k libXau x86_64 1.0.8-2.1.el7 base 29 k libXpm x86_64 3.5.12-1.el7 base 55 k libjpeg-turbo x86_64 1.2.90-5.el7 base 134 k libpng x86_64 2:1.5.13-7.el7_2 base 213 k libunwind x86_64 2:1.2-2.el7 base 57 k libxcb x86_64 1.12-1.el7 base 211 k libxslt x86_64 1.1.28-5.el7 base 242 k lyx-fonts noarch 2.2.3-1.el7 epel 159 k nginx-all-modules noarch 1:1.12.2-1.el7 epel 16 k nginx-filesystem noarch 1:1.12.2-1.el7 epel 17 k nginx-mod-http-geoip x86_64 1:1.12.2-1.el7 epel 23 k nginx-mod-http-image-filter x86_64 1:1.12.2-1.el7 epel 26 k nginx-mod-http-perl x86_64 1:1.12.2-1.el7 epel 35 k nginx-mod-http-xslt-filter x86_64 1:1.12.2-1.el7 epel 25 k nginx-mod-mail x86_64 1:1.12.2-1.el7 epel 53 k nginx-mod-stream x86_64 1:1.12.2-1.el7 epel 76 k Transaction Summary ======================================================================================================================================================================== Install 1 Package (+22 Dependent packages) Total download size: 3.3 M Installed size: 9.8 M Is this ok [y/d/N]: Install complete Installed: nginx.x86_64 1:1.12.2-1.el7 Dependency Installed: fontconfig.x86_64 0:2.10.95-11.el7 fontpackages-filesystem.noarch 0:1.44-8.el7 gd.x86_64 0:2.0.35-26.el7 gperftools-libs.x86_64 0:2.4-8.el7 libX11.x86_64 0:1.6.5-1.el7 libX11-common.noarch 0:1.6.5-1.el7 libXau.x86_64 0:1.0.8-2.1.el7 libXpm.x86_64 0:3.5.12-1.el7 libjpeg-turbo.x86_64 0:1.2.90-5.el7 libpng.x86_64 2:1.5.13-7.el7_2 libunwind.x86_64 2:1.2-2.el7 libxcb.x86_64 0:1.12-1.el7 libxslt.x86_64 0:1.1.28-5.el7 lyx-fonts.noarch 0:2.2.3-1.el7 nginx-all-modules.noarch 1:1.12.2-1.el7 nginx-filesystem.noarch 1:1.12.2-1.el7 nginx-mod-http-geoip.x86_64 1:1.12.2-1.el7 nginx-mod-http-image-filter.x86_64 1:1.12.2-1.el7 nginx-mod-http-perl.x86_64 1:1.12.2-1.el7 nginx-mod-http-xslt-filter.x86_64 1:1.12.2-1.el7 nginx-mod-mail.x86_64 1:1.12.2-1.el7 nginx-mod-stream.x86_64 1:1.12.2-1.el7 Complete!
Start Nginx
systemctl start nginx
Enable Nginx to start on boot
systemctl enable nginx
If you are behind a firewall, run the commands below to open ports 80 (http) and 443 (https)
sudo firewall-cmd --permanent --zone=public --add-port=80/tcp sudo firewall-cmd --permanent --zone=public --add-port=443/tcp sudo firewall-cmd --reload
Installation of Nginx on Ubuntu 16.04 and Debian 9
Update the system first
apt-get update
Install nginx
apt-get install nginx
Start nginx
systemctl start nginx
To verify everything went well, you should see nginx’s default page in a browser when you visit the IP of the server. In my case, the server’s IP is 45.33.10.146
Configuration of Nginx to listen on port 3200 (RHEL & CentOS 7)
To make the Nginx HTTP server listen to web connections from nonstandard ports, we must edit its main configuration file and make changes to the main configuration file.
For Centos & RHEL the configuration file is as shown below
/etc/nginx/nginx.conf
Locate the line that starts with listen statement in server directive and change the port from 80 to 3400,
Restart nginx
systemctl restart nginx.service
Run
netstat -pnltu
to verify the server is listening on port 3400
Next, install policycoreutils-python package
yum install policycoreutils-python
Configure SELinux
vim /etc/sysconfig/selinux
Set SELinux to permissive
Reboot nginx
Configuration of Nginx to listen on port 3200 (Ubuntu 16.04 & Debian 9)
The default config file is
/etc/nginx/sites-enabled/default
As before, locate the line that starts with listen and change the default port from 80 to 3400.
Restart Nginx and verify the server is listening on port 3400 using the netstat command.
Set SELinux to permissive and reboot.
Open your web browser and visit your server’s ip address followed by :3400
http://ip-address:3400
Wrapping up
Thank you for your time. Your comments and suggestions are welcome. Feel free to ask any questions.
Директивы
Синтаксис: |
absolute_redirect
|
---|---|
Умолчание: |
absolute_redirect on; |
Контекст: |
http , server , location
|
Эта директива появилась в версии 1.11.8.
Если запрещено, то перенаправления, выдаваемые nginx’ом, будут относительными.
См. также директивы server_name_in_redirect
и port_in_redirect.
Синтаксис: |
aio
|
---|---|
Умолчание: |
aio off; |
Контекст: |
http , server , location
|
Эта директива появилась в версии 0.8.11.
Разрешает или запрещает использование файлового асинхронного ввода-вывода (AIO)
во FreeBSD и Linux:
location /video/ { aio on; output_buffers 1 64k; }
Во FreeBSD AIO можно использовать, начиная с FreeBSD 4.3.
До FreeBSD 11.0
AIO можно либо собрать в ядре статически:
options VFS_AIO
либо загрузить динамически через загружаемый модуль ядра:
kldload aio
В Linux AIO можно использовать только начиная с версии ядра 2.6.22.
Кроме того, необходимо также дополнительно включить
directio,
иначе чтение будет блокирующимся:
location /video/ { aio on; directio 512; output_buffers 1 128k; }
В Linux
directio
можно использовать только для чтения блоков, выравненных
на границу 512 байт (или 4К для XFS).
Невыравненный конец файла будет читаться блокированно.
То же относится к запросам с указанием диапазона запрашиваемых байт
(byte-range requests) и к запросам FLV не с начала файла: чтение
невыравненных начала и конца ответа будет блокирующимся.
При одновременном включении AIO и sendfile в Linux
для файлов, размер которых больше либо равен указанному
в директиве directio, будет использоваться AIO,
а для файлов меньшего размера
или при выключенном directio — sendfile:
location /video/ { sendfile on; aio on; directio 8m; }
Кроме того, читать и отправлять
файлы можно в многопоточном режиме (1.7.11),
не блокируя при этом рабочий процесс:
location /video/ { sendfile on; aio threads; }
Операции чтения или отправки файлов будут обрабатываться потоками из указанного
пула.
Если пул потоков не задан явно,
используется пул с именем “default
”.
Имя пула может быть задано при помощи переменных:
aio threads=pool$disk;
По умолчанию поддержка многопоточности выключена, её сборку следует
разрешить с помощью конфигурационного параметра
--with-threads
.
В настоящий момент многопоточность совместима только с методами
epoll,
kqueue
и
eventport.
Отправка файлов в многопоточном режиме поддерживается только на Linux.
См. также директиву sendfile.
Синтаксис: |
aio_write
|
---|---|
Умолчание: |
aio_write off; |
Контекст: |
http , server , location
|
Эта директива появилась в версии 1.9.13.
При включённом aio разрешает его использование для записи файлов.
В настоящий момент это работает только при использовании
aio threads
и ограничено записью временных файлов с данными,
полученными от проксируемых серверов.
Синтаксис: |
alias
|
---|---|
Умолчание: |
— |
Контекст: |
location
|
Задаёт замену для указанного location’а.
Например, при такой конфигурации
location /i/ { alias /data/w3/images/; }
на запрос
“/i/top.gif
” будет отдан файл
/data/w3/images/top.gif
.
В значении параметра путь
можно использовать переменные,
кроме $document_root
и $realpath_root
.
Если alias
используется внутри location’а, заданного
регулярным выражением, то регулярное выражение должно содержать
выделения, а сам alias
— ссылки на эти выделения
(0.7.40), например:
location ~ ^/users/(.+.(?:gif|jpe?g|png))$ { alias /data/w3/images/$1; }
Если location и последняя часть значения директивы совпадают:
location /images/ { alias /data/w3/images/; }
то лучше воспользоваться директивой
root:
location /images/ { root /data/w3; }
Синтаксис: |
auth_delay
|
---|---|
Умолчание: |
auth_delay 0s; |
Контекст: |
http , server , location
|
Эта директива появилась в версии 1.17.10.
Задерживает обработку неавторизованных запросов с кодом ответа 401
для предотвращения атак по времени в случае ограничения доступа по
паролю, по
результату подзапроса
или по JWT.
Синтаксис: |
chunked_transfer_encoding
|
---|---|
Умолчание: |
chunked_transfer_encoding on; |
Контекст: |
http , server , location
|
Позволяет запретить формат передачи данных частями (chunked transfer
encoding) в HTTP/1.1.
Это может понадобиться при использовании программ, не поддерживающих
chunked encoding, несмотря на требования стандарта.
Синтаксис: |
client_body_buffer_size
|
---|---|
Умолчание: |
client_body_buffer_size 8k|16k; |
Контекст: |
http , server , location
|
Задаёт размер буфера для чтения тела запроса клиента.
Если тело запроса больше заданного буфера,
то всё тело запроса или только его часть записывается во
временный файл.
По умолчанию размер одного буфера равен двум размерам страницы.
На x86, других 32-битных платформах и x86-64 это 8K.
На других 64-битных платформах это обычно 16K.
Синтаксис: |
client_body_in_file_only
|
---|---|
Умолчание: |
client_body_in_file_only off; |
Контекст: |
http , server , location
|
Определяет, сохранять ли всё тело запроса клиента в файл.
Директиву можно использовать для отладки и при использовании переменной
$request_body_file
или метода
$r->request_body_file
модуля
ngx_http_perl_module.
При установке значения on
временные файлы
по окончании обработки запроса не удаляются.
Значение clean
разрешает удалять временные файлы,
оставшиеся по окончании обработки запроса.
Синтаксис: |
client_body_in_single_buffer
|
---|---|
Умолчание: |
client_body_in_single_buffer off; |
Контекст: |
http , server , location
|
Определяет, сохранять ли всё тело запроса клиента в одном буфере.
Директива рекомендуется при использовании переменной
$request_body
для уменьшения требуемого числа операций копирования.
Синтаксис: |
client_body_temp_path
|
---|---|
Умолчание: |
client_body_temp_path client_body_temp; |
Контекст: |
http , server , location
|
Задаёт каталог для хранения временных файлов с телами запросов клиентов.
В каталоге может использоваться иерархия подкаталогов до трёх уровней.
Например, при такой конфигурации
client_body_temp_path /spool/nginx/client_temp 1 2;
путь к временному файлу будет следующего вида:
/spool/nginx/client_temp/7/45/00000123457
Синтаксис: |
client_body_timeout
|
---|---|
Умолчание: |
client_body_timeout 60s; |
Контекст: |
http , server , location
|
Задаёт таймаут при чтении тела запроса клиента.
Таймаут устанавливается не на всю передачу тела запроса,
а только между двумя последовательными операциями чтения.
Если по истечении этого времени клиент ничего не передаст,
обработка запроса прекращается с ошибкой
408 (Request Time-out).
Синтаксис: |
client_header_buffer_size
|
---|---|
Умолчание: |
client_header_buffer_size 1k; |
Контекст: |
http , server
|
Задаёт размер буфера для чтения заголовка запроса клиента.
Для большинства запросов достаточно буфера размером в 1K байт.
Однако если в запросе есть длинные cookies, или же запрос
пришёл от WAP-клиента, то он может не поместиться в 1K.
Поэтому, если строка запроса или поле заголовка запроса
не помещаются полностью в этот буфер, то выделяются буферы
большего размера, задаваемые директивой
large_client_header_buffers.
Если директива указана на уровне server,
то может использоваться значение из сервера по умолчанию.
Подробнее см. в разделе
“Выбор
виртуального сервера”.
Синтаксис: |
client_header_timeout
|
---|---|
Умолчание: |
client_header_timeout 60s; |
Контекст: |
http , server
|
Задаёт таймаут при чтении заголовка запроса клиента.
Если по истечении этого времени клиент не передаст полностью заголовок,
обработка запроса прекращается с ошибкой
408 (Request Time-out).
Синтаксис: |
client_max_body_size
|
---|---|
Умолчание: |
client_max_body_size 1m; |
Контекст: |
http , server , location
|
Задаёт максимально допустимый размер тела запроса клиента.
Если размер больше заданного, то клиенту возвращается ошибка
413 (Request Entity Too Large).
Следует иметь в виду, что
браузеры не умеют корректно показывать
эту ошибку.
Установка параметра размер
в 0 отключает
проверку размера тела запроса клиента.
Синтаксис: |
connection_pool_size
|
---|---|
Умолчание: |
connection_pool_size 256|512; |
Контекст: |
http , server
|
Позволяет производить точную настройку выделения памяти
под конкретные соединения.
Эта директива не оказывает существенного влияния на
производительность, и её не следует использовать.
По умолчанию размер равен
256 байт на 32-битных платформах и 512 байт на 64-битных платформах.
До версии 1.9.8 по умолчанию использовалось значение 256 на всех платформах.
Синтаксис: |
default_type
|
---|---|
Умолчание: |
default_type text/plain; |
Контекст: |
http , server , location
|
Задаёт MIME-тип ответов по умолчанию.
Соответствие расширений имён файлов MIME-типу ответов задаётся
с помощью директивы types.
Синтаксис: |
directio
|
---|---|
Умолчание: |
directio off; |
Контекст: |
http , server , location
|
Эта директива появилась в версии 0.7.7.
Разрешает использовать флаги
O_DIRECT
(FreeBSD, Linux),
F_NOCACHE
(macOS)
или функцию directio()
(Solaris)
при чтении файлов, размер которых больше либо равен указанному.
Директива автоматически запрещает (0.7.15) использование
sendfile
для данного запроса.
Рекомендуется использовать для больших файлов:
directio 4m;
или при использовании aio в Linux.
Синтаксис: |
directio_alignment
|
---|---|
Умолчание: |
directio_alignment 512; |
Контекст: |
http , server , location
|
Эта директива появилась в версии 0.8.11.
Устанавливает выравнивание для
directio.
В большинстве случаев достаточно 512-байтового выравнивания, однако
при использовании XFS под Linux его нужно увеличить до 4K.
Синтаксис: |
disable_symlinks disable_symlinks
|
---|---|
Умолчание: |
disable_symlinks off; |
Контекст: |
http , server , location
|
Эта директива появилась в версии 1.1.15.
Определяет, как следует поступать с символическими ссылками
при открытии файлов:
off
-
Символические ссылки в пути допускаются и не проверяются.
Это стандартное поведение. on
-
Если любой компонент пути является символической ссылкой,
доступ к файлу запрещается. if_not_owner
-
Доступ к файлу запрещается, если любой компонент пути
является символической ссылкой, а ссылка и объект, на
который она ссылается, имеют разных владельцев. from
=часть
-
При проверке символических ссылок
(параметрыon
иif_not_owner
)
обычно проверяются все компоненты пути.
Можно не проверять символические ссылки в начальной части пути,
указав дополнительно параметр
from
=часть
.
В этом случае символические ссылки проверяются лишь начиная
с компонента пути, который следует за заданной начальной частью.
Если значение не является начальной частью проверяемого пути,
путь проверяется целиком, как если бы этот параметр не был указан вовсе.
Если значение целиком совпадает с именем файла,
символические ссылки не проверяются.
В значении параметра можно использовать переменные.
Пример:
disable_symlinks on from=$document_root;
Эта директива доступна только на системах, в которых есть
интерфейсы openat()
и fstatat()
.
К таким системам относятся современные версии FreeBSD, Linux и Solaris.
Параметры on
и if_not_owner
требуют дополнительных затрат на обработку.
На системах, не поддерживающих операцию открытия каталогов только для поиска,
для использования этих параметров требуется, чтобы рабочие процессы
имели право читать все проверяемые каталоги.
Модули
ngx_http_autoindex_module,
ngx_http_random_index_module
и ngx_http_dav_module
в настоящий момент игнорируют эту директиву.
Синтаксис: |
error_page
|
---|---|
Умолчание: |
— |
Контекст: |
http , server , location , if в location
|
Задаёт URI, который будет показываться для указанных ошибок.
В значении uri
можно использовать переменные.
Пример:
error_page 404 /404.html; error_page 500 502 503 504 /50x.html;
При этом делается внутреннее перенаправление на указанный uri
,
а метод запроса клиента меняется на “GET
”
(для всех методов, отличных от
“GET
” и “HEAD
”).
Кроме того, можно поменять код ответа на другой,
используя синтаксис вида “=
ответ
”, например:
error_page 404 =200 /empty.gif;
Если ошибочный ответ обрабатывается проксированным сервером или
FastCGI/uwsgi/SCGI/gRPC-сервером,
и этот сервер может вернуть разные коды ответов,
например, 200, 302, 401 или 404, то можно выдавать возвращаемый им код:
error_page 404 = /404.php;
Если при внутреннем перенаправлении не нужно менять URI и метод,
то можно передать обработку ошибки в именованный location:
location / { error_page 404 = @fallback; } location @fallback { proxy_pass http://backend; }
Если при обработке
uri
происходит ошибка,
клиенту возвращается ответ с кодом последней случившейся ошибки.
Также существует возможность использовать перенаправления URL для обработки
ошибок:
error_page 403 http://example.com/forbidden.html; error_page 404 =301 http://example.com/notfound.html;
В этом случае по умолчанию клиенту возвращается код ответа 302.
Его можно изменить только на один из кодов ответа, относящихся к
перенаправлениям (301, 302, 303, 307 и 308).
До версий 1.1.16 и 1.0.13 код 307 не обрабатывался как перенаправление.
До версии 1.13.0 код 308 не обрабатывался как перенаправление.
Директивы наследуются с предыдущего уровня конфигурации при условии, что
на данном уровне не описаны свои директивы error_page
.
Синтаксис: |
etag
|
---|---|
Умолчание: |
etag on; |
Контекст: |
http , server , location
|
Эта директива появилась в версии 1.3.3.
Разрешает или запрещает автоматическую генерацию поля “ETag”
заголовка ответа для статических ресурсов.
Синтаксис: |
http { ... }
|
---|---|
Умолчание: |
— |
Контекст: |
main
|
Предоставляет контекст конфигурационного файла, в котором указываются
директивы HTTP-сервера.
Синтаксис: |
if_modified_since
|
---|---|
Умолчание: |
if_modified_since exact; |
Контекст: |
http , server , location
|
Эта директива появилась в версии 0.7.24.
Определяет, как сравнивать время модификации ответа с
временем в поле
“If-Modified-Since”
заголовка запроса:
off
- ответ всегда считается изменившимся (0.7.34);
exact
- точное совпадение;
before
-
время модификации ответа меньше или равно времени, заданному в поле
“If-Modified-Since” заголовка запроса.
Синтаксис: |
ignore_invalid_headers
|
---|---|
Умолчание: |
ignore_invalid_headers on; |
Контекст: |
http , server
|
Если включено, nginx игнорирует поля заголовка с недопустимыми именами.
Допустимыми считаются имена, состоящие из английских букв, цифр, дефисов
и возможно знаков подчёркивания (последнее контролируется директивой
underscores_in_headers).
Если директива указана на уровне server,
то может использоваться значение из сервера по умолчанию.
Подробнее см. в разделе
“Выбор
виртуального сервера”.
Синтаксис: |
internal;
|
---|---|
Умолчание: |
— |
Контекст: |
location
|
Указывает, что location может использоваться только для внутренних запросов.
Для внешних запросов клиенту будет возвращаться ошибка
404 (Not Found).
Внутренними запросами являются:
-
запросы, перенаправленные директивами
error_page,
index,
random_index и
try_files; -
запросы, перенаправленные с помощью поля
“X-Accel-Redirect” заголовка ответа вышестоящего сервера; -
подзапросы, формируемые командой
“include virtual
”
модуля
ngx_http_ssi_module,
директивами модуля
ngx_http_addition_module,
а также директивами
auth_request и
mirror; -
запросы, изменённые директивой
rewrite.
Пример:
error_page 404 /404.html; location = /404.html { internal; }
Для предотвращения зацикливания, которое может возникнуть при
использовании некорректных конфигураций, количество внутренних
перенаправлений ограничено десятью.
По достижении этого ограничения будет возвращена ошибка
500 (Internal Server Error).
В таком случае в лог-файле ошибок можно увидеть сообщение
“rewrite or internal redirection cycle”.
Синтаксис: |
keepalive_disable
|
---|---|
Умолчание: |
keepalive_disable msie6; |
Контекст: |
http , server , location
|
Запрещает keep-alive соединения с некорректно ведущими себя браузерами.
Параметры браузер
указывают, на какие браузеры это
распространяется.
Значение msie6
запрещает keep-alive соединения
со старыми версиями MSIE после получения запроса POST.
Значение safari
запрещает keep-alive соединения
с Safari и подобными им браузерами на macOS и подобных ей ОС.
Значение none
разрешает keep-alive соединения
со всеми браузерами.
До версии 1.1.18 под значение
safari
подпадали
все Safari и подобные им браузеры на всех ОС, и keep-alive
соединения с ними были по умолчанию запрещены.
Синтаксис: |
keepalive_requests
|
---|---|
Умолчание: |
keepalive_requests 1000; |
Контекст: |
http , server , location
|
Эта директива появилась в версии 0.8.0.
Задаёт максимальное число запросов, которые можно
сделать по одному keep-alive соединению.
После того, как сделано максимальное число запросов,
соединение закрывается.
Периодическое закрытие соединений необходимо для освобождения
памяти, выделенной под конкретные соединения.
Поэтому использование слишком большого максимального числа запросов
может приводить к чрезмерному потреблению памяти и не рекомендуется.
До версии 1.19.10 по умолчанию использовалось значение 100.
Синтаксис: |
keepalive_time
|
---|---|
Умолчание: |
keepalive_time 1h; |
Контекст: |
http , server , location
|
Эта директива появилась в версии 1.19.10.
Ограничивает максимальное время, в течение которого
могут обрабатываться запросы в рамках keep-alive соединения.
По достижении заданного времени соединение закрывается
после обработки очередного запроса.
Синтаксис: |
keepalive_timeout
|
---|---|
Умолчание: |
keepalive_timeout 75s; |
Контекст: |
http , server , location
|
Первый параметр задаёт таймаут, в течение которого keep-alive
соединение с клиентом не будет закрыто со стороны сервера.
Значение 0 запрещает keep-alive соединения с клиентами.
Второй необязательный параметр задаёт значение в поле
“Keep-Alive: timeout=время
”
заголовка ответа.
Два параметра могут отличаться друг от друга.
Поле
“Keep-Alive: timeout=время
”
заголовка понимают Mozilla и Konqueror.
MSIE сам закрывает keep-alive соединение примерно через 60 секунд.
Синтаксис: |
large_client_header_buffers
|
---|---|
Умолчание: |
large_client_header_buffers 4 8k; |
Контекст: |
http , server
|
Задаёт максимальное число
и размер
буферов для чтения большого заголовка запроса клиента.
Строка запроса не должна превышать размера одного буфера, иначе клиенту
возвращается ошибка
414 (Request-URI Too Large).
Поле заголовка запроса также не должно превышать размера одного буфера,
иначе клиенту возвращается ошибка
400 (Bad Request).
Буферы выделяются только по мере необходимости.
По умолчанию размер одного буфера равен 8K байт.
Если по окончании обработки запроса соединение переходит в состояние
keep-alive, эти буферы освобождаются.
Если директива указана на уровне server,
то может использоваться значение из сервера по умолчанию.
Подробнее см. в разделе
“Выбор
виртуального сервера”.
Синтаксис: |
limit_except
|
---|---|
Умолчание: |
— |
Контекст: |
location
|
Ограничивает HTTP-методы, доступные внутри location.
Параметр метод
может быть одним из
GET
,
HEAD
,
POST
,
PUT
,
DELETE
,
MKCOL
,
COPY
,
MOVE
,
OPTIONS
,
PROPFIND
,
PROPPATCH
,
LOCK
,
UNLOCK
или
PATCH
.
Если разрешён метод GET
, то метод
HEAD
также будет разрешён.
Доступ к остальным методам может быть ограничен при помощи директив модулей
ngx_http_access_module,
ngx_http_auth_basic_module
и
ngx_http_auth_jwt_module
(1.13.10):
limit_except GET { allow 192.168.1.0/32; deny all; }
Обратите внимание, что данное ограничение действует для всех методов,
кроме GET и HEAD.
Синтаксис: |
limit_rate
|
---|---|
Умолчание: |
limit_rate 0; |
Контекст: |
http , server , location , if в location
|
Ограничивает скорость передачи ответа клиенту.
Скорость
задаётся в байтах в секунду.
Значение 0 отключает ограничение скорости.
Ограничение устанавливается на запрос, поэтому, если клиент одновременно
откроет два соединения, суммарная скорость будет вдвое выше
заданного ограничения.
В значении параметра можно использовать переменные (1.17.0).
Это может быть полезно в случаях, когда скорость нужно ограничивать
в зависимости от какого-либо условия:
map $slow $rate { 1 4k; 2 8k; } limit_rate $rate;
Ограничение скорости можно также задать в переменной
$limit_rate
,
однако начиная с 1.17.0 использовать данный метод не рекомендуется:
server { if ($slow) { set $limit_rate 4k; } ... }
Кроме того, ограничение скорости может быть задано в поле
“X-Accel-Limit-Rate” заголовка ответа проксированного сервера.
Эту возможность можно запретить с помощью директив
proxy_ignore_headers,
fastcgi_ignore_headers,
uwsgi_ignore_headers
и
scgi_ignore_headers.
Синтаксис: |
limit_rate_after
|
---|---|
Умолчание: |
limit_rate_after 0; |
Контекст: |
http , server , location , if в location
|
Эта директива появилась в версии 0.8.0.
Задаёт начальный объём данных, после передачи которого начинает
ограничиваться скорость передачи ответа клиенту.
В значении параметра можно использовать переменные (1.17.0).
Пример:
location /flv/ { flv; limit_rate_after 500k; limit_rate 50k; }
Синтаксис: |
lingering_close
|
---|---|
Умолчание: |
lingering_close on; |
Контекст: |
http , server , location
|
Эта директива появилась в версиях 1.1.0 и 1.0.6.
Управляет закрытием соединений с клиентами.
Со значением по умолчанию “on
” nginx будет
ждать и
обрабатывать дополнительные данные,
поступающие от клиента, перед полным закрытием соединения, но только
если эвристика указывает на то, что клиент может ещё послать данные.
Со значением “always
” nginx всегда будет
ждать и обрабатывать дополнительные данные, поступающие от клиента.
Со значением “off
” nginx не будет ждать поступления
дополнительных данных и сразу же закроет соединение.
Это поведение нарушает протокол и поэтому не должно использоваться без
необходимости.
Для управления закрытием
HTTP/2-соединений
директива должна быть задана на уровне server (1.19.1).
Синтаксис: |
lingering_time
|
---|---|
Умолчание: |
lingering_time 30s; |
Контекст: |
http , server , location
|
Если действует lingering_close,
эта директива задаёт максимальное время, в течение которого nginx
будет обрабатывать (читать и игнорировать) дополнительные данные,
поступающие от клиента.
По прошествии этого времени соединение будет закрыто, даже если
будут ещё данные.
Синтаксис: |
lingering_timeout
|
---|---|
Умолчание: |
lingering_timeout 5s; |
Контекст: |
http , server , location
|
Если действует lingering_close, эта директива задаёт
максимальное время ожидания поступления дополнительных данных от клиента.
Если в течение этого времени данные не были получены, соединение закрывается.
В противном случае данные читаются и игнорируются, и nginx снова
ждёт поступления данных.
Цикл “ждать-читать-игнорировать” повторяется, но не дольше чем задано
директивой lingering_time.
Синтаксис: |
listen listen listen
|
---|---|
Умолчание: |
listen *:80 | *:8000; |
Контекст: |
server
|
Задаёт адрес
и порт
для IP
или путь
для UNIX-сокета,
на которых сервер будет принимать запросы.
Можно указать адрес
и порт
,
либо только адрес
или только порт
.
Кроме того, адрес
может быть именем хоста, например:
listen 127.0.0.1:8000; listen 127.0.0.1; listen 8000; listen *:8000; listen localhost:8000;
IPv6-адреса (0.7.36) задаются в квадратных скобках:
listen [::]:8000; listen [::1];
UNIX-сокеты (0.8.21) задаются при помощи префикса “unix:
”:
listen unix:/var/run/nginx.sock;
Если указан только адрес
, то используется порт 80.
Если директива не указана, то используется либо *:80
,
если nginx работает с привилегиями суперпользователя,
либо *:8000
.
Если у директивы есть параметр default_server
, то сервер,
в котором описана эта директива, будет сервером по умолчанию для указанной пары
адрес
:порт
.
Если же директив с параметром default_server
нет, то
сервером по умолчанию будет первый сервер, в котором описана пара
адрес
:порт
.
До версии 0.8.21 этот параметр назывался просто
default
.
Параметр ssl
(0.7.14) указывает на то, что все соединения,
принимаемые на данном порту, должны работать в режиме SSL.
Это позволяет задать компактную конфигурацию для сервера,
работающего сразу в двух режимах — HTTP и HTTPS.
Параметр http2
(1.9.5) позволяет принимать на этом порту
HTTP/2-соединения.
Обычно, чтобы это работало, следует также указать параметр
ssl
, однако nginx можно также настроить и на приём
HTTP/2-соединений без SSL.
Параметр spdy
(1.3.15-1.9.4) позволяет принимать на этом порту
SPDY-соединения.
Обычно, чтобы это работало, следует также указать параметр
ssl
, однако nginx можно также настроить и на приём
SPDY-соединений без SSL.
Параметр proxy_protocol
(1.5.12)
указывает на то, что все соединения, принимаемые на данном порту,
должны использовать
протокол
PROXY.
Протокол PROXY версии 2 поддерживается начиная с версии 1.13.11.
В директиве listen
можно также указать несколько
дополнительных параметров, специфичных для связанных с сокетами
системных вызовов.
Эти параметры можно задать в любой директиве listen
,
но только один раз для указанной пары
адрес
:порт
.
До версии 0.8.21 их можно было указывать лишь в директиве
listen
совместно с параметромdefault
.
-
setfib
=число
-
этот параметр (0.8.44) задаёт таблицу маршрутизации, FIB
(параметрSO_SETFIB
) для слушающего сокета.
В настоящий момент это работает только на FreeBSD. -
fastopen
=число
-
включает
“TCP Fast Open”
для слушающего сокета (1.5.8) и
ограничивает
максимальную длину очереди соединений, которые ещё не завершили процесс
three-way handshake.Не включайте “TCP Fast Open”, не убедившись, что сервер может адекватно
обрабатывать многократное получениеодного и того же SYN-пакета с данными.
-
backlog
=число
-
задаёт параметр
backlog
в вызове
listen()
, который ограничивает
максимальный размер очереди ожидающих приёма соединений.
По умолчаниюbacklog
устанавливается равным -1 для
FreeBSD, DragonFly BSD и macOS, и 511 для других платформ. -
rcvbuf
=размер
-
задаёт размер буфера приёма
(параметрSO_RCVBUF
) для слушающего сокета. -
sndbuf
=размер
-
задаёт размер буфера передачи
(параметрSO_SNDBUF
) для слушающего сокета. -
accept_filter
=фильтр
-
задаёт название accept-фильтра
(параметрSO_ACCEPTFILTER
) для слушающего сокета,
который включается для фильтрации входящих соединений
перед передачей их вaccept()
.
Работает только на FreeBSD и NetBSD 5.0+.
Можно использовать два фильтра:
dataready
и
httpready. -
deferred
-
указывает использовать отложенный
accept()
(параметрTCP_DEFER_ACCEPT
сокета) на Linux. -
bind
-
указывает, что для данной пары
адрес
:порт
нужно делать
bind()
отдельно.
Это нужно потому, что если описаны несколько директивlisten
с одинаковым портом, но разными адресами, и одна из директив
listen
слушает на всех адресах для данного порта
(*:
порт
), то nginx сделает
bind()
только на*:
порт
.
Необходимо заметить, что в этом случае для определения адреса, на который
пришло соединение, делается системный вызовgetsockname()
.
Если же используются параметрыsetfib
,
fastopen
,
backlog
,rcvbuf
,
sndbuf
,accept_filter
,
deferred
,ipv6only
,
reuseport
илиso_keepalive
,
то для данной пары
адрес
:порт
всегда делается
отдельный вызовbind()
. -
ipv6only
=on
|off
-
этот параметр (0.7.42) определяет
(через параметр сокетаIPV6_V6ONLY
),
будет ли слушающий на wildcard-адресе[::]
IPv6-сокет
принимать только IPv6-соединения, или же одновременно IPv6- и IPv4-соединения.
По умолчанию параметр включён.
Установить его можно только один раз на старте.До версии 1.3.4,
если этот параметр не был задан явно, то для сокета действовали
настройки операционной системы. -
reuseport
-
этот параметр (1.9.1) указывает, что нужно создавать отдельный слушающий сокет
для каждого рабочего процесса
(через параметр сокета
SO_REUSEPORT
для Linux 3.9+ и DragonFly BSD
илиSO_REUSEPORT_LB
для FreeBSD 12+), позволяя ядру
распределять входящие соединения между рабочими процессами.
В настоящий момент это работает только на Linux 3.9+, DragonFly BSD
и FreeBSD 12+ (1.15.1).Ненадлежащее использование параметра может быть
небезопасно. -
so_keepalive
=on
|off
|[keepidle
]:[keepintvl
]:[keepcnt
] -
этот параметр (1.1.11) конфигурирует для слушающего сокета
поведение “TCP keepalive”.
Если этот параметр опущен, то для сокета будут действовать
настройки операционной системы.
Если он установлен в значение “on
”, то для сокета
включается параметрSO_KEEPALIVE
.
Если он установлен в значение “off
”, то для сокета
параметрSO_KEEPALIVE
выключается.
Некоторые операционные системы поддерживают настройку параметров
“TCP keepalive” на уровне сокета посредством параметров
TCP_KEEPIDLE
,TCP_KEEPINTVL
и
TCP_KEEPCNT
.
На таких системах (в настоящий момент это Linux 2.4+, NetBSD 5+ и
FreeBSD 9.0-STABLE)
их можно сконфигурировать с помощью параметровkeepidle
,
keepintvl
иkeepcnt
.
Один или два параметра могут быть опущены, в таком случае для
соответствующего параметра сокета будут действовать стандартные
системные настройки.
Например,so_keepalive=30m::10
установит таймаут бездействия (
TCP_KEEPIDLE
) в 30 минут,
для интервала проб (TCP_KEEPINTVL
) будет действовать
стандартная системная настройка, а счётчик проб (TCP_KEEPCNT
)
будет равен 10.
Пример:
listen 127.0.0.1 default_server accept_filter=dataready backlog=1024;
Синтаксис: |
location [ location
|
---|---|
Умолчание: |
— |
Контекст: |
server , location
|
Устанавливает конфигурацию в зависимости от URI запроса.
Для сопоставления используется URI запроса в нормализованном виде,
после декодирования текста, заданного в виде “%XX
”,
преобразования относительных элементов пути “.
” и
“..
” в реальные и возможной
замены двух и более подряд идущих
слэшей на один.
location можно задать префиксной строкой или регулярным выражением.
Регулярные выражения задаются либо с модификатором “~*
”
(для поиска совпадения без учёта регистра символов),
либо с модификатором “~
” (с учётом регистра).
Чтобы найти location, соответствующий запросу, вначале проверяются
location’ы, заданные префиксными строками (префиксные location’ы).
Среди них ищется location с совпадающим префиксом
максимальной длины и запоминается.
Затем проверяются регулярные выражения, в порядке их следования
в конфигурационном файле.
Проверка регулярных выражений прекращается после первого же совпадения,
и используется соответствующая конфигурация.
Если совпадение с регулярным выражением не найдено, то используется
конфигурация запомненного ранее префиксного location’а.
Блоки location
могут быть вложенными,
с некоторыми исключениями, о которых говорится ниже.
Для операционных систем, нечувствительных к регистру символов, таких
как macOS и Cygwin, сравнение с префиксными строками производится
без учёта регистра (0.7.7).
Однако сравнение ограничено только однобайтными locale’ями.
Регулярные выражения могут содержать выделения (0.7.40), которые могут
затем использоваться в других директивах.
Если у совпавшего префиксного location’а максимальной длины указан модификатор
“^~
”, то регулярные выражения не проверяются.
Кроме того, с помощью модификатора “=
” можно задать точное
совпадение URI и location.
При точном совпадении поиск сразу же прекращается.
Например, если запрос “/
” случается часто, то
указав “location = /
”, можно ускорить обработку
этих запросов, так как поиск прекратится после первого же сравнения.
Очевидно, что такой location не может иметь вложенные location’ы.
В версиях с 0.7.1 по 0.8.41, если запрос точно совпал с префиксным
location’ом без модификаторов “=
” и “^~
”,
то поиск тоже сразу же прекращается и регулярные выражения также
не проверяются.
Проиллюстрируем вышесказанное примером:
location = / { [ конфигурация А ] } location / { [ конфигурация Б ] } location /documents/ { [ конфигурация В ] } location ^~ /images/ { [ конфигурация Г ] } location ~* .(gif|jpg|jpeg)$ { [ конфигурация Д ] }
Для запроса “/
” будет выбрана конфигурация А,
для запроса “/index.html
” — конфигурация Б,
для запроса “/documents/document.html
” — конфигурация В,
для запроса “/images/1.gif
” — конфигурация Г,
а для запроса “/documents/1.jpg
” — конфигурация Д.
Префикс “@
” задаёт именованный location.
Такой location не используется при обычной обработке запросов, а
предназначен только для перенаправления в него запросов.
Такие location’ы не могут быть вложенными и не могут содержать
вложенные location’ы.
Если location задан префиксной строкой со слэшом в конце
и запросы обрабатываются при помощи
proxy_pass,
fastcgi_pass,
uwsgi_pass,
scgi_pass,
memcached_pass или
grpc_pass,
происходит специальная обработка.
В ответ на запрос с URI равным этой строке, но без завершающего слэша,
будет возвращено постоянное перенаправление с кодом 301
на URI с добавленным в конец слэшом.
Если такое поведение нежелательно, можно задать точное совпадение
URI и location, например:
location /user/ { proxy_pass http://user.example.com; } location = /user { proxy_pass http://login.example.com; }
Синтаксис: |
log_not_found
|
---|---|
Умолчание: |
log_not_found on; |
Контекст: |
http , server , location
|
Разрешает или запрещает записывать в
error_log
ошибки о том, что файл не найден.
Синтаксис: |
log_subrequest
|
---|---|
Умолчание: |
log_subrequest off; |
Контекст: |
http , server , location
|
Разрешает или запрещает записывать в
access_log
подзапросы.
Синтаксис: |
max_ranges
|
---|---|
Умолчание: |
— |
Контекст: |
http , server , location
|
Эта директива появилась в версии 1.1.2.
Ограничивает максимальное допустимое число диапазонов в запросах с
указанием диапазона запрашиваемых байт (byte-range requests).
Запросы, превышающие указанное ограничение, обрабатываются как
если бы они не содержали указания диапазонов.
По умолчанию число диапазонов не ограничено.
Значение 0 полностью запрещает поддержку диапазонов.
Синтаксис: |
merge_slashes
|
---|---|
Умолчание: |
merge_slashes on; |
Контекст: |
http , server
|
Разрешает или запрещает преобразование URI путём замены двух и более подряд
идущих слэшей (“/
”) на один.
Необходимо иметь в виду, что это преобразование необходимо для корректной
проверки префиксных строк и регулярных выражений.
Если его не делать, то запрос “//scripts/one.php
”
не попадёт в
location /scripts/ { ... }
и может быть обслужен как статический файл.
Поэтому он преобразуется к виду “/scripts/one.php
”.
Запрет преобразования может понадобиться, если в URI используются имена,
закодированные методом base64, в котором задействован символ
“/
”.
Однако из соображений безопасности лучше избегать отключения преобразования.
Если директива указана на уровне server,
то может использоваться значение из сервера по умолчанию.
Подробнее см. в разделе
“Выбор
виртуального сервера”.
Синтаксис: |
msie_padding
|
---|---|
Умолчание: |
msie_padding on; |
Контекст: |
http , server , location
|
Разрешает или запрещает добавлять в ответы для MSIE со статусом больше 400
комментарий для увеличения размера ответа до 512 байт.
Синтаксис: |
msie_refresh
|
---|---|
Умолчание: |
msie_refresh off; |
Контекст: |
http , server , location
|
Разрешает или запрещает выдавать для MSIE клиентов refresh’ы вместо
перенаправлений.
Синтаксис: |
open_file_cache open_file_cache
|
---|---|
Умолчание: |
open_file_cache off; |
Контекст: |
http , server , location
|
Задаёт кэш, в котором могут храниться:
- дескрипторы открытых файлов, информация об их размерах и времени модификации;
- информация о существовании каталогов;
-
информация об ошибках поиска файла — “нет файла”, “нет прав на чтение”
и тому подобное.Кэширование ошибок нужно разрешить отдельно директивой
open_file_cache_errors.
У директивы есть следующие параметры:
-
max
-
задаёт максимальное число элементов в кэше;
при переполнении кэша удаляются наименее востребованные элементы (LRU); -
inactive
-
задаёт время, после которого элемент кэша удаляется, если к нему
не было обращений в течение этого времени; по умолчанию 60 секунд; -
off
- запрещает кэш.
Пример:
open_file_cache max=1000 inactive=20s; open_file_cache_valid 30s; open_file_cache_min_uses 2; open_file_cache_errors on;
Синтаксис: |
open_file_cache_errors
|
---|---|
Умолчание: |
open_file_cache_errors off; |
Контекст: |
http , server , location
|
Разрешает или запрещает кэширование ошибок поиска файлов в
open_file_cache.
Синтаксис: |
open_file_cache_min_uses
|
---|---|
Умолчание: |
open_file_cache_min_uses 1; |
Контекст: |
http , server , location
|
Задаёт минимальное число
обращений к файлу
в течение времени, заданного параметром inactive
директивы open_file_cache, необходимых для того, чтобы дескриптор
файла оставался открытым в кэше.
Синтаксис: |
open_file_cache_valid
|
---|---|
Умолчание: |
open_file_cache_valid 60s; |
Контекст: |
http , server , location
|
Определяет время, через которое следует проверять актуальность информации
об элементе в
open_file_cache.
Синтаксис: |
output_buffers
|
---|---|
Умолчание: |
output_buffers 2 32k; |
Контекст: |
http , server , location
|
Задаёт число
и размер
буферов,
используемых при чтении ответа с диска.
До версии 1.9.5 по умолчанию использовалось значение 1 32k.
Синтаксис: |
port_in_redirect
|
---|---|
Умолчание: |
port_in_redirect on; |
Контекст: |
http , server , location
|
Разрешает или запрещает указывать порт в
абсолютных
перенаправлениях, выдаваемых nginx’ом.
Использование в перенаправлениях основного имени сервера управляется
директивой server_name_in_redirect.
Синтаксис: |
postpone_output
|
---|---|
Умолчание: |
postpone_output 1460; |
Контекст: |
http , server , location
|
Если это возможно, то отправка данных клиенту будет отложена пока nginx не
накопит по крайней мере указанное количество байт для отправки.
Значение 0 запрещает отложенную отправку данных.
Синтаксис: |
read_ahead
|
---|---|
Умолчание: |
read_ahead 0; |
Контекст: |
http , server , location
|
Задаёт ядру размер предчтения при работе с файлами.
На Linux используется системный вызов
posix_fadvise(0, 0, 0, POSIX_FADV_SEQUENTIAL)
,
поэтому параметр размер
там игнорируется.
На FreeBSD используется системный вызов
fcntl(O_READAHEAD,
размер
)
,
появившийся во FreeBSD 9.0-CURRENT.
Для FreeBSD 7 необходимо установить
патч.
Синтаксис: |
recursive_error_pages
|
---|---|
Умолчание: |
recursive_error_pages off; |
Контекст: |
http , server , location
|
Разрешает или запрещает делать несколько перенаправлений через директиву
error_page.
Число таких перенаправлений ограничено.
Синтаксис: |
request_pool_size
|
---|---|
Умолчание: |
request_pool_size 4k; |
Контекст: |
http , server
|
Позволяет производить точную настройку выделений памяти
под конкретные запросы.
Эта директива не оказывает существенного влияния на
производительность, и её не следует использовать.
Синтаксис: |
reset_timedout_connection
|
---|---|
Умолчание: |
reset_timedout_connection off; |
Контекст: |
http , server , location
|
Разрешает или запрещает сброс соединений по таймауту,
а также при
закрытии
соединений с помощью нестандартного кода 444 (1.15.2).
Сброс делается следующим образом.
Перед закрытием сокета для него задаётся параметр
SO_LINGER
с таймаутом 0.
После этого при закрытии сокета клиенту отсылается TCP RST, а вся память,
связанная с этим сокетом, освобождается.
Это позволяет избежать длительного нахождения уже закрытого сокета в
состоянии FIN_WAIT1 с заполненными буферами.
Необходимо отметить, что keep-alive соединения по истечении таймаута
закрываются обычным образом.
Синтаксис: |
resolver
|
---|---|
Умолчание: |
— |
Контекст: |
http , server , location
|
Задаёт серверы DNS, используемые для преобразования имён вышестоящих серверов
в адреса, например:
resolver 127.0.0.1 [::1]:5353;
Адрес может быть указан в виде доменного имени или IP-адреса,
и необязательного порта (1.3.1, 1.2.2).
Если порт не указан, используется порт 53.
Серверы DNS опрашиваются циклически.
До версии 1.1.7 можно было задать лишь один DNS-сервер.
Задание DNS-серверов с помощью IPv6-адресов поддерживается
начиная с версий 1.3.1 и 1.2.2.
По умолчанию nginx будет искать как IPv4-, так и IPv6-адреса
при преобразовании имён в адреса.
Если поиск IPv4- или IPv6-адресов нежелателен,
можно указать параметр ipv4=off
(1.23.1) или
ipv6=off
.
Преобразование имён в IPv6-адреса поддерживается
начиная с версии 1.5.8.
По умолчанию nginx кэширует ответы, используя значение TTL из ответа.
Необязательный параметр valid
позволяет это
переопределить:
resolver 127.0.0.1 [::1]:5353 valid=30s;
До версии 1.1.9 настройка времени кэширования была невозможна
и nginx всегда кэшировал ответы на срок в 5 минут.
Для предотвращения DNS-спуфинга рекомендуется
использовать DNS-серверы в защищённой доверенной локальной сети.
Необязательный параметр status_zone
(1.17.1)
включает
сбор информации
о запросах и ответах сервера DNS
в указанной зоне
.
Параметр доступен как часть
коммерческой подписки.
Синтаксис: |
resolver_timeout
|
---|---|
Умолчание: |
resolver_timeout 30s; |
Контекст: |
http , server , location
|
Задаёт таймаут для преобразования имени в адрес, например:
resolver_timeout 5s;
Синтаксис: |
root
|
---|---|
Умолчание: |
root html; |
Контекст: |
http , server , location , if в location
|
Задаёт корневой каталог для запросов.
Например, при такой конфигурации
location /i/ { root /data/w3; }
в ответ на запрос “/i/top.gif
” будет отдан файл
/data/w3/i/top.gif
.
В значении параметра путь
можно использовать переменные,
кроме $document_root
и $realpath_root
.
Путь к файлу формируется путём простого добавления URI к значению директивы
root
.
Если же URI необходимо поменять, следует воспользоваться директивой
alias.
Синтаксис: |
satisfy
|
---|---|
Умолчание: |
satisfy all; |
Контекст: |
http , server , location
|
Разрешает доступ, если все (all
)
или хотя бы один (any
) из модулей
ngx_http_access_module,
ngx_http_auth_basic_module,
ngx_http_auth_request_module
или
ngx_http_auth_jwt_module
разрешают доступ.
Пример:
location / { satisfy any; allow 192.168.1.0/32; deny all; auth_basic "closed site"; auth_basic_user_file conf/htpasswd; }
Синтаксис: |
send_lowat
|
---|---|
Умолчание: |
send_lowat 0; |
Контекст: |
http , server , location
|
При установке этой директивы в ненулевое значение nginx будет пытаться
минимизировать число операций отправки на клиентских сокетах либо при
помощи флага NOTE_LOWAT
метода
kqueue,
либо при помощи параметра сокета SO_SNDLOWAT
.
В обоих случаях будет использован указанный размер
.
Эта директива игнорируется на Linux, Solaris и Windows.
Синтаксис: |
send_timeout
|
---|---|
Умолчание: |
send_timeout 60s; |
Контекст: |
http , server , location
|
Задаёт таймаут при передаче ответа клиенту.
Таймаут устанавливается не на всю передачу ответа,
а только между двумя операциями записями.
Если по истечении этого времени клиент ничего не примет,
соединение будет закрыто.
Синтаксис: |
sendfile
|
---|---|
Умолчание: |
sendfile off; |
Контекст: |
http , server , location , if в location
|
Разрешает или запрещает использовать
sendfile()
.
Начиная с nginx 0.8.12 и FreeBSD 5.2.1,
можно использовать aio для подгрузки данных
для sendfile()
:
location /video/ { sendfile on; tcp_nopush on; aio on; }
В такой конфигурации функция sendfile()
вызывается с флагом
SF_NODISKIO
, в результате чего она не блокируется на диске, а
сообщает об отсутствии данных в памяти.
После этого nginx инициирует асинхронную подгрузку данных, читая один байт.
При этом ядро FreeBSD подгружает в память первые 128K байт файла, однако
при последующих чтениях файл подгружается частями только по 16K.
Изменить это можно с помощью директивы
read_ahead.
До версии 1.7.11 подгрузка данных включалась с помощью
aio sendfile;
.
Синтаксис: |
sendfile_max_chunk
|
---|---|
Умолчание: |
sendfile_max_chunk 2m; |
Контекст: |
http , server , location
|
Ограничивает объём данных,
который может передан за один вызов sendfile()
.
Без этого ограничения одно быстрое соединение может целиком
захватить рабочий процесс.
До версии 1.21.4 по умолчанию ограничения не было.
Синтаксис: |
server { ... }
|
---|---|
Умолчание: |
— |
Контекст: |
http
|
Задаёт конфигурацию для виртуального сервера.
Чёткого разделения виртуальных серверов на IP-based (на основании IP-адреса)
и name-based (на основании поля “Host” заголовка запроса) нет.
Вместо этого директивами listen описываются все
адреса и порты, на которых нужно принимать соединения для этого сервера,
а в директиве server_name указываются все имена серверов.
Примеры конфигураций описаны в документе
“Как nginx обрабатывает запросы”.
Синтаксис: |
server_name
|
---|---|
Умолчание: |
server_name ""; |
Контекст: |
server
|
Задаёт имена виртуального сервера, например:
server { server_name example.com www.example.com; }
Первое имя становится основным именем сервера.
В именах серверов можно использовать звёздочку (“*
”)
для замены первой или последней части имени:
server { server_name example.com *.example.com www.example.*; }
Такие имена называются именами с маской.
Два первых вышеприведённых имени можно объединить в одно:
server { server_name .example.com; }
В качестве имени сервера можно также использовать регулярное выражение,
указав перед ним тильду (“~
”):
server { server_name www.example.com ~^wwwd+.example.com$; }
Регулярное выражение может содержать выделения (0.7.40),
которые могут затем использоваться в других директивах:
server { server_name ~^(www.)?(.+)$; location / { root /sites/$2; } } server { server_name _; location / { root /sites/default; } }
Именованные выделения в регулярном выражении создают переменные (0.8.25),
которые могут затем использоваться в других директивах:
server { server_name ~^(www.)?(?<domain>.+)$; location / { root /sites/$domain; } } server { server_name _; location / { root /sites/default; } }
Если параметр директивы установлен в “$hostname
” (0.9.4), то
подставляется имя хоста (hostname) машины.
Возможно также указать пустое имя сервера (0.7.11):
server { server_name www.example.com ""; }
Это позволяет обрабатывать запросы без поля “Host” заголовка
запроса в этом сервере, а не в сервере по умолчанию для данной пары адрес:порт.
Это настройка по умолчанию.
До 0.8.48 по умолчанию использовалось имя хоста (hostname) машины.
При поиске виртуального сервера по имени,
если имени соответствует несколько из указанных вариантов,
например, одновременно подходят и имя с маской, и регулярное выражение,
будет выбран первый подходящий вариант в следующем порядке приоритета:
- точное имя
-
самое длинное имя с маской в начале,
например “*.example.com
” -
самое длинное имя с маской в конце,
например “mail.*
” -
первое подходящее регулярное выражение
(в порядке следования в конфигурационном файле)
Подробнее имена серверов обсуждаются в отдельном
документе.
Синтаксис: |
server_name_in_redirect
|
---|---|
Умолчание: |
server_name_in_redirect off; |
Контекст: |
http , server , location
|
Разрешает или запрещает использовать в
абсолютных перенаправлениях,
выдаваемых nginx’ом, основное имя сервера, задаваемое директивой
server_name.
Если использование основного имени сервера запрещено, то используется имя,
указанное в поле “Host” заголовка запроса.
Если же этого поля нет, то используется IP-адрес сервера.
Использование в перенаправлениях порта управляется
директивой port_in_redirect.
Синтаксис: |
server_names_hash_bucket_size
|
---|---|
Умолчание: |
server_names_hash_bucket_size 32|64|128; |
Контекст: |
http
|
Задаёт размер корзины в хэш-таблицах имён серверов.
Значение по умолчанию зависит от размера строки кэша процессора.
Подробнее настройка хэш-таблиц обсуждается в отдельном
документе.
Синтаксис: |
server_names_hash_max_size
|
---|---|
Умолчание: |
server_names_hash_max_size 512; |
Контекст: |
http
|
Задаёт максимальный размер
хэш-таблиц имён серверов.
Подробнее настройка хэш-таблиц обсуждается в отдельном
документе.
Синтаксис: |
server_tokens
|
---|---|
Умолчание: |
server_tokens on; |
Контекст: |
http , server , location
|
Разрешает или запрещает выдавать версию nginx’а на страницах ошибок и
в поле “Server” заголовка ответа.
Если указан параметр build
(1.11.10),
то наряду с версией nginx’а будет также выдаваться
имя сборки.
Дополнительно, как часть
коммерческой подписки,
начиная с версии 1.9.13
подписи на страницах ошибок и
значение поля “Server” заголовка ответа
можно задать явно с помощью строки с переменными.
Пустая строка запрещает выдачу поля “Server”.
Синтаксис: |
subrequest_output_buffer_size
|
---|---|
Умолчание: |
subrequest_output_buffer_size 4k|8k; |
Контекст: |
http , server , location
|
Эта директива появилась в версии 1.13.10.
Задаёт размер
буфера, используемого для
хранения тела ответа подзапроса.
По умолчанию размер одного буфера равен размеру страницы памяти.
В зависимости от платформы это или 4K, или 8K,
однако его можно сделать меньше.
Директива применима только для подзапросов,
тело ответа которых сохраняется в памяти.
Например, подобные подзапросы создаются при помощи
SSI.
Синтаксис: |
tcp_nodelay
|
---|---|
Умолчание: |
tcp_nodelay on; |
Контекст: |
http , server , location
|
Разрешает или запрещает использование параметра TCP_NODELAY
.
Параметр включается при переходе соединения в состояние keep-alive.
Также, он включается на SSL-соединениях,
при небуферизованном проксировании
и при проксировании WebSocket.
Синтаксис: |
tcp_nopush
|
---|---|
Умолчание: |
tcp_nopush off; |
Контекст: |
http , server , location
|
Разрешает или запрещает использование параметра сокета
TCP_NOPUSH
во FreeBSD или
TCP_CORK
в Linux.
Параметр включаются только при использовании sendfile.
Включение параметра позволяет
-
передавать заголовок ответа и начало файла в одном пакете
в Linux и во FreeBSD 4.*; - передавать файл полными пакетами.
Синтаксис: |
try_files try_files
|
---|---|
Умолчание: |
— |
Контекст: |
server , location
|
Проверяет существование файлов в заданном порядке и использует
для обработки запроса первый найденный файл, причём обработка
делается в контексте этого же location’а.
Путь к файлу строится из параметра файл
в соответствии с директивами
root и alias.
С помощью слэша в конце имени можно проверить существование каталога,
например, “$uri/
”.
В случае, если ни один файл не найден, то делается внутреннее
перенаправление на uri
, заданный последним параметром.
Например:
location /images/ { try_files $uri /images/default.gif; } location = /images/default.gif { expires 30s; }
Последний параметр может также указывать на именованный location,
как в примерах ниже.
С версии 0.7.51 последний параметр может также быть кодом
:
location / { try_files $uri $uri/index.html $uri.html =404; }
Пример использования при проксировании Mongrel:
location / { try_files /system/maintenance.html $uri $uri/index.html $uri.html @mongrel; } location @mongrel { proxy_pass http://mongrel; }
Пример использования вместе с Drupal/FastCGI:
location / { try_files $uri $uri/ @drupal; } location ~ .php$ { try_files $uri @drupal; fastcgi_pass ...; fastcgi_param SCRIPT_FILENAME /path/to$fastcgi_script_name; fastcgi_param SCRIPT_NAME $fastcgi_script_name; fastcgi_param QUERY_STRING $args; ... прочие fastcgi_param } location @drupal { fastcgi_pass ...; fastcgi_param SCRIPT_FILENAME /path/to/index.php; fastcgi_param SCRIPT_NAME /index.php; fastcgi_param QUERY_STRING q=$uri&$args; ... прочие fastcgi_param }
В следующем примере директива try_files
location / { try_files $uri $uri/ @drupal; }
аналогична директивам
location / { error_page 404 = @drupal; log_not_found off; }
А здесь
location ~ .php$ { try_files $uri @drupal; fastcgi_pass ...; fastcgi_param SCRIPT_FILENAME /path/to$fastcgi_script_name; ... }
try_files
проверяет существование PHP-файла,
прежде чем передать запрос FastCGI-серверу.
Пример использования вместе с WordPress и Joomla:
location / { try_files $uri $uri/ @wordpress; } location ~ .php$ { try_files $uri @wordpress; fastcgi_pass ...; fastcgi_param SCRIPT_FILENAME /path/to$fastcgi_script_name; ... прочие fastcgi_param } location @wordpress { fastcgi_pass ...; fastcgi_param SCRIPT_FILENAME /path/to/index.php; ... прочие fastcgi_param }
Синтаксис: |
types { ... }
|
---|---|
Умолчание: |
types { text/html html; image/gif gif; image/jpeg jpg; } |
Контекст: |
http , server , location
|
Задаёт соответствие расширений имён файлов и MIME-типов ответов.
Расширения нечувствительны к регистру символов.
Одному MIME-типу может соответствовать несколько расширений, например:
types { application/octet-stream bin exe dll; application/octet-stream deb; application/octet-stream dmg; }
Достаточно полная таблица соответствий входит в дистрибутив nginx
и находится в файле conf/mime.types
.
Для того чтобы для определённого location’а для всех ответов
выдавался MIME-тип “application/octet-stream
”,
можно использовать следующее:
location /download/ { types { } default_type application/octet-stream; }
Синтаксис: |
types_hash_bucket_size
|
---|---|
Умолчание: |
types_hash_bucket_size 64; |
Контекст: |
http , server , location
|
Задаёт размер корзины в хэш-таблицах типов.
Подробнее настройка хэш-таблиц обсуждается в отдельном
документе.
До версии 1.5.13
значение по умолчанию зависело от размера строки кэша процессора.
Синтаксис: |
types_hash_max_size
|
---|---|
Умолчание: |
types_hash_max_size 1024; |
Контекст: |
http , server , location
|
Задаёт максимальный размер
хэш-таблиц типов.
Подробнее настройка хэш-таблиц обсуждается в отдельном
документе.
Синтаксис: |
underscores_in_headers
|
---|---|
Умолчание: |
underscores_in_headers off; |
Контекст: |
http , server
|
Разрешает или запрещает использование символов подчёркивания в
полях заголовка запроса клиента.
Если использование символов подчёркивания запрещено, поля заголовка запроса, в
именах которых есть подчёркивания,
помечаются как недопустимые и подпадают под действие директивы
ignore_invalid_headers.
Если директива указана на уровне server,
то может использоваться значение из сервера по умолчанию.
Подробнее см. в разделе
“Выбор
виртуального сервера”.
Синтаксис: |
variables_hash_bucket_size
|
---|---|
Умолчание: |
variables_hash_bucket_size 64; |
Контекст: |
http
|
Задаёт размер корзины в хэш-таблице переменных.
Подробнее настройка хэш-таблиц обсуждается в отдельном
документе.
Синтаксис: |
variables_hash_max_size
|
---|---|
Умолчание: |
variables_hash_max_size 1024; |
Контекст: |
http
|
Задаёт максимальный размер
хэш-таблицы переменных.
Подробнее настройка хэш-таблиц обсуждается в отдельном
документе.
До версии 1.5.13 по умолчанию использовалось значение 512.
Встроенные переменные
Модуль ngx_http_core_module
поддерживает встроенные
переменные, имена которых совпадают с именами переменных веб-сервера Apache.
Прежде всего, это переменные, представляющие из себя поля заголовка
запроса клиента, такие как $http_user_agent
, $http_cookie
и тому подобное.
Кроме того, есть и другие переменные:
$arg_
имя
-
аргумент
имя
в строке запроса $args
- аргументы в строке запроса
$binary_remote_addr
-
адрес клиента в бинарном виде, длина значения всегда 4 байта
для IPv4-адресов или 16 байт для IPv6-адресов $body_bytes_sent
-
число байт, переданное клиенту, без учёта заголовка ответа;
переменная совместима с параметром “%B
” модуля Apache
mod_log_config
$bytes_sent
- число байт, переданных клиенту (1.3.8, 1.2.5)
$connection
- порядковый номер соединения (1.3.8, 1.2.5)
$connection_requests
- текущее число запросов в соединении (1.3.8, 1.2.5)
$connection_time
- время соединения в секундах с точностью до миллисекунд (1.19.10)
$content_length
- поле “Content-Length” заголовка запроса
$content_type
- поле “Content-Type” заголовка запроса
$cookie_
имя
-
cookie
имя
$document_root
-
значение директивы root или alias
для текущего запроса $document_uri
-
то же, что и
$uri
$host
-
в порядке приоритета:
имя хоста из строки запроса, или
имя хоста из поля “Host” заголовка запроса, или
имя сервера, соответствующего запросу $hostname
- имя хоста
$http_
имя
-
произвольное поле заголовка запроса;
последняя часть имени переменной соответствует имени поля, приведённому
к нижнему регистру, с заменой символов тире на символы подчёркивания $https
-
“
on
”
если соединение работает в режиме SSL,
либо пустая строка $is_args
-
“
?
”, если в строке запроса есть аргументы,
и пустая строка, если их нет $limit_rate
-
установка этой переменной позволяет ограничивать скорость
передачи ответа, см. limit_rate $msec
- текущее время в секундах с точностью до миллисекунд (1.3.9, 1.2.6)
$nginx_version
- версия nginx
$pid
- номер (PID) рабочего процесса
$pipe
-
“
p
” если запрос был pipelined, иначе “.
”
(1.3.12, 1.2.7) $proxy_protocol_addr
-
адрес клиента, полученный из заголовка протокола PROXY (1.5.12)
Протокол PROXY должен быть предварительно включён при помощи установки
параметраproxy_protocol
в директиве listen. $proxy_protocol_port
-
порт клиента, полученный из заголовка протокола PROXY (1.11.0)
Протокол PROXY должен быть предварительно включён при помощи установки
параметраproxy_protocol
в директиве listen. $proxy_protocol_server_addr
-
адрес сервера, полученный из заголовка протокола PROXY (1.17.6)
Протокол PROXY должен быть предварительно включён при помощи установки
параметраproxy_protocol
в директиве listen. $proxy_protocol_server_port
-
порт сервера, полученный из заголовка протокола PROXY (1.17.6)
Протокол PROXY должен быть предварительно включён при помощи установки
параметраproxy_protocol
в директиве listen. $proxy_protocol_tlv_
имя
-
TLV, полученный из заголовка протокола PROXY (1.23.2).
Имя
может быть именем типа TLV или его числовым значением.
В последнем случае значение задаётся в шестнадцатеричном виде
и должно начинаться с0x
:$proxy_protocol_tlv_alpn $proxy_protocol_tlv_0x01
SSL TLV могут также быть доступны как по имени типа TLV,
так и по его числовому значению,
оба должны начинаться сssl_
:$proxy_protocol_tlv_ssl_version $proxy_protocol_tlv_ssl_0x21
Поддерживаются следующие имена типов TLV:
-
alpn
(0x01
) —
протокол более высокого уровня, используемый поверх соединения -
authority
(0x02
) —
значение имени хоста, передаваемое клиентом -
unique_id
(0x05
) —
уникальный идентификатор соединения -
netns
(0x30
) —
имя пространства имён -
ssl
(0x20
) —
структура SSL TLV в бинарном виде
Поддерживаются следующие имена типов SSL TLV:
-
ssl_version
(0x21
) —
версия SSL, используемая в клиентском соединении -
ssl_cn
(0x22
) —
Common Name сертификата -
ssl_cipher
(0x23
) —
имя используемого шифра -
ssl_sig_alg
(0x24
) —
алгоритм, используемый для подписи сертификата -
ssl_key_alg
(0x25
) —
алгоритм публичного ключа
Также поддерживается следующее специальное имя типа SSL TLV:
-
ssl_verify
—
результат проверки клиентского сертификата:
0
, если клиент предоставил сертификат
и он был успешно верифицирован,
либо ненулевое значение
Протокол PROXY должен быть предварительно включён при помощи установки
параметраproxy_protocol
в директиве listen. -
$query_string
-
то же, что и
$args
$realpath_root
-
абсолютный путь, соответствующий
значению директивы root или alias
для текущего запроса,
в котором все символические ссылки преобразованы в реальные пути $remote_addr
- адрес клиента
$remote_port
- порт клиента
$remote_user
- имя пользователя, использованное в Basic аутентификации
$request
- первоначальная строка запроса целиком
$request_body
-
тело запроса
Значение переменной появляется в location’ах, обрабатываемых
директивами
proxy_pass,
fastcgi_pass,
uwsgi_pass
и
scgi_pass,
когда тело было прочитано в
буфер в памяти. $request_body_file
-
имя временного файла, в котором хранится тело запроса
По завершении обработки файл необходимо удалить.
Для того чтобы тело запроса всегда записывалось в файл,
следует включить client_body_in_file_only.
При передаче имени временного файла в проксированном запросе
или в запросе к FastCGI/uwsgi/SCGI-серверу следует запретить передачу самого
тела директивамиproxy_pass_request_body off,
fastcgi_pass_request_body off,
uwsgi_pass_request_body off
илиscgi_pass_request_body off
соответственно. $request_completion
-
“
OK
” если запрос завершился,
либо пустая строка $request_filename
-
путь к файлу для текущего запроса, формируемый из директив
root или alias и URI запроса $request_id
-
уникальный идентификатор запроса,
сформированный из 16 случайных байт, в шестнадцатеричном виде (1.11.0) $request_length
-
длина запроса (включая строку запроса, заголовок и тело запроса)
(1.3.12, 1.2.7) $request_method
-
метод запроса, обычно
“GET
” или “POST
” $request_time
-
время обработки запроса в секундах с точностью до миллисекунд
(1.3.9, 1.2.6);
время, прошедшее с момента чтения первых байт от клиента $request_uri
- первоначальный URI запроса целиком (с аргументами)
$scheme
-
схема запроса, “
http
” или “https
” $sent_http_
имя
-
произвольное поле заголовка ответа;
последняя часть имени переменной соответствует имени поля, приведённому
к нижнему регистру, с заменой символов тире на символы подчёркивания $sent_trailer_
имя
-
произвольное поле, отправленное в конце ответа (1.13.2);
последняя часть имени переменной соответствует имени поля, приведённому
к нижнему регистру, с заменой символов тире на символы подчёркивания $server_addr
-
адрес сервера, принявшего запрос
Получение значения этой переменной обычно требует одного системного вызова.
Чтобы избежать системного вызова, в директивах listen
следует указывать адреса и использовать параметрbind
. $server_name
- имя сервера, принявшего запрос
$server_port
- порт сервера, принявшего запрос
$server_protocol
-
протокол запроса, обычно
“HTTP/1.0
”,
“HTTP/1.1
”
или
“HTTP/2.0” $status
- статус ответа (1.3.2, 1.2.2)
$time_iso8601
- локальное время в формате по стандарту ISO 8601 (1.3.12, 1.2.7)
$time_local
- локальное время в Common Log Format (1.3.12, 1.2.7)
-
$tcpinfo_rtt
,
$tcpinfo_rttvar
,
$tcpinfo_snd_cwnd
,
$tcpinfo_rcv_space
-
информация о клиентском TCP-соединении; доступна на системах,
поддерживающих параметр сокетаTCP_INFO
$uri
-
текущий URI запроса в нормализованном виде
Значение
$uri
может изменяться в процессе обработки запроса,
например, при внутренних перенаправлениях
или при использовании индексных файлов.
Nginx is an open source stable server that powers some of the most high traffic websites in internet today. Among web services, Nginx web server can be successfully deployed as an load-balancer, web reverse proxy or as a POP and IMAP proxy server.
By default, Nginx HTTP server listens for incoming connection and binds on port 80, which represents the standard web port. However, the TLS configuration, which is not enabled by default in Nginx, listens for secure connections on port 443.
In order to make Nginx HTTP server to listen for incoming web connections on other non-standard ports, we need to edit the main configuration file and change or add a new statement to reflect this fact.
In Ubuntu and Debian based system, we need to modify the /etc/nginx/sites-enabled/default file and on RHEL and CentOS based distributions edit /etc/nginx/nginx.conf file.
To begin with, open Nginx configuration file with a text editor, and change the port number as shown in the below excerpt.
# vi /etc/nginx/sites-enabled/default [On Debian/Ubuntu] # vi /etc/nginx/nginx.conf [On CentOS/RHEL]
In this excerpt we’ll configure Nginx HTTP server to listen for incoming connections on port 3200. Search for the line that begins with listen
statement in server directive and change the port from 80 to 3200, as illustrated in the below image.
listen 3200 default_server;
After altering Nginx port statement, you need to restart the web server in order to bind on the new port on Debian based Linux distributions. Verify local network sockets table with netstat or ss command. Port 3200 should be displayed in your server local network table.
# systemctl restart nginx # netstat -tlpn| grep nginx # ss -tlpn| grep nginx
In CentOS or RHEL based Linux distribution you need to install policycoreutils package and add the below rules required by SELinux for Nginx to bind on the new port.
# yum install policycoreutils # semanage port -a -t http_port_t -p tcp 3200 # semanage port -m -t http_port_t -p tcp 3200
Finally restart Nginx HTTP server to apply changes.
# systemctl restart nginx.service
Check network tables listening sockets.
# netstat -tlpn| grep nginx # ss -tlpn| grep nginx
To check if the web server can be accessed form computers in your network, open a browser and navigate to your server IP address or domain name on port 3200. You should see Nginx default web page, as illustrated in the below screenshot.
http://sever.ip:3200
However, if you can’t browse Nginx web page, return to server console and check the firewall rules to allow incoming traffic on port 3200/tcp.
If You Appreciate What We Do Here On TecMint, You Should Consider:
TecMint is the fastest growing and most trusted community site for any kind of Linux Articles, Guides and Books on the web. Millions of people visit TecMint! to search or browse the thousands of published articles available FREELY to all.
If you like what you are reading, please consider buying us a coffee ( or 2 ) as a token of appreciation.
We are thankful for your never ending support.
Nginx, probably the second most popular HTTP server in use today is easy to manage and configure. Nginx is a lightweight and efficient HTTP server but can be served as a proxy server and more.
Sometimes you’ll want Nginx to listen and communicate over not its default port, but a different port instead. when you want to do that, the steps below can be a good starting point.
For example, if you want the Nginx HTTP server to sit behind a proxy server, then the proxy server must be configured to listen on the default port 80. In this case, Nginx must also be configured to listen on a different port than 80, since two services can’t be assigned one port to listen on. there would be contentions.
This tutorial is going to show students and new users how to easily switch the Nginx default port from 80 to something else. like 8082. in this way, other services can use port 80 to communicate.
When you’re ready to make this change, continue below:
Identifying Nginx Port Config File
To change the Nginx default port number, you need to look in a single directory, unlike Apache2. this is Nginx default virtual hosts directory /etc/nginx/sites-available. This directory is where you’ll find individual virtual host configuration files.
Each of the files contains a port for Nginx to listen and communicate over. if you want to change the Nginx port, you’ll do it in each of the virtual host files.
Below is the location to can change the Nginx default port numbers
sudo nano /etc/nginx/sites-available/default
Changing Nginx Port Number
Now that you’ve identified the files you can change the Nginx port number, continue below to begin making those changes. for this post, we’ll change the default port 80 to 8082 and port 443 to 444.
First, run the commands below to open the port.conf file.
sudo nano /etc/nginx/sites-available/default
Then change the Listen line from 80 to 8082
server { listen 8082 default_server; listen [::]:8082 default_server; listen [::]:444 ssl; ssl_certificate /path_to_cert_file; ssl_certificate_key /path_to_cert_key_file; root /var/www/html; index index.php index.html index.htm; server_name _; location / { try_files $uri $uri/ =404; } . .
Restart Nginx
Now that you’ve changed the port number in all the files, run the commands below to restart Nginx.
sudo systemctl restart nginx.service
After that, the Nginx service will begin listening on the port you assigned above.
That’s it! This is how one changes Nginx port numbers.
You may also like the post below: