我试图用nginx为两个项目设置一个开发服务器,一个在rails中,另一个在PHP中。 我希望两个项目的基本URL(dev.example.com)和每个项目的子位置(dev.example.com/rails_proj和dev.example.com/php_proj)。 我的nginx conf如下所示:
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; } } }
rails项目工作正常,但是当我试图访问dev.example.com/php_proj/app_dev.php和日志时,PHP项目给了我一个“找不到的文件”它说:FastCGI发送stderr:“主脚本未知” 。 我发现与它有关的问题,我尝试了很多方法,但我不能想出适用于这两个项目的东西。 我怎样才能解决这个问题?
将两个服务器块分别管理为一个额外的子域可能会更容易。 它也减少了由多个正则表达式引入的潜在混淆:
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. "; }