我对 proxy_pass 和动态子域有疑问。
在我的服务器上,我有一个如下所示的 site_block:
upstream mydockersite{
server 127.0.0.1:8081;
}
server {
listen 80;
server_name ~^review-+(?<subdomain>.+)\.website\.com;
location / {
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_cache_bypass $http_upgrade;
proxy_pass http://mydockersite;
}
}
它可以很好地将发送到我的服务器的传入请求重定向到我的 docker 容器(也是一个 NGINX 服务器)。
例如:
http://review-xyz.website.com
或者
http://review-somedynamicsubdomain.website.com
或者
http://review-anothersubdomain.website.com
review-
固定部分可以<subdomain>
是任何内容,website.com
无论如何都是我的域。我看到整个请求域可以通过我设置的标头传递到我的 docker 容器中的服务器,proxy_set_header Host $host;
但我不知道如何在我的 docker nginx 服务器的配置中获取它们并重定向到请求的根文件夹。
我的 docker 容器中的 nginx 服务器的配置如下:
server {
listen 80;
index index.php index.html;
error_log /var/log/nginx/error.log;
access_log /var/log/nginx/access.log;
######## MY PROBLEM IS HERE ########
root /home/site_reviews/main;
####################################
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass app:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
location / {
try_files $uri $uri/ /index.php?$query_string;
gzip_static on;
}
}
在这一行:root /home/site_reviews/main;
我需要用proxy_pass 的main
部分替换该部分<subdomain>
因此,网站提供服务的根文件夹将是子域名
例如,如果我有这样的 URL:,那么我的 docker 容器 nginx 应该为docker 文件夹中的review-x34kk4ids.website.com
文件夹提供服务x34kk4ids
/home/site_reviews/
答案1
将 的值Host
与 进行核对。使用Docker 实例中server_name
的相同 值来提取并将其附加到值。server_name
$subdomain
root