具有子位置的 Nginx

Ale*_*lli 5 php ruby-on-rails nginx server

我正在尝试为两个项目设置一个带有 nginx 的开发服务器,一个在 Rails 中,一个在 PHP 中。我想要两个项目的基本 URL (dev.example.com) 和每个项目的子位置 (dev.example.com/rails_proj 和 dev.example.com/php_proj)。我的 nginx 配置如下:

server {
    listen 80;
    server_name dev.example.com;

    passenger_enabled on;
    passenger_app_env development;
    passenger_buffer_response off;
    root /var/www/dev;

    location ~ ^/rails_proj {
            root /public;
            passenger_base_uri /rails_proj;
            passenger_app_root /var/www/dev/rails_proj;
            passenger_document_root /var/www/dev/rails_proj/public;
    }

    location ~ ^/php_proj {
            root /web;
            try_files $uri /app_dev.php$is_args$args;

            location ~ \.php(/|$) {
                    fastcgi_pass unix:/var/run/php5-fpm.sock;
                    fastcgi_split_path_info ^(.+\.php)(/.*)$;
                    include fastcgi_params;
                    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            }
    }
}
Run Code Online (Sandbox Code Playgroud)

Rails 项目工作正常,但当我尝试访问 dev.example.com/php_proj/app_dev.php 时,PHP 项目给了我一个“文件未找到”,并在日志中显示: FastCGI 在 stderr 中发送:“主脚本未知” 。我发现了与 It 相关的问题,并且尝试了多种方法,但我无法想出适用于这两个项目的方法。我怎样才能解决这个问题?

Col*_*ney 2

作为两个服务器块,每个服务器块都有一个额外的子域,管理可能会更容易。它还减少了多个正则表达式位置带来的潜在混乱:

server {
    server_name rails.dev.example.com;
    return 200 "Hello from rails app.
";
}

server {
    server_name php.dev.example.com;
    return 200 "Hello from php app.
";
}
Run Code Online (Sandbox Code Playgroud)