对于这个奇怪的标题,我深感抱歉:)
我拥有的
我在同一台服务器上运行两个 Web 应用程序(OSClass 安装和 Vanilla Forum)。其中一个应该是掌握一切(OSClass)——几乎每个请求都应该由该应用程序处理。另一个应用程序应该只响应一些特定的请求(Vanilla-Forum……但我们称之为奴隶)。
主页(OSClass)
位于目录 /var/www/webroot/master 中
,并监听每个请求,例如 mypage.example.com/
*(但不是从属页面的 URL)
从属页面(Vanilla 论坛)
位于目录 /var/www/webroot/slave/ 中
,并且只应监听诸如 mypage.example.com/slave/* 之类的请求
Master 的工作原理
主应用程序正在使用如下配置:
#
# some general stuff...
#
http {
# other stuff
server {
listen 80;
server_name mypage.example.com;
root /var/www/webroot/master
index index.php
try_files $uri $uri/ /index.php?$args;
location ~ .php$ {
fastcgi_split_path_info ^(.+\.php)(.*)$;
fastcgi_param SCRIPT_FILENAME /var/www/webroot/master
fastcgi_script_name;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include /etc/nginx/fastcgi_params;
}
# some more stuff
}
}
我如何让奴隶工作
我想,既然配置适用于主服务器,为什么不复制“服务器”环境并将其调整为从服务器。像这样:
server {
listen 80;
server_name mypage.example.com/slave;
root /var/www/webroot/slave
index index.php
try_files $uri $uri/ /index.php?$args;
location ~ .php$ {
fastcgi_split_path_info ^(.+\.php)(.*)$;
fastcgi_param SCRIPT_FILENAME /var/www/webroot/slave
fastcgi_script_name;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include /etc/nginx/fastcgi_params;
}
# some more stuff
}
但这并不管用——网址mypage.example.com/slave仍然导致掌握页面.. 我也尝试了两个位置定义,但显然我无法定义一个位置掌握,适用于除应由处理的请求之外的每个请求奴隶例如
location /(!/slave)
抱歉,我真的不太了解服务器配置,到目前为止我还没有找到任何能帮助我的教程。有人知道我该如何配置服务器吗?或者有正则表达式我可以用来排除奴隶来自掌握-地点?
答案1
server_name
是服务器的域名,它不能包含URL的任何其他部分。
您可以使用以下设置来做您想做的事情:
#
# some general stuff...
#
http {
# other stuff
server {
listen 80;
server_name mypage.example.com;
root /var/www/webroot/master
index index.php
try_files $uri $uri/ /index.php?$args;
location /slave {
alias /var/www/webroot/slave;
}
location ~ .php$ {
fastcgi_split_path_info ^(.+\.php)(.*)$;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include /etc/nginx/fastcgi_params;
}
# some more stuff
}
}
应该fastcgi_param SCRIPT_FILENAME
已经在 nginx 公共配置(fastcgi_params)中定义,所以这里不需要包含它。其实这里配置错了。
该alias
指令设置了为此 URI 位置提供文件的目录。