Текущая конфигурация
Я перенес свой GitLab на новый сервер.В рамках миграции некоторые хранилища были реорганизованы.У нас есть веб-сайт, который напрямую ссылается на файлы raw и blob в GitLab.Я хотел бы перенаправить все HTTPS-запросы со старых URL-адресов на новые, для этих raw и blob файлов.
Я использую пакет Gitlab Omnibus, св комплекте установка nginx.Я основывался на принятом ответе на этот вопрос: Gitlab Omnibus: как перенаправить все запросы в другой домен , что в свою очередь ссылается на официальную документацию GitLab: https://docs.gitlab.com/omnibus/settings/nginx.html#inserting-custom-settings-into-the-nginx-config.
Создать каталог конфигурации nginx, поскольку он еще не существует:
sudo mkdir -p /etc/nginx/conf.d/
Создать /etc/nginx/conf.d/redirect.conf
:
.
server {
server_name gitlab.itextsupport.com;
rewrite ^\/itext7\/samples\/(blob|raw)\/master\/(?!samples\/)(.*)$ https://$server_name/itext7/samples/$1/master/samples/$2 permanent;
}
Отредактируйте файл конфигурации в /etc/gitlab/gitlab.rb
, добавив следующую строку:
nginx['custom_nginx_config'] = "include /etc/nginx/conf.d/redirect.conf;"
Перепишите конфигурацию nginx:
sudo gitlab-ctl reconfigure
Перезапустите пакетный nginx:
sudo gitlab-ctl restart nginx
Убедитесь, что в комплект поставки nginx входитфайл перенаправления:
sudo grep 'redirect.conf' /var/opt/gitlab/nginx/conf/nginx.conf
Проверка конфигурации
curl -I https://gitlab.itextsupport.com/itext/tutorial/blob/master/signatures/src/main/java/signatures/chapter4/C4_05_SignWithBEID.java
Ожидаемый результат
/samples
вставляется после/blob/master
.Я ожидаю увидеть 301 переписать в https://gitlab.itextsupport.com/itext/tutorial/blob/master/samples/signatures/src/main/java/signatures/chapter4/C4_05_SignWithBEID.java
Фактический результат
200 ОК на неизмененном URL.
Гадкий хак
Добавить эту строку в/var/opt/gitlab/nginx/conf/gitlab-http.conf
и перезапустите пакет nginx:
rewrite ^\/itext7\/samples\/(blob|raw)\/master\/(?!samples\/)(.*)$ https://$server_name/itext7/samples/$1/master/samples/$2 permanent;
Сделав это таким образом, я убедился, что мое действительное правило перезаписи само по себе правильно.
Недостаток: эта строка будет потеряна каждый развремя gitlab-ctl reconfigure
запущено.
Вопрос
Что мне нужно изменить, чтобы перезапись URL-адресов работала должным образом?Без безобразного хака?
Дополнительная информация
Когда я запускаю sudo /opt/gitlab/embedded/sbin/nginx -p /var/opt/gitlab/nginx -T
, я вижу два server { }
блока.До сих пор моя рабочая теория состояла в том, что nginx выбирает только первый блок сервера и игнорирует второй.Если бы я мог найти способ объединить оба блока сервера способом, совместимым с файлом конфигурации /etc/gitlab/gitlab.rb
, то моя проблема, скорее всего, будет решена.