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

nginx - почему я не могу использовать переменные в пути proxy_pass?

Почему я не могу использовать переменную $ user в proxy_pass - как в примере ниже?

server {
    listen 80;
    server_name ~^(?P<user>[a-z|A-Z|0-9|_|-]+)\.example\.net$;
    root /home/$user/webapps/;

    location /app/ {
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_redirect off;
        proxy_pass http://unix:/home/$user/webapps/app/run/gunicorn.sock:/;
    }
}

Возможно ли этого достичь или мне следует отказаться?

И этот был бы идеальным, но он тоже не работает.

server {
    listen 80;
    server_name ~^(?P<user>[a-z|A-Z|0-9|_|-]+)\.example\.net$;
    root /home/$user/webapps/;

    location ~ ^\/(?P<app>[\w-_]+)(\/.*)?$ {
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_redirect off;
        proxy_pass http://unix:/home/$user/webapps/$app/run/gunicorn.sock:/;
    }
}

Я читаю этот и который и Вот но ни один из них не покрывает proxy_pass через сокет unix.

Обнаружено, что проблема заключалась в uri, а не в переменных, поэтому правильная конфигурация должна быть

proxy_pass http://unix:/home/$user/webapps/$app/run/gunicorn.sock:$request_uri;

я должен включить отладку быстрее, спасибо за поддержку.

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

Директивы передачи прокси не видят $ user и $ app в качестве параметров в вашем случае, вы должны сообщить ему через $is_args и $args такие переменные:

proxy_pass http://unix:/home/$user$is_args$args/webapps/$app$is_args$args/run/gunicorn.sock:/;