Nginx терпит неудачу с моими переменными в местоположении - PullRequest
0 голосов
/ 07 февраля 2019

Итак, я пытаюсь настроить nginx default.conf, и у меня возникают проблемы с использованием переменных.Я хочу захватить поддомен как переменную $subdomain и использовать его несколько раз в default.conf.

Вот мой конфиг:

server {
     listen 80;
     server_name  ~^(?<subdomain>.+)\.example\.com$;
     # To allow special characters in headers
     ignore_invalid_headers off;
     # Allow any size file to be uploaded.  
     # Set to a value such as 1000m; to restrict file size to a specific value
     client_max_body_size 0;
     # To disable buffering
     proxy_buffering off;
     location / {
       rewrite ^/$ /$subdomain/index.html break;
       proxy_set_header Host $http_host;
       proxy_pass http://minio-server:9000/$subdomain/;
       #health_check uri=/minio/health/ready;
     }
}

К сожалению, наличие переменной $subdomain в блоке местоположения каждый раз приводит к сбою nginx.Если бы я заменил $subdomain в блоке местоположения на tester в качестве статического значения, тогда все работает.

Как правильно использовать переменную $subdomain здесь ???

Этот вопрос является своего рода продолжением этого вопроса: k8s-ingress-minio-and-a-статический сайт .В этом выпуске я пытался использовать Ingress для обращения прокси-сервера к мини-корзине, но безрезультатно.Сейчас я просто пытаюсь пройти через Nginx напрямую, но мои переменные не работают.

Обновления

Так что, похоже, proxy_pass не разрешит хост правильно, если в URL есть переменная.

Пробовал две вещи:

  1. установить преобразователь следующим образом: resolver default.cluster.local.Я попробовал несколько комбо для fqdn kube-dns, но безрезультатно и продолжал получать minio-server не может быть найдено.

  2. Просто не используйте переменные, которые Ричард Смит упоминает ниже.Вместо этого переписать все, затем прокси пройти.Однако я не понимаю, как это будет работать, и я получаю очень бесполезные ошибки, например: 10.244.1.1 - - [07/Feb/2019:18:13:53 +0000] "GET / HTTP/1.1" 405 291 "-" "kube-probe/1.10" "-"

1 Ответ

0 голосов
/ 07 февраля 2019

Согласно странице руководства :

Когда переменные используются в proxy_pass: ... В этом случае, если в директиве указан URI, он передаетсясервер как есть, заменяя исходный URI запроса.

Таким образом, вам необходимо создать полный URI для вышестоящего сервера.

Например:

location = / {
    rewrite ^ /index.html last;
}
location / {
    proxy_set_header Host $http_host;
    proxy_pass http://minio-server:9000/$subdomain$request_uri;
}

Может быть лучше использовать rewrite...break и использовать proxy_pass без URI.

Например:

location / {
    rewrite ^/$ /$subdomain/index.html break;
    rewrite ^ /$subdomain$uri break;
    proxy_set_header Host $http_host;
    proxy_pass http://minio-server:9000;
}
...