Назад | Перейти на главную страницу

Nginx перезаписывает обратный прокси-сервер без учета регистра

Я хочу настроить обратный прокси-сервер nginx, чтобы упростить некоторые предстоящие перемещения серверов и реализации с балансировкой нагрузки в наших приложениях. Поскольку все наши серверы относятся к IIS, чувствительность к регистру не была проблемой, но теперь с nginx это стало для меня одним из них. Я просто хочу переписать, независимо от случая.

Примечания по инфраструктуре:

Я не могу настроить свое местоположение без учета регистра из-за следующей ошибки:

nginx: [emerg] «proxy_pass» не может иметь часть URI в местоположении, заданном регулярным выражением, или внутри именованного местоположения, или внутри оператора «if», или внутри блока limit_except в /etc/nginx/sites-enabled/test.conf : 101

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

location /svc_test {
    proxy_set_header x-real-ip              $remote_addr;
    proxy_set_header x-forwarded-for        $proxy_add_x_forwarded_for;
    proxy_set_header host                   $http_host;

    proxy_pass  http://backend/serviceSite/WFCService.svc;
}

location ~* /test {
    rewrite ^/(.*)/$ /svc_test/$1 last;
}

Это местоположение / test, которое я не могу понять. Если я позвоню http://nginxserver/svc_test/help Страница справки WCF отображается правильно, и я могу выполнять все доступные вызовы REST. С моей стороны это ДОЛЖНО быть тупой проблемой с регулярным выражением, но я пробовал несколько вариантов, и все, что я мог получить, - это 404 или 500 ошибок от nginx. Это НЕ ракетостроение, может ли кто-нибудь указать мне правильное направление, чтобы я мог выглядеть как идиот и просто двигаться дальше?

Последнее правильное регулярное выражение, которое привело меня туда, куда я хотел, это

rewrite ^/([^/]*)(.*)$ /svc_test$2;

и это дало следующие результаты:

  • / test -> информационная страница службы WCF
  • / test / -> ошибка (правильно)
  • / test / help -> страница справки по конечной точке службы WCF
  • / test / contacts / 1 -> Вытащено из интерфейса получения контактов
  • / test / contacts -> Вытащил полный список контактов

Я (очевидно) далек от того, чтобы свободно владеть регулярными выражениями, поэтому это может быть не оптимальный способ обработки перезаписи без учета регистра, но он делает все, что я хотел выполнить. Единственное, что я хотел бы добавить в какой-то момент, это rewrite / test / to / test, чтобы предотвратить любые страницы с ошибками, но это не повлияет на вызовы служб.