2

我在让子目录在我的 nginx 服务器上工作时遇到了一些问题。

我正在使用 nginx 作为 web 根目录提供 wordpress 安装,并尝试在子目录中运行额外的 php 应用程序。Wordpress 运行良好,但我无法在没有 404、403 或“未指定输入文件”的情况下让应用程序在子目录中运行。各种配置出错。我敢肯定有一些明显的东西,但我似乎无法弄清楚!

以下是相关配置:

任何帮助将不胜感激!

server {
listen       myserver.edu:8081;                
server_name  myserver.edu:8081;           

try_files $uri $uri/ /index.php;


location / {
    root /path/to/nginx/html/wordpress;
    index index.php;
}

location /stacks {
    alias /another/path/to/usr/local/share/stacks/php;
    index index.php;
}

location ~ \.php$ {
    set $php_root /path/to/nginx/html/wordpress;
    include        fastcgi_params;
    fastcgi_pass   localhost:8082;
    fastcgi_param  SCRIPT_FILENAME  $php_root$fastcgi_script_name;
    }

location ~ \stacks.php$ {
    set $php_root /another/path/to/usr/local/share/stacks/php;
    include        fastcgi_params;
    fastcgi_pass   localhost:8082;
    fastcgi_param  SCRIPT_FILENAME  $php_root$fastcgi_script_name;
    }
4

2 回答 2

5

我不知道如何使用您的别名并设置 $php_root. 如果您从外部文件夹创建符号链接到您的 wordpress-root 目录,我确实知道如何修复它。

因此,使用终端创建符号链接,以便您的 stacks-subdirectory 是一个实际的子目录:

 ln -s /another/path/to/usr/local/share/stacks/php /path/to/nginx/html/wordpress/stacks

作为 nginx-config 我会使用

server {
    listen       myserver.edu:8081;                
    server_name  myserver.edu:8081;

    root /path/to/nginx/html/wordpress;
    index index.php;       

    location / {    
        try_files $uri $uri/ /index.php;
    }

    location /stacks {
        try_files $uri $uri/ /stacks/index.php;
    }

    location ~ \.php$ {
        fastcgi_pass   localhost:8082;
        include        fastcgi_params;
    }
}
于 2012-06-21T21:33:36.027 回答
1

注释掉“try_files”。那么子目录开始工作了吗?也许它是在考虑“位置”指令之前处理的。如果是这种情况,则将“try_files”移动到“location /”的块中。

无论如何,我认为这对于“try_files”来说是一个更好的地方。在当前配置中,看起来对不存在的文件的请求将全部发送到 Wordpress,即使它们位于“堆栈”目录中。

于 2012-06-21T21:32:36.553 回答