Безопасность Nginx · 6 min read · Jan 24, 2026
Советы и хитрости для защиты вашего веб-сервера Nginx

Nginx — это сервер с открытым исходным кодом, легковесный, высокопроизводительный и самый быстрорастущий веб-сервер в мире. Nginx работает на операционных системах Linux, Windows, Mac OS и Solaris. NGINX продолжает набирать популярность, что означает, что все больше и больше развертываний NGINX необходимо защищать.
В этом руководстве мы объясним некоторые популярные советы и хитрости по безопасности сервера Nginx.
Требования
- Сервер с установленным Ubuntu 18.04 или Debian 9.
- Установлен пароль root на вашем сервере.
Установка Nginx
Сначала вам нужно установить Nginx на вашу систему. Вы можете установить его, выполнив следующую команду:
apt-get install nginx -yПосле установки Nginx вы можете проверить его статус с помощью следующей команды:
systemctl status nginxВы должны увидеть следующий вывод:
? nginx.service - Высокопроизводительный веб-сервер и сервер обратного прокси
Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
Active: active (running) since Sun 2019-03-10 02:43:14 UTC; 4min 40s ago
Docs: man:nginx(8)
Process: 2271 ExecStop=/sbin/start-stop-daemon --quiet --stop --retry QUIT/5 --pidfile /run/nginx.pid (code=exited, status=0/SUCCESS)
Process: 2281 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
Process: 2274 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
Main PID: 2285 (nginx)
Tasks: 2 (limit: 1111)
CGroup: /system.slice/nginx.service
??2285 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
??2290 nginx: worker process
Mar 10 02:43:14 ubuntu1804 systemd[1]: Starting Высокопроизводительный веб-сервер и сервер обратного прокси...
Mar 10 02:43:14 ubuntu1804 systemd[1]: nginx.service: Не удалось разобрать PID из файла /run/nginx.pid: Неверный аргумент
Mar 10 02:43:14 ubuntu1804 systemd[1]: Started Высокопроизводительный веб-сервер и сервер обратного прокси.
Обновление Nginx
Вам нужно будет обновить ваш веб-сервер Nginx, так как добавляются многие улучшения производительности, новые функции и исправления безопасности. Большинство современных дистрибутивов Linux не будут поставляться с последней версией nginx в своих списках пакетов по умолчанию. Поэтому вам нужно будет обновить до последней версии nginx через менеджер пакетов. Вы можете обновить ваш веб-сервер Nginx с помощью следующей команды:
apt-get update -y
apt-get install nginx --reinstall -yПредотвращение раскрытия информации
Сначала вам нужно предотвратить раскрытие Nginx информации о его версии.
По умолчанию Nginx показывает свое имя и версию в HTTP-заголовках.
Вы можете проверить это с помощью следующей команды:
curl -I http://localhostВы должны увидеть следующий вывод:
HTTP/1.1 200 OK
Server: nginx/1.14.0 (Ubuntu)
Date: Sat, 09 Mar 2019 15:28:01 GMT
Content-Type: text/html
Content-Length: 10918
Last-Modified: Fri, 01 Feb 2019 16:05:17 GMT
Connection: keep-alive
ETag: "5c546e3d-2aa6"
Accept-Ranges: bytes
В приведенном выше выводе вы должны увидеть версию Nginx и операционной системы.
Вы можете скрыть эту информацию, отредактировав файл /etc/nginx/nginx.conf:
nano /etc/nginx/nginx.confДобавьте строку server_tokens off внутри части конфигурации http:
http {
##
# Основные настройки
##
server_tokens off;
Сохраните и закройте файл, когда закончите. Затем перезапустите веб-сервер Nginx, чтобы применить изменения:
systemctl restart nginxТеперь снова выполните команду curl:
curl -I http://localhostВы должны увидеть следующий вывод:
HTTP/1.1 200 OK
Server: nginx
Date: Sat, 09 Mar 2019 15:33:31 GMT
Content-Type: text/html
Content-Length: 10918
Last-Modified: Fri, 01 Feb 2019 16:05:17 GMT
Connection: keep-alive
ETag: "5c546e3d-2aa6"
Accept-Ranges: bytes
Ограничение доступа по IP
Nginx поставляется с простым модулем под названием ngx_http_access_module, который позволяет или запрещает доступ с определенного IP-адреса.
Если вы хотите разрешить доступ Nginx с 172.16.0.0/16 и запретить с других подсетей, откройте файл /etc/nginx/sites-enabled/default:
nano /etc/nginx/sites-enabled/defaultВнесите следующие изменения внутри блока сервера:
server {
listen 80 default_server;
listen [::]:80 default_server;
allow 172.16.0.0/16;
deny all;
Сохраните и закройте файл, когда закончите. Затем перезапустите Nginx, чтобы применить эти изменения:
systemctl restart nginxТеперь попробуйте получить доступ к вашему серверу Nginx с другого диапазона IP, например 192.168.0.102.
Затем проверьте журнал Nginx с помощью следующей команды:
tail -f /var/log/nginx/error.logВы должны получить сообщение о запрете доступа в следующем выводе:
2019/03/09 16:13:01 [error] 11589#11589: *1 доступ запрещен по правилу, клиент: 192.168.0.102, сервер: _, запрос: "GET /test/ HTTP/1.1", хост: "172.16.0.122"
Защита Nginx с помощью TLS
TLS (Transport Layer Security) является преемником SSL (Secure Socket Layer). Он обеспечивает более надежный и эффективный HTTPS и содержит больше улучшений, таких как Forward Secrecy, совместимость с современными шифрами OpenSSL и HSTS. Этот учебник показывает, как включить самоподписанный SSL-сертификат в Nginx. Если вы хотите использовать сертификат Let’s Encrypt, посмотрите здесь: https://www.howtoforge.com/tutorial/nginx-with-letsencrypt-ciphersuite/
Сначала создайте каталог для SSL с помощью следующей команды:
mkdir /etc/nginx/ssl/Затем сгенерируйте ключ и сертификат с помощью следующей команды:
cd /etc/nginx/ssl/Сначала сгенерируйте ключ с помощью следующей команды:
openssl genrsa -aes256 -out nginx.key 1024Вы должны увидеть следующий вывод:
Generating RSA private key, 1024 bit long modulus
...++++++
.............................++++++
e is 65537 (0x010001)
Enter pass phrase for nginx.key:
Verifying - Enter pass phrase for nginx.key:
Затем создайте csr с помощью следующей команды:
openssl req -new -key nginx.key -out nginx.csrУкажите всю информацию, как показано ниже:
Generating RSA private key, 1024 bit long modulus
...++++++
.............................++++++
e is 65537 (0x010001)
Enter pass phrase for nginx.key:
Verifying - Enter pass phrase for nginx.key:
root@ubuntu1804:~# openssl req -new -key nginx.key -out nginx.csr
Enter pass phrase for nginx.key:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:IN
State or Province Name (full name) [Some-State]:Gujarat
Locality Name (eg, city) []:Junagadh
Organization Name (eg, company) [Internet Widgits Pty Ltd]:IT
Organizational Unit Name (eg, section) []:IT
Common Name (e.g. server FQDN or YOUR name) []:HITESH
Email Address []:[email protected]
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:admin
An optional company name []:IT
Затем подпишите сертификат с помощью следующей команды:
openssl x509 -req -days 365 -in nginx.csr -signkey nginx.key -out nginx.crtВы должны увидеть следующий вывод:
Signature ok
subject=C = IN, ST = Gujarat, L = Junagadh, O = IT, OU = IT, CN = HITESH, emailAddress = [email protected]
Getting Private key
Enter pass phrase for nginx.key:
Затем откройте файл виртуального хоста по умолчанию Nginx и определите сертификат:
nano /etc/nginx/sites-enabled/defaultВнесите следующие изменения:
server {
listen 192.168.0.100:443 ssl;
root /var/www/html;
index index.html index.htm index.nginx-debian.html;
server_name _;
ssl_certificate /etc/nginx/ssl/nginx.crt;
ssl_certificate_key /etc/nginx/ssl/nginx.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
Сохраните и закройте файл, когда закончите. Затем перезапустите сервер Nginx, чтобы применить эти изменения:
systemctl restart nginxЗащита директории паролем
При настройке веб-сервера Nginx вы также можете защитить конкретную директорию паролем. Вы можете сделать это с помощью файла .htpasswd.
Для этого создайте файл passwd и добавьте в него пользователя с помощью следующей команды:
mkdir /etc/nginx/.htpasswd
htpasswd -c /etc/nginx/.htpasswd/passwd adminВы должны увидеть следующий вывод:
New password:
Re-type new password:
Adding password for user admin
Затем создайте тестовую директорию внутри корня веб-сервера Nginx с помощью следующей команды:
mkdir /var/www/html/testЗатем передайте права собственности пользователю www-data с помощью следующей команды:
chown -R www-data:www-data /var/www/html/testЗатем откройте файл виртуального хоста по умолчанию Nginx с помощью следующей команды:
nano /etc/nginx/sites-enabled/defaultЗатем защитите тестовую директорию, как показано ниже:
location /test {
auth_basic "Restricted";
auth_basic_user_file /etc/nginx/.htpasswd/passwd;
Сохраните и закройте файл, когда закончите. Затем перезапустите службу Nginx, чтобы применить эти изменения:
systemctl restart nginxТеперь откройте ваш веб-браузер и введите URL http://your-server-ip/test. Вам будет предложено ввести имя пользователя и пароль для доступа к тестовой директории, как показано на следующей странице:

Поздравляем! вы успешно защитили ваш сервер Nginx на сервере Ubuntu 18.04. Я надеюсь, это поможет вам защитить ваше приложение, размещенное на веб-сервере Nginx. Не стесняйтесь задавать мне вопросы, если у вас есть какие-либо. Для получения дополнительной информации вы можете обратиться к документации по безопасности Nginx.
Get new posts in your inbox
No spam. Unsubscribe anytime.