Nginx别名不起作用

时间:2014-05-21 18:46:33

标签: php nginx alias

我有一个位置块,我为其定义了一个不同的别名,我希望它的index.php文件是来自同一目录的服务器。问题是Nginx没有使用别名来提供索引文件,而是试图在根目录中找到该文件(并且它不存在)。

配置:

http {
    sendfile on;
    tcp_nopush on;
    keepalive_timeout 15;

    upstream php {
        server unix:/run/php-fpm.sock;
    }

    server {
        server_name my.domain.com;

        root /var/www;

        location / {
            alias /var/www/site/;
            index index.php;
            try_files $uri $uri/ /index.php?$args;
        }

        location ~ \.php$ {
            include fastcgi_params;
            fastcgi_pass php;
        }

        location ~ /\.ht {
            deny  all;
        }
    }
}

因此root应该指向根目录(site/)中的/var/www目录,但尝试提供的文件是/var/www/index.php

2014/05/21 15:41:19 [error] 9591#0: *190 FastCGI sent in stderr: "Unable to open primary script: /var/www/index.php (No such file or directory)" while reading response header from upstream, client: 127.0.0.1, server: my.domain.com, request: "GET / HTTP/1.1", upstream: "fastcgi://unix:/run/php-fpm.sock:", host: "localhost:666"

相反,我希望该文件可以从/var/www/index.php提供。

1 个答案:

答案 0 :(得分:1)

Nginx location是独家的。离开位置时,nginx会忘记所有上下文。在您的情况下,try_files中的最后一项是内部重定向,因此nginx会忘记别名,并转到与/index.php匹配的location ~ \.php$,其中root /var/www继承自服务器块。

我只需将root指令更改为root /var/www/site,但如果您真的想要这种繁琐的方式,只需将try_files更改为try_files $uri $uri/ /site/index.php?$args