У меня настроен сервер nginx в облаке Google. Доступ к серверу осуществляется из хост-домена через gcloud.
Как это:
https://server.com/test/ указывает на группу экземпляров с одним из экземпляров с ip http://39.99.99.99.55/project/
И все работает хорошо, если вы не вводите
https://server.com/test/folder без косой черты
Когда вы делаете это, хост-сервер перенаправляет на
https://server.com/project/folder/
которая не является назначенной папкой в хост-домене.
Но если вы введете его правильно:
https://server.com/test/папка/
он работает правильно, резолвится на ip-сервер и получает результат.
Итак, сервер с nginx пытается найти папку и делает редирект.
Тем не менее, я не хочу, чтобы он перенаправлялся с использованием относительного пути сервера, я хочу, чтобы у него был путь к хосту с балансировкой нагрузки, например:
https://server.com/test/папка
следует перенаправить на https://server.com/test/папка/
нет https://server.com/project/folder/
Вот мой файл конфигурации nginx:
сервер {
слушать 80 default_server;
слушать [::]:80 default_server;
корень /дом/.www;
# Добавьте index.php в список, если вы используете PHP
индекс index.php index.html;
имя сервера _;
# включен автоиндекс;
# обслуживать статические файлы напрямую
расположение ~* \.(jpg|jpeg|gif|css|png|js|ico|html)$ {
доступ_лог выключен;
#истекает макс;
}
журнал_ошибок /home/.log/xerror.log;
access_log /home/.log/xaccess.log сжатие;
# включить проект
расположение ^~ /проект {
псевдоним /home/.www/project/public;
try_files $uri $uri/ @project;
расположение ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
fastcgi_index index.php;
fastcgi_read_timeout 180;
включить fastcgi_params;
fastcgi_param SCRIPT_FILENAME $request_filename;
}
}
местоположение @проект {
переписать /project/(.*)$ /project/index.php последним;
}
место расположения / {
# Сначала пытаемся обслужить запрос как файл, затем
# в качестве каталога, затем вернуться к отображению 404.
try_files $uri $uri/ /index.php?$args;
}
# передать PHP-скрипты на сервер FastCGI
расположение ~ \.php$ {
включить фрагменты/fastcgi-php.conf;
# С php-fpm (или другими сокетами unix):
fastcgi_pass unix:/run/php/php8.1-fpm.sock;
fastcgi_read_timeout 180;
# С php-cgi (или другими сокетами tcp):
# fastcgi_pass 127.0.0.1:9000;
}
}
Как сделать, чтобы сервер не перенаправлял так при нахождении папки?
Изменить 1
@Иван Шацкий
попросил получить curl -v server.com/test/папка
вывод из запроса, вот он:
* Попытка 35.***.160.34:443...
* Установлен TCP_NODELAY
* Подключен к server.com (35.***.160.34) порт 443 (#0)
* ALPN, предлагая h2
* ALPN, предлагающий http/1.1
* успешно установить места проверки сертификата:
* CA-файл: /etc/ssl/certs/ca-certificates.crt
CApath: /etc/ssl/certs
* TLSv1.3 (OUT), рукопожатие TLS, приветствие клиента (1):
* TLSv1.3 (IN), рукопожатие TLS, приветствие сервера (2):
* TLSv1.3 (IN), рукопожатие TLS, зашифрованные расширения (8):
* TLSv1.3 (IN), рукопожатие TLS, сертификат (11):
* TLSv1.3 (IN), рукопожатие TLS, проверка CERT (15):
* TLSv1.3 (IN), рукопожатие TLS, Готово (20):
* TLSv1.3 (OUT), изменение шифрования TLS, изменение спецификации шифрования (1):
* TLSv1.3 (OUT), рукопожатие TLS, Готово (20):
* SSL-соединение с использованием TLSv1.3/TLS_AES_256_GCM_SHA384
* ALPN, сервер принят для использования h2
*Сертификат сервера:
* тема: CN=server.com
* дата начала: 25 апреля 19:19:01 2022 GMT
* срок действия: 24 июля 19:19:00 2022 GMT
* subjectAltName: хост "server.com" соответствует сертификату "server.com"
* эмитент: C=US; O = Google Trust Services LLC; CN = ГТС СА 1D4
* Проверка сертификата SSL в порядке.
* Используя HTTP2, сервер поддерживает многократное использование
* Состояние соединения изменено (HTTP/2 подтверждено)
* Копирование данных HTTP/2 из буфера потока в буфер соединения после обновления: len=0
* Использование идентификатора потока: 1 (простой дескриптор 0x556617a0f2f0)
> ПОЛУЧИТЬ /test/quasar HTTP/2
> Хост: server.com
> пользовательский агент: curl/7.68.0
> принять: */*
>
* TLSv1.3 (IN), рукопожатие TLS, билет на выпуск новостей (4):
* TLSv1.3 (IN), рукопожатие TLS, билет на выпуск новостей (4):
* старый идентификатор сеанса SSL устарел, удаление
* Состояние соединения изменено (MAX_CONCURRENT_STREAMS == 100)!
< HTTP/2 301
< сервер: nginx/1.20.2
<дата: пн, 23 мая 2022 г., 21:04:50 по Гринвичу
<тип содержимого: текст/html
<длина содержимого: 169
< расположение: http://server.com/project/folder/
< через: 1.1 гугл
<alt-svc: h3=":443"; ма=2592000,ч3-29=":443"; ма=2592000
<
<html>
<head><title>301 перемещен навсегда</title></head>
<тело>
<center><h1>301 перемещен навсегда</h1></center>
<hr><center>nginx/1.20.2</center>
</тело>
</html>
* Соединение №0 с хостом server.com осталось нетронутым
Таким образом, похоже, что он попадает на мой сервер nginx и возвращает перенаправление 301, но в папке, которая у него есть внутри /project/folder/folder, что правильно для этого сервера, но становится неверным после того, как оно распространяется на хост-сервер, который должен быть server.com/тест/папка/
и нет server.com/проект/папка/
.