在stderr中发送的FastCGI:“;主脚本未知“-nginx和silex


FastCGI sent in stderr: "Primary script unknown" - nginx and silex

我在部署了Silex项目的服务器上收到了这个错误。

在这个服务器中,我已经让nginx将请求从/传递到运行在5000端口的Flask应用程序。

因此,在将新项目从我的存储库拉到/var/www/newproject之后,我试图配置nginx,以便对http://xxx.xxx.xxx.xxx/newproject的请求将根到/var/www/newproject,这是一个silex应用程序。

我在网上搜索了一下,发现的所有配置都不能解决我的问题。访问任何路由,返回404。

我的整个配置是这样的:

server {
    listen 80;
    server_name xxx.xxx.xxx.xxx;
    access_log /var/log/myproject/nginx_access.log;
    error_log /var/log/myproject/nginx_error.log;
    proxy_connect_timeout 300s;
    proxy_read_timeout 300s;
    location /newproject {
        root /var/www;
        try_files $uri $uri/ =404;
        index index.php;
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        #fastcgi_index index.php;
        fastcgi_param  SCRIPT_FILENAME /var/www/newproject/index.php;
        #fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        #fastcgi_param SCRIPT_FILENAME /var/www$fastcgi_script_name;
        #fastcgi_param SCRIPT_FILENAME /var/www/newproject$fastcgi_script_name;
        include fastcgi_params;
    }
    location / {
        root /opt/myproject;
        proxy_set_header X-Forward-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_redirect off;
        if (!-f $request_filename) {
            proxy_pass http://xxx.xxx.xxx.xxx:5000;
            break;
        }
    }
}

我在这里错过了什么?

谢谢。

更新:

尝试了一个新的配置(如下所示),现在正在访问http://xxx.xxx.xxx.xxx/newproject/SOME_PATH我有一个404。

open() "/var/www/newproject/SOME_PATH" failed (20: Not a directory)
open() "/var/www/newproject/index.php/SOME_PATH" failed (20: Not a directory)
location /newproject {
        root /var/www/;
        index index.php index.html index.htm;
        location ~ ^/newproject/(.+'.php)$ {
            try_files $uri =404;
            root /var/www/;
            fastcgi_pass unix:/var/run/php5-fpm.sock;
            fastcgi_param HTTPS off;
            fastcgi_index index.php;
            #fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            #fastcgi_param SCRIPT_FILENAME $document_root/index.php;
            fastcgi_split_path_info ^(.+'.php)(/.+)$;
            include /etc/nginx/fastcgi_params;
        }
        location ~* ^/newproject/(.+'.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ {
            root /var/www/;
        }
    }

因此,我已经设法解决了Nginx子文件夹的站点配置问题

现在我的配置是:

server {
    listen 80;
    server_name xxx.xxx.xxx.xxx;
    root /opt/myproject;
    access_log /var/log/myproject/nginx_access.log;
    error_log /var/log/myproject/nginx_error.log;
    proxy_connect_timeout 300s;
    proxy_read_timeout 300s;
    location /newproject {
        root /var/www;
        index index.php index.html index.htm;
        rewrite ^/newproject/(.*)$ /newproject/$1 break;
        try_files $uri $uri/ /newproject/index.php?q=$uri&$args;
        location ~ .*'.php$ {
            include /etc/nginx/fastcgi_params;
            fastcgi_pass unix:/var/run/php5-fpm.sock;
            fastcgi_index index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        }
    }
    location / {
        root /opt/myproject/;
        proxy_set_header X-Forward-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_redirect off;
        if (!-f $request_filename) {
            proxy_pass http://xxx.xxx.xxxx.xxx:5000;
            break;
        }
    }
}

由于newproject依赖于myproject,我将它们的配置保存在同一个文件以及同一个nginx访问和错误日志文件中。

不要忘记检查用户:组的nginx&php fpm

如果php-fpm仍在运行"apache"用户,并且您已经在nginx和http目录上切换了用户"nginx",则错误消息将是相同的!

并重新加载两个