我有两个不同的数据后端,我想testing我的UI代码,所以我想configurationNginx允许我们之间切换基于URL。
因此,例如,本地URL https://ui.local.otherserver:80将尝试我的本地文件,然后代理其他任何东西到https://otherserver:80 。
我试图避免有两个server块,因为下面的configuration简化,重复是一个痛苦。
我看到的行为是后端之一工作正常,另一个给我一个502(坏网关)错误,但如果我硬编码proxy_pass线路中的服务器的名称,它按预期工作,即成功代理到特定的服务器。
任何想法我做错了什么?
ssl on; ssl_certificate /usr/local/etc/nginx/conf.d/cert.ui.crt; ssl_certificate_key /usr/local/etc/nginx/conf.d/cert.ui.key; server { listen 443; listen 80; server_name ~^ui\.local\.(?<backend>.+)$; expires -1; access_log /var/log/nginx/ui.access.log; error_log /var/log/nginx/ui.error.log; root /Users/richard/Projects/ui/trunk/; location ~ ^(.*)$ { try_files $1 @platform; } location @platform { proxy_pass https://$backend:$port; } }
502是一个错误的网关错误,这意味着nginx无法与后端进行通信。 在nginx错误日志中应该有一个更详细的消息来解释通信错误是什么。 查看/var/log/nginx/error.log (或类似)来查找实际的原因。
您需要在您的服务器configuration或位置configuration中设置显式的“parsing器”指令才能工作。 通过使用proxy_pass指令中的variables,NGINX需要执行运行时间parsing。 这里gethostbyname()不能用于阻塞调用。 所以NGINX期望一个asynchronousparsing器被configuration,否则会给502坏的网关。