nginx的别名+位置指令(nginx alias+location directive)

2019-07-28 21:48发布

server {
    listen      80;
    server_name  pwta; 
    root html;

    location /test/{
        alias html/test/;
        autoindex on;
    }
    location ~ \.php$ {
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }
}

这种配置工作。 但是,如果location /test/被替换例如location /testpath/它不工作(没有指定的输入文件)。 我认为对“位置”部分被放置别名指令的解释基础,从而/testpath/info.php会导致html/test/info.php

感谢您的任何建议。

Answer 1:

nginx的别名

    server {
    listen      80;
    server_name  pwta;
    index index.html index.php;
    root html;

    location /testpath/ {
        alias html/test/;
    }
    location ~  ^/testpath/(.+\.php)$ { ### This location block was the solution
        alias html/test/;     
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$1;
        include fastcgi_params;
    }
     location ~ \.php$ {
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }


Answer 2:

两个aliasroot指令最好用绝对路径使用。 您可以使用相对路径,但它们是相对于prefix用来编译nginx的配置选项,且通常不是你想要的。

你可以通过执行看到这个nginx -V和发现下列值--prefix=

通过查看日志证实这一点,你会发现一个“没有这样的文件”的错误。



文章来源: nginx alias+location directive