如何让 Nginx 别名发挥作用?

如何让 Nginx 别名发挥作用?

我有这个定义的别名(它的最新迭代):

location ~ /xxx/(.*).php($|/) {
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    fastcgi_pass unix:/var/run/php5-fpm.sock;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME /xxx/web/blog/xxx/$1.php;
    include fastcgi_params;
}

location ~ /xxx(.*) {
     autoindex on;
     alias /xxx/web/blog/xxx$1;
}

xxx尝试在的目录中定义一个 wordpress 安装xxx.com(例如)。

现在,当我取出 PHP 路径时,我会将 index.php 文件下载到我的计算机上,但是一旦我添加 PHP fpm(如 php 位置所定义),我就会得到:

FastCGI 在 stderr 中发送:“主脚本未知”,同时从上游读取响应头

在日志中。我尝试过在错误日志中使用调试模式,但一切看起来都很好。

我确实有一个 php 位置已经在执行:

location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        try_files $uri =404;

#       # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME /xxx/web/live/backend/web/$fastcgi_script_name;
        include fastcgi_params;
}

/xxx/web/blog/xxx/$1.php我已经检查了使用的输出return 200 "/xxx/web/blog/xxx/$1.php";并且它看起来很完美。

我应该补充一点,我在 SE 上搜索了大约 3 个小时,但没有一篇文章能真正解决我的问题,其中包括:

那么这为什么不起作用呢?

答案1

好的,所以我决定回到基础,并将我的代码深入到:

location /xxx {
    autoindex on;
    alias /xxx/web/blog/xxx;

    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

我不知道为什么,但是它有效,我相当确定我已经尝试过一些非常接近的东西。

我以为这是因为我添加了:try_files $uri $uri/ /index.php?$args;但后来我删除了它,它仍然有效。

如果有人可以解释别名和其中的 PHP 如何更好地工作以及为什么它对我来说不起作用,那么我会接受这个答案,因为这实际上就是问题所在。

相关内容