未指定输入文件:无法配置NGINX别名

时间:2018-10-04 12:44:29

标签: nginx fastcgi

我无法在Nginx conf文件中设置两个位置。

在添加一个带别名的位置之前,我没有两个位置的问题。

使用别名的位置/不起作用。 没有别名的位置/ dev有效。 我想使用两个别名,因为我有两个文件夹: prod dev

这是我当前的conf:

server {
    listen       80;
    listen   [::]:80;
    server_name  domain.com www.domain.com;

    root /home/domain/public_html/www/;
    index index.html index.htm index.php index2.php;

    location / {
        alias /home/domain/public_html/www/prod/;
        try_files $uri $uri/ /index.php?q=$uri&$args;
    }


    location /dev {
        try_files $uri $uri/ /index.php?q=$uri&$args;
    }

    location ~* \.php$ {
      fastcgi_pass     127.0.0.1:9000;
      include          fastcgi_params;
      fastcgi_param    SCRIPT_FILENAME    $request_filename;
      fastcgi_param    SCRIPT_NAME        $fastcgi_script_name;
    }

    charset utf-8;

    location = /favicon.ico { access_log off; log_not_found off; }
    location = /robots.txt  { access_log off; log_not_found off; }
    location ~ /\.ht {
        deny all;
    }
}

正在发生的事情是,访问domain.com/dev/的效果很好,但是只要它位于/位置,我就会收到“未指定输入文件”错误。

如果输入domain.com/license.txt,则可以看到Wordpress的许可证文件。 如果我尝试domain.com/index.php,则会收到错误消息。

我已经在使用$ request_filename来避免root和别名问题了,知道吗?

1 个答案:

答案 0 :(得分:2)

您无需在此方案中使用alias,但是如果您希望使用两个单独的根来运行PHP,则需要使用嵌套的location块。

例如:

root /home/domain/public_html/www/prod;

location / {
    try_files $uri $uri/ /index.php?q=$uri&$args;
}
location ~* \.php$ {
  fastcgi_pass     127.0.0.1:9000;
  include          fastcgi_params;
  fastcgi_param    SCRIPT_FILENAME    $request_filename;
  fastcgi_param    SCRIPT_NAME        $fastcgi_script_name;
}

location ^~ /dev {
    root /home/domain/public_html/www;

    try_files $uri $uri/ /dev/index.php?q=$uri&$args;

    location ~* \.php$ {
        fastcgi_pass     127.0.0.1:9000;
        include          fastcgi_params;
        fastcgi_param    SCRIPT_FILENAME    $request_filename;
        fastcgi_param    SCRIPT_NAME        $fastcgi_script_name;
    }
}

前两个location块是您的/prod/配置,带有正确的root来解析像/index.php这样的URI。

最后的location和嵌套的location块是您的/dev/配置。将root设置为正确的值,以解析诸如/dev/index.php之类的URI。

有关更多信息,请参见this document