我对 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 服务器的配置中获取它们并重定向到请求的 root
文件夹。
我的 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;
我需要用main
的
<subdomain>
部分替换
proxy_pass
部分
所以提供网站服务的
root
文件夹将是子域
例如,如果我有这样的 URL:
review-x34kk4ids.website.com
,
然后我的docker容器nginx应该提供docker文件夹x34kk4ids
中的文件夹
/home/site_reviews/