Я нанял VPS, чтобы поиграть с некоторыми личными проектами. Для начала я пытаюсь настроить его для размещения REST API с использованием Node.js, так как я когда-либо использовал для этого только Spring Boot.
Я реализовал решения, адаптировав следующие руководства:
https://www.robinwieruch.de/node-express-server-rest-api (большая часть кода API выглядит так)
https://itnext.io/building-restful-api-with-node-js-express-js-and-postgresql-the-right-way-b2e718ad1c66 (но я постепенно перехожу на использование стандартов отсюда)
Для фактического развертывания я решил связать API с Babel и развертываю его с PM2.
https://www.nginx.com/blog/deploying-nginx-plus-as-an-api-gateway-part-1/ (но не плюс)
(Все эти ссылки доступны через http://web.archive.org/ так что они никуда не денутся в ближайшее время)
Я создал еще один проект Node.js, используя аксиомы для тестирования запросов REST. Запуск на том же VPS работает, но мне пришлось изменить код API для привязки к локальный хост
. Раньше, когда адрес привязки не был указан, он привязывался к IPv6. локальный хост
(если я правильно понял) и, поскольку мой домен не работает с IPv6, я буду придерживаться IPv4.
На стороне NGINX я внес больше всего изменений, так как сейчас у меня только 1 API, и я не буду использовать балансировку нагрузки. Кроме того, я изменил политику именования. я буду использовать example.com/app_or_project_name/api_or_web_or_other_kind_of_interface/project_specific_routes
.
Вот как выглядит моя установка NGINX. Я анонимизировал его и изменил, чтобы использовать то же имя, что и в примере с NGINX:
api_backends.conf
вышестоящий склад {
зона API 64k;
сервер 127.0.0.1:some_port_number;
}
Это хост REST API и номер порта.
api_conf.d/warehouse_api.conf
# API склада
#
расположение /склад/API/ {
# Конфигурация политики здесь (аутентификация, ограничение скорости, ведение журнала и т. д.)
#
access_log /var/log/nginx/warehouse_api.log основной;
auth_request /_validate_apikey;
# URI-маршрутизация
#
proxy_pass http://склад;
вернуть 404; # Универсальный
}
api_gateway.conf
включить api_backends.conf;
включить api_keys.conf;
сервер {
access_log /var/log/nginx/api_access.log основной; # Каждый API также может вести журнал в отдельный файл
слушать 443 ssl;
имя_сервера мой-домен.net;
# Конфигурация TLS
ssl_certificate /etc/letsencrypt/live/my-domain.net/fullchain.pem; # под управлением Certbot
ssl_certificate_key /etc/letsencrypt/live/my-domain.net/privkey.pem; # под управлением Certbot
ssl_session_cache общий: SSL: 10 м;
ssl_session_timeout 5 м;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_protocols TLSv1.2 TLSv1.3;
# определения API, по одному на файл
включить api_conf.d/*.conf;
# ответы об ошибках
# error_page 404 = @400; # Недопустимые пути рассматриваются как неверные запросы
proxy_intercept_errors включен; # Не отправлять ошибки бэкенда клиенту
включить api_json_errors.conf; # Удобные для клиента API ответы на ошибки JSON
приложение по умолчанию_тип/json; # Если нет типа содержимого, то предположим, что это JSON
# Проверка ключа API
местоположение = /_validate_apikey {
внутренний;
если ($ http_apikey = "") {
вернуть 401; # Неавторизованный
}
если ($api_client_name = "") {
вернуть 403; # Запрещенный
}
вернуть 204; # ОК (нет содержимого)
}
}
я мог бы установить proxy_intercept_errors
к выключенный
как только он работает. Мне нужно будет сделать несколько тестов, чтобы увидеть, что изменится в ответах.
api_json_errors.conf
То же, что пример.
default.conf
сервер {
имя_сервера www.мой-домен.net;
#access_log /var/log/nginx/host.access.log main;
место расположения / {
корень /usr/share/nginx/html;
индекс index.html index.htm;
}
#error_page 404 /404.html;
# перенаправить страницы ошибок сервера на статическую страницу /50x.html
#
error_page 500 502 503 504 /50x.html;
местоположение = /50x.html {
корень /usr/share/nginx/html;
}
# проксировать PHP-скрипты для Apache, прослушивающего 127.0.0.1:80
#
#местоположение ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# передать PHP-скрипты серверу FastCGI, прослушивающему 127.0.0.1:9000
#
#местоположение ~ \.php$ {
# корень html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# включить fastcgi_params;
#}
# запретить доступ к файлам .htaccess, если корневой каталог Apache
# совпадает с nginx
#
#местоположение ~ /\.ht {
# запретить все;
#}
слушать 443 ssl; # под управлением Certbot
ssl_certificate /etc/letsencrypt/live/my-domain.net/fullchain.pem; # под управлением Certbot
ssl_certificate_key /etc/letsencrypt/live/my-domain.net/privkey.pem; # под управлением Certbot
включить /etc/letsencrypt/options-ssl-nginx.conf; # под управлением Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # под управлением Certbot
}
сервер {
если ($ host = www.my-domain.net) {
вернуть 301 https://$host$request_uri;
} # управляется Certbot
если ($ host = my-domain.net) {
вернуть 301 https://$host$request_uri;
} # управляется Certbot
слушать 80;
имя_сервера мой-домен.net www.мой-домен.net;
вернуть 404; # под управлением Certbot
}
Мне пришлось внести некоторые изменения здесь, потому что была комбинация адреса и порта, у которой был дубликат. сервер
конфигурация.
nginx.conf
пользователь nginx;
рабочие_процессы авто;
error_log /var/log/nginx/error.log информация;
pid /var/run/nginx.pid;
load_module /etc/nginx/modules/ngx_http_js_module.so;
События {
worker_connections 1024;
}
http {
включить /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$статус $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
журнал_доступа /var/log/nginx/access.log основной;
отправить файл включен;
#tcp_npush включен;
keepalive_timeout 65;
включить /etc/nginx/api_gateway.conf; # Все конфигурации шлюза API
включить /etc/nginx/conf.d/*.conf; # Регулярный веб-трафик
}
Когда я запускаю тот же тестовый проект вне VPS, я получаю следующий результат:
{
сообщение: «Запрос не выполнен с кодом состояния 404»,
имя: 'Ошибка',
описание: не определено,
номер: не определено,
имя файла: не определено,
номер строки: не определено,
номер_столбца: не определено,
куча: '...',
конфигурация: {
URL-адрес: «https://my-domain.net/warehouse/api/messages»,
метод: «получить»,
заголовки: {
Принять: 'приложение/json, текст/обычный, */*',
'Доступ-Контроль-Разрешить-Происхождение': '*',
«Агент пользователя»: «axios/0.21.1»
},
transformRequest: [[Функция: transformRequest]],
TransformResponse: [[Функция: transformResponse]],
тайм-аут: 0,
адаптер: [Функция: httpAdapter],
xsrfCookieName: 'XSRF-TOKEN',
xsrfHeaderName: «X-XSRF-TOKEN»,
maxContentLength: -1,
maxBodyLength: -1,
валидатестатус: [Функция: валидатестатус],
апикей: '...',
данные: не определены
},
код: не определен
}
Одна вещь, которую мне удалось выяснить, это то, что ошибка 404 возвращается склад_api.conf
потому что, если я изменюсь вернуть 404;
на другой код, это код, который я получу.
Я включил отладку в NGINX, но не смог понять вывод, даже после небольшого поиска:
22.07.2021 11:54:17 [отладка] nginx_pid#nginx_pid: *757 с использованием местоположения: @404 "/warehouse/api/messages?"
22.07.2021, 11:54:31 [отладка] nginx_pid#nginx_pid: *758 http cl:-1 max:1048576
22.07.2021 11:54:31 [отладка] nginx_pid#nginx_pid: *758 фаза перезаписи: 3
22.07.2021, 11:54:31 [отладка] nginx_pid#nginx_pid: *758 HTTP-запрос финализации: 404, «/warehouse/api/messages?» а:1, в:1
22.07.2021, 11:54:31 [отладка] nginx_pid#nginx_pid: *758 специальный ответ http: 404, "/warehouse/api/messages?"
22.07.2021 11:54:31 [отладка] nginx_pid#nginx_pid: *758 тестовое местоположение: "@400"
22.07.2021 11:54:31 [отладка] nginx_pid#nginx_pid: *758 тестовое местоположение: "@401"
22.07.2021 11:54:31 [отладка] nginx_pid#nginx_pid: *758 тестовое местоположение: "@403"
22.07.2021 11:54:31 [отладка] nginx_pid#nginx_pid: *758 тестовое местоположение: "@404"
22.07.2021 11:54:31 [отладка] nginx_pid#nginx_pid: *758 с использованием местоположения: @404 "/warehouse/api/messages?"
Я попробовал несколько разных подходов к поиску обо всем этом, но не смог найти никаких зацепок.
Итак, что происходит, что не так и как мне это исправить?
Заранее спасибо.
Обновление 2021-08-04
После ответа @jose-fernando-lopez-fernandez я изменил api_conf.d/warehouse_api.conf
к следующему:
# API склада
#
расположение /склад/API/ {
# Конфигурация политики здесь (аутентификация, ограничение скорости, ведение журнала и т. д.)
#
access_log /var/log/nginx/warehouse_api.log основной;
auth_request /_validate_apikey;
# URI-маршрутизация
#
расположение /склад/API/ {
proxy_pass http://склад;
}
вернуть 404; # Универсальный
}
чтобы соответствовать приведенным ниже примерам. Я проверил еще раз и вместо этого получил ошибку 401. Я проверил, и я проходил апикей
неправильно.
Я исправил это, снова проверил и снова получил 404. Но теперь я получаю намного больше отдачи от nginx-отладка
.
Я сделал это анонимно. я заменил апикей
другим, который я сгенерировал и ни для чего не буду использовать.
я тоже заменил posix_memalign
, http очистка добавить
, бесплатно
, автор сети в
и маллок
строками одинаковой длины со случайными байтами.Я не знаю, должно быть это анонимно или нет. Если это необходимо для решения этого вопроса, пожалуйста, спросите, и я добавлю их обратно по мере необходимости.
Вот оно:
04.08.2021 17:43:08 [отладка] nginx_pid#nginx_pid: *1 http cl:-1 max:1048576
04.08.2021 17:43:08 [отладка] nginx_pid#nginx_pid: *1 фаза перезаписи: 3
04.08.2021, 17:43:08 [отладка] nginx_pid#nginx_pid: *1 фаза перезаписи поста: 4
04.08.2021 17:43:08 [отладка] nginx_pid#nginx_pid: *1 общая фаза: 5
04.08.2021 17:43:08 [отладка] nginx_pid#nginx_pid: *1 общая фаза: 6
04.08.2021 17:43:08 [отладка] nginx_pid#nginx_pid: *1 общая фаза: 7
04.08.2021 17:43:08 [отладка] nginx_pid#nginx_pid: *1 фаза доступа: 8
04.08.2021 17:43:08 [отладка] nginx_pid#nginx_pid: *1 фаза доступа: 9
04.08.2021 17:43:08 [отладка] nginx_pid#nginx_pid: *1 фаза доступа: 10
04.08.2021 17:43:08 [отладка] nginx_pid#nginx_pid: *1 обработчик запроса авторизации
04.08.2021 17:43:08 [отладка] nginx_pid#nginx_pid: *1 подзапрос http "/_validate_apikey?"
04.08.2021 17:43:08 [отладка] nginx_pid#nginx_pid: *1 http отправил запрос: "/_validate_apikey?"
04.08.2021 17:43:08 [отладка] nginx_pid#nginx_pid: *1 фаза перезаписи: 1
04.08.2021 17:43:08 [отладка] nginx_pid#nginx_pid: *1 тестовое местоположение: "/warehouse/api/"
04.08.2021 17:43:08 [отладка] nginx_pid#nginx_pid: *1 тестовое местоположение: "/_validate_apikey"
04.08.2021 17:43:08 [отладка] nginx_pid#nginx_pid: *1 с использованием конфигурации "=/_validate_apikey"
04.08.2021 17:43:08 [отладка] nginx_pid#nginx_pid: *1 http cl:-1 max:1048576
04.08.2021 17:43:08 [отладка] nginx_pid#nginx_pid: *1 фаза перезаписи: 3
04.08.2021 17:43:08 [отладка] nginx_pid#nginx_pid: *1 переменная HTTP-скрипта
04.08.2021 17:43:08 [отладка] nginx_pid#nginx_pid: *1 http-скрипт var: "o6ZlKSX24MCY/uPwCRl80WAS"
04.08.2021 17:43:08 [отладка] nginx_pid#nginx_pid: *1 значение http-скрипта: ""
04.08.2021 17:43:08 [отладка] nginx_pid#nginx_pid: *1 HTTP-скрипт равен
04.08.2021 17:43:08 [отладка] nginx_pid#nginx_pid: *1 эквивалент http-скрипта: нет
04.08.2021, 17:43:08 [отладка] nginx_pid#nginx_pid: *1 http-скрипт, если
04.08.2021 17:43:08 [отладка] nginx_pid#nginx_pid: *1 http-скрипт, если: false
04.08.2021 17:43:08 [отладка] nginx_pid#nginx_pid: *1 переменная HTTP-скрипта
04.08.2021 17:43:08 [отладка] nginx_pid#nginx_pid: *1 карта http запущена
04.08.2021 17:43:08 [отладка] nginx_pid#nginx_pid: *1 http-скрипт var: "o6ZlKSX24MCY/uPwCRl80WAS"
04.08.2021 17:43:08 [отладка] nginx_pid#nginx_pid: *1 карта http: "o6ZlKSX24MCY/uPwCRl80WAS" "client_one"
04.08.2021 17:43:08 [отладка] nginx_pid#nginx_pid: *1 HTTP-скрипт var: "client_one"
04.08.2021 17:43:08 [отладка] nginx_pid#nginx_pid: *1 значение http-скрипта: ""
04.08.2021 17:43:08 [отладка] nginx_pid#nginx_pid: *1 HTTP-скрипт равен
04.08.2021 17:43:08 [отладка] nginx_pid#nginx_pid: *1 эквивалент http-скрипта: нет
04.08.2021, 17:43:08 [отладка] nginx_pid#nginx_pid: *1 http-скрипт, если
04.08.2021 17:43:08 [отладка] nginx_pid#nginx_pid: *1 http-скрипт, если: false
04.08.2021, 17:43:08 [отладка] nginx_pid#nginx_pid: *1 HTTP-запрос финализации: 0, "/_validate_apikey?" а:1, в:2
04.08.2021 17:43:08 [отладка] nginx_pid#nginx_pid: *1 запрос авторизации выполнен s:204
04.08.2021, 17:43:08 [отладка] nginx_pid#nginx_pid: *1 запрос HTTP пробуждения родителя: "/warehouse/api/messages?"
04.08.2021 17:43:08 [отладка] nginx_pid#nginx_pid: *1 http отправил запрос: "/warehouse/api/messages?"
04.08.2021 17:43:08 [отладка] nginx_pid#nginx_pid: *1 фаза доступа: 10
04.08.2021 17:43:08 [отладка] nginx_pid#nginx_pid: *1 обработчик запроса авторизации
04.08.2021 17:43:08 [отладка] nginx_pid#nginx_pid: *1 переменные набора запросов авторизации
04.08.2021 17:43:08 [отладка] nginx_pid#nginx_pid: *1 этап доступа к публикации: 11
04.08.2021 17:43:08 [отладка] nginx_pid#nginx_pid: *1 общая фаза: 12
04.08.2021 17:43:08 [отладка] nginx_pid#nginx_pid: *1 общая фаза: 13
04.08.2021 17:43:08 [отладка] nginx_pid#nginx_pid: *1 posix_memalign: 218512C89A2ED401:4096 @16
04.08.2021, 17:43:08 [отладка] nginx_pid#nginx_pid: *1 http init upstream, клиентский таймер: 0
04.08.2021 17:43:08 [отладка] nginx_pid#nginx_pid: *1 событие добавления epoll: fd:3 op:3 ev:80002005
04.08.2021 17:43:08 [отладка] nginx_pid#nginx_pid: *1 копия http-скрипта: «Хост»
04.08.2021 17:43:08 [отладка] nginx_pid#nginx_pid: *1 http-скрипт var: "склад"
04.08.2021 17:43:08 [отладка] nginx_pid#nginx_pid: *1 копия http-скрипта: «Соединение»
04.08.2021 17:43:08 [отладка] nginx_pid#nginx_pid: *1 копия http-скрипта: «закрыть»
04.08.2021 17:43:08 [отладка] nginx_pid#nginx_pid: *1 копия http-скрипта: ""
04.08.2021 17:43:08 [отладка] nginx_pid#nginx_pid: *1 копия http-скрипта: ""
04.08.2021, 17:43:08 [отладка] nginx_pid#nginx_pid: *1 заголовок http-прокси: «Принять: приложение/json, текст/обычный, */*»
04.08.2021 17:43:08 [отладка] nginx_pid#nginx_pid: *1 заголовок HTTP-прокси: «Access-Control-Allow-Origin: *»
04.08.2021 17:43:08 [отладка] nginx_pid#nginx_pid: *1 заголовок HTTP-прокси: «apikey: o6ZlKSX24MCY/uPwCRl80WAS»
04.08.2021 17:43:08 [отладка] nginx_pid#nginx_pid: *1 заголовок HTTP-прокси: «User-Agent: axios/0.21.1»
04.08.2021 17:43:08 [отладка] nginx_pid#nginx_pid: *1 заголовок http-прокси:
"ПОЛУЧИТЬ/склад/API/сообщения HTTP/1.0
Хост: склад
Подключение: близко
Принять: приложение/json, текст/обычный, */*
Доступ-Контроль-Разрешить-Происхождение: *
ключ: o6ZlKSX24MCY/uPwCRl80WAS
Агент пользователя: axios/0.21.1
"
04.08.2021 17:43:08 [отладка] nginx_pid#nginx_pid: *1 очистка http добавить: 90C9DA232086B6FA
04.08.2021, 17:43:08 [отладка] nginx_pid#nginx_pid: *1 получить одноранговый узел rr, попробовать: 1
04.08.2021 17:43:08 [отладка] nginx_pid#nginx_pid: *1 потоковый сокет 15
04.08.2021 17:43:08 [отладка] nginx_pid#nginx_pid: *1 epoll добавить соединение: fd:15 ev:80002005
04.08.2021 17:43:08 [отладка] nginx_pid#nginx_pid: *1 подключиться к 127.0.0.1:some_port_number, fd:15 #2
04.08.2021 17:43:08 [отладка] nginx_pid#nginx_pid: *1 HTTP восходящее соединение: -2
04.08.2021 17:43:08 [отладка] nginx_pid#nginx_pid: *1 posix_memalign: A9E50626EC2A1D36:128 @16
04.08.2021 17:43:08 [отладка] nginx_pid#nginx_pid: *1 добавление таймера событий: 15: 60000:878601635
04.08.2021, 17:43:08 [отладка] nginx_pid#nginx_pid: *1 HTTP-запрос финализации: -4, "/warehouse/api/messages?" а:1, в:2
04.08.2021 17:43:08 [отладка] nginx_pid#nginx_pid: *1 количество HTTP-запросов: 2 blk: 0
04.08.2021 17:43:08 [отладка] nginx_pid#nginx_pid: *1 HTTP-запрос на запуск: "/warehouse/api/messages?"
04.08.2021, 17:43:08 [отладка] nginx_pid#nginx_pid: *1 http upstream check client, write event:1, "/warehouse/api/messages"
04.08.2021, 17:43:08 [отладка] nginx_pid#nginx_pid: *1 http восходящий запрос: "/warehouse/api/messages?"
04.08.2021 17:43:08 [отладка] nginx_pid#nginx_pid: *1 обработчик HTTP-запроса на отправку вверх по течению
04.08.2021, 17:43:08 [отладка] nginx_pid#nginx_pid: *1 HTTP-запрос на отправку вверх по течению
04.08.2021, 17:43:08 [отладка] nginx_pid#nginx_pid: *1 тело запроса отправки исходящего потока http
04.08.2021 17:43:08 [отладка] nginx_pid#nginx_pid: *1 цепочка записи buf fl:1 s:225
04.08.2021 17:43:08 [отладка] nginx_pid#nginx_pid: *1 цепной писатель в: 4C4F626384F523C9
04.08.2021, 17:43:08 [отладка] nginx_pid#nginx_pid: *1 writev: 225 из 225
04.08.2021 17:43:08 [отладка] nginx_pid#nginx_pid: *1 выход цепи записи: 0000000000000000
04.08.2021 17:43:08 [отладка] nginx_pid#nginx_pid: *1 таймер событий del: 15: 878601635
04.08.2021 17:43:08 [отладка] nginx_pid#nginx_pid: *1 добавление таймера событий: 15: 60000:878601636
04.08.2021, 17:43:08 [отладка] nginx_pid#nginx_pid: *1 http восходящий запрос: "/warehouse/api/messages?"
04.08.2021 17:43:08 [отладка] nginx_pid#nginx_pid: *1 заголовок восходящего процесса http
04.08.2021 17:43:08 [отладка] nginx_pid#nginx_pid: *1 malloc: 1D36E73206B5EE11:4096
04.08.2021, 17:43:08 [отладка] nginx_pid#nginx_pid: *1 recv: eof:1, avail:-1
04.08.2021, 17:43:08 [отладка] nginx_pid#nginx_pid: *1 recv: fd:15 444 из 4096
04.08.2021 17:43:08 [отладка] nginx_pid#nginx_pid: *1 статус http-прокси 404 «404 не найден»
04.08.2021 17:43:08 [отладка] nginx_pid#nginx_pid: *1 заголовок http-прокси: «X-Powered-By: Express»
04.08.2021 17:43:08 [отладка] nginx_pid#nginx_pid: *1 заголовок HTTP-прокси: «Access-Control-Allow-Origin: *»
04.08.2021 17:43:08 [отладка] nginx_pid#nginx_pid: *1 заголовок http-прокси: «Content-Security-Policy: default-src 'none'"
04.08.2021 17:43:08 [отладка] nginx_pid#nginx_pid: *1 заголовок http-прокси: «X-Content-Type-Options: nosniff»
04.08.2021, 17:43:08 [отладка] nginx_pid#nginx_pid: *1 заголовок http-прокси: «Content-Type: text/html; charset=utf-8»
04.08.2021 17:43:08 [отладка] nginx_pid#nginx_pid: *1 заголовок HTTP-прокси: «Длина содержимого: 168»
04.08.2021 17:43:08 [отладка] nginx_pid#nginx_pid: *1 заголовок http-прокси: «Дата: среда, 04 августа 2021 г., 17:43:08 по Гринвичу»
04.08.2021 17:43:08 [отладка] nginx_pid#nginx_pid: *1 заголовок http-прокси: «Соединение: закрыть»
04.08.2021 17:43:08 [отладка] nginx_pid#nginx_pid: *1 заголовок HTTP-прокси готов
04.08.2021, 17:43:08 [отладка] nginx_pid#nginx_pid: *1 завершить запрос http восходящего потока: 404
04.08.2021, 17:43:08 [отладка] nginx_pid#nginx_pid: *1 завершить запрос HTTP-прокси
04.08.2021 17:43:08 [отладка] nginx_pid#nginx_pid: *1 бесплатный одноранговый узел rr 1 0
04.08.2021 17:43:08 [отладка] nginx_pid#nginx_pid: *1 закрыть восходящее http-соединение: 15
04.08.2021 17:43:08 [отладка] nginx_pid#nginx_pid: *1 свободен: A9E50626EC2A1D36, неиспользовано: 48
04.08.2021 17:43:08 [отладка] nginx_pid#nginx_pid: *1 таймер событий del: 15: 878601636
04.08.2021 17:43:08 [отладка] nginx_pid#nginx_pid: *1 повторно используемое соединение: 0
04.08.2021, 17:43:08 [отладка] nginx_pid#nginx_pid: *1 HTTP-запрос финализации: 404, "/warehouse/api/messages?" а:1, в:1
04.08.2021, 17:43:08 [отладка] nginx_pid#nginx_pid: *1 специальный ответ http: 404, "/warehouse/api/messages?"
04.08.2021 17:43:08 [отладка] nginx_pid#nginx_pid: *1 тестовое местоположение: "@400"
04.08.2021 17:43:08 [отладка] nginx_pid#nginx_pid: *1 тестовое местоположение: "@401"
04.08.2021 17:43:08 [отладка] nginx_pid#nginx_pid: *1 тестовое местоположение: "@403"
04.08.2021 17:43:08 [отладка] nginx_pid#nginx_pid: *1 тестовое местоположение: "@404"
04.08.2021 17:43:08 [отладка] nginx_pid#nginx_pid: *1 с использованием местоположения: @404 "/warehouse/api/messages?"
Мне кажется странным, что он, кажется, рассматривает склад
как имя хоста. С другой стороны, NGINX определяет некоторые адреса с таким именем, так что это может быть связано с этим.