nginx – 为什么我不能在proxy_passpath中使用variables?

为什么我不能在proxy_pass中使用variables$ user – 就像下面的例子一样?

server { listen 80; server_name ~^(?P<user>[az|AZ|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>[az|AZ|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:/; } } 

我读了这个和那里 ,但在这里,但没有一个通过Unix套接字覆盖proxy_pass。

代理通行证指令没有看到$ user和$ app作为你的情况下的参数,你必须通过$is_args$argsvariables告诉他:

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

发现'uri'是不是variables的问题,所以正确的configuration应该是

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

我应该打开debugging更快,谢谢你的支持。

我不能再检查这个解决scheme,这是我现在的猜测 – 因为我每个应用程序都有一个configuration文件,我会尽量统一我的configuration。