我有一个关于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
无论如何都是我的域。
我看到整个请求域可以通过我设置的proxy_set_header Host $host;
头部传递到我的docker容器中的服务器,但我不知道如何在我的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
部分替换为proxy_pass
的<subdomain>
部分
因此,网站所在的root
文件夹将是子域
例如,如果我有一个这样的URL:review-x34kk4ids.website.com
,那么我的docker容器nginx应该服务于docker文件夹/home/site_reviews/
中的文件夹x34kk4ids
1条答案
按热度按时间r7knjye21#
所以,由于我没有得到任何答案,我自己找到了解决方案,下面是我如何解决这个问题:
这将是动态子域的nginx站点块:
我在
8081
端口上创建了一个指向127.0.0.1
的upstream。这是docker容器nginx服务器监听的端口。然后,我创建一个新的自定义头,它被发送到docker容器中的nginx服务器,名称为
Review
,值为动态子域:proxy_set_header Review $subdomain;
然后容器使用header中传递的子域到正确的文档根,如下所示:
请注意,在docker容器中发送到nginx服务器的自定义头称为
Review
,但在docker容器中的nginx服务器中,我用http_review
抓取它并将其设置为名为$folder
的变量,然后可以根据需要使用该动态子域。