配置 nginx 有 2 个位置,其中 1 个响应特定的 url 请求

配置 nginx 有 2 个位置,其中 1 个响应特定的 url 请求

对于这个奇怪的标题,我深感抱歉:)

我拥有的

我在同一台服务器上运行两个 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 位置提供文件的目录。

相关内容