如果您的 docker 設置將有許多不同的域但只有一個數據庫(例如多商店 magento 商店或多域 wordpress),則可能不希望將所有流量轉發到一個域。 或者甚至必須在 ENV 變量中對其進行硬編碼。
基於子域進行移植更容易。
在您的 nginx 配置中定義一個 map,列出您的端口號
這將使得當變量$subdomain
匹配下面 map 中的任何條目時,變量$port_number
將被設置為相應的值。 在我的示例中,如果沒有匹配項,則默認為"013"
。
然后將以下指令添加到您的服務器指令。
server_name server_name ~^(?:(?<subdomain>[^.]+)\.|)(?<base_domain>.+\.localhost)$;
這些正則表達式設置了 2 個變量$subdomain
和base_domain
如果請求是example.com.localhost
-
$subdomain
會有例子 -
$base_domain
將有com.localhost -
$port_number
將有013
如果請求是example.com.localhost
-
$subdomain
將有phpmyadmin -
$base_domain
會有example.com.localhost -
$port_number
將有014
[可選]如果您需要變量中的實際域,您可以使用如下 if 語句:
set $lookup_domain $host; if ($port_number != "013") { set $lookup_domain $base_domain; }
$lookup_domain 將包含您感興趣的實際域。
然后,您可以像這樣使用代理通行證:
location / { proxy_pass http://docker-host:${backend}${port_number}; proxy_pass_header Content-Type; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; # allow websockets proxy_pass_header Connection; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header Host $host; }
$backend
變量在我的例子中包含我的 webapp 集的基本端口范圍。
因此,代理 url 會變成類似http://docker-host:20013的內容,具體取決於應用程序。 隨意跳過它並將端口設置為實際端口或其他任何端口,或者修改它以遵循任何其他邏輯。
原文链接:https://stackoom.com/zh/question/30iNo
© 版权声明
声明📢本站内容均来自互联网,归原创作者所有,如有侵权必删除。
本站文章皆由CC-4.0协议发布,如无来源则为原创,转载请注明出处。
THE END