Как скрыть версию Nginx в заголовке ответа сервера?

Директива server_tokens разрешает или запрещает выдавать версию nginx’а на страницах ошибок и в поле “Server” заголовка ответа.

Для того чтобы отключить вывод версии http-сервера необходимо добавить в контекст http, server или location строку:

server_tokens off;

Было:

root@SERVER:~$ curl -I localhost
HTTP/1.1 200 OK
Server: nginx/1.18.0 (Ubuntu)
Date: Thu, 06 Jun 2024 15:45:36 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Tue, 21 Apr 2020 14:09:01 GMT
Connection: keep-alive
ETag: "1e9efe6d-264"
Accept-Ranges: bytes

Стало:

root@SERVER:~$ curl -I localhost
HTTP/1.1 200 OK
Server: nginx
Date: Thu, 06 Jun 2024 15:45:36 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Tue, 21 Apr 2020 14:09:01 GMT
Connection: keep-alive
ETag: "1e9efe6d-264"
Accept-Ranges: bytes

P.S. чтобы изменения вступили в силу не забудьте перезагрузить Nginx

sudo systemctl restart nginx
ИЛИ
sudo service nginx restart

Как проверить получен ли ответ из кэша Nginx?

В Nginx существует встроенная переменная $upstream_cache_status модуля ngx_http_upstream_module, которая хранит статус доступа к кэшу ответов. Статус может быть одним из

  • “MISS”,
  • “BYPASS”,
  • “EXPIRED”,
  • “STALE”,
  • “UPDATING”,
  • “REVALIDATED” или
  • “HIT”.

В случае правильной работы сервера в ответе из кэша должно находится значение “HIT”, но как это проверить?

Первым делом вам нужно добавить специальный заголовок, который будет в ответе сервера возвращать значение переменной $upstream_cache_status:

Открываем конфигурационный файл Nginx ( /etc/nginx/nginx.conf ) и добавляем строчку, к блоку бэкенда:

add_header FastCGI-Cache $upstream_cache_status;

Например, так:

добавили заголовок add_header FastCGI-Cache $upstream_cache_status;

Проверить заголовки ответа можно в браузере. Если ответ получен из кэша вы непременно увидите статус HIT

статус HIT

Как узнать версию Nginx на сервере и проверить его работу?

Для начало попробуйте воспользоваться в консоли командой

nginx -v

или

sudo nginx -v

Ответ в консоли:

nginx version: nginx/1.26.0

Для получения расширенной информации укажите заглавную букву «V» (вывод версии nginx, версии компилятора и параметров конфигурации сборки)

sudo nginx -V

Ответ в консоли:

nginx version: nginx/1.26.0
built by gcc 10.2.1 20210110 (Debian 10.2.1-6) 
built with OpenSSL 1.1.1n  15 Mar 2022 (running with OpenSSL 1.1.1w  11 Sep 2023)
TLS SNI support enabled
configure arguments: --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp ...

Проверка работы HTTP-сервера Nginx

Для просмотра списка всех запущенных процессов nginx может быть использована утилита ps:

ps -ax | grep nginx

Ответ в консоли:

    699 ?        Ss     0:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
 149300 ?        S      2:26 nginx: worker process
 149301 ?        S      0:00 nginx: worker process
 149302 ?        S      0:00 nginx: worker process
 149303 ?        S      0:01 nginx: worker process
 149304 ?        S      0:00 nginx: cache manager process
 158423 pts/0    S+     0:00 grep nginx

Текущий статус работы мы также можем посмотреть при помощи команды

sudo systemctl status nginx

Если всё хорошо и служба работает, то вы непременно должны увидеть подобный сигнал

nginx запущен

ну и напоследок , чтобы убедиться в работе нашего Nginx можно в консоли отправить следующий запрос

 curl localhost

Если всё правильно работает, то по идее вы должны получить в ответ страницу приветствия в виде HTML:

ответ в виде HTML

Как сделать постоянное перенаправление с кодом 301 на веб-сервере Nginx?

Задача: Изменился URL у страницы и требуется сделать постоянное перенаправление на новую страницу.

Чтобы не мудрить, предлагаю для этой цели использовать простую директиву return.

Обратимся к документации и взглянем на информацию об этой директиве, которую мы будем использовать для постоянного перенаправления.

Syntax: return code [text]; return code URL; return URL; Context: server, location, if

https://nginx.org/en/docs/http/ngx_http_rewrite_module.html#return

Нам подойдёт для решения поставленной задачи контекст location и синтаксис return code URL;

Открываем конфигурационный файл HTTP-сервера Nginx и добавляем в него

#
# Redirect
#
location /old-page/ {
	return 301 /new-page/;
}

/old-page/ будет перенаправлять и без последнего слеша. Если требуется задать строгое сравнение, то с помощью модификатора “=” можно задать точное совпадение URI

#
# Redirect с точным соответствием символов в URI
#
location = /old-page {
	return 301 /new-page-2/;
}

Если требуется перенаправление на другой домен, то можно сделать перенаправление таким образом:

#
# Redirect
#
location /old-page/ {
	return 301 $scheme://new-site.ru/about;
}

А вот простой пример постоянного перенаправления (со статусом 301) всех посетителей на новое доменное имя, но только уже в контексте server

server {
    listen 80;
    listen 443 ssl;
    server_name old-site.ru;
    return 301 $scheme://new-site.ru$request_uri;
}

Важно понимать, что в указании $request_uri есть смысл только тогда, когда у вас на сайте в адресах после домена происходит полное соответствие, то есть old-site.ru/contact == new-site.ru/contact