使用位置内的别名

时间:2016-06-01 20:22:15

标签: nginx

所以这是我的服务器块

server {
    listen      80;
    server_name domain.tld;
    root        /var/www/domain.tld/html;
    index       index.php index.html index.htm;

    location / {
    }

    location /phpmyadmin {
        alias /var/www/phpmyadmin;
    }

    location /nginx_status {
        stub_status on;
        access_log  off;
    }

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

浏览http://domain.tld/index.php正常工作我遇到的唯一问题就是浏览http://domain.tld/phpmyadmin/。它返回404但服务器上存在文件夹/ var / www / phpmyadmin。查看/var/log/nginx/error.log,在那里没有记录任何错误,但是对它的访问记录在/var/log/nginx/access.log中。这可能是什么问题?

1 个答案:

答案 0 :(得分:3)

问题是phpmyadmin是一个PHP应用程序,而你的location ~ \.php$块没有指向正确的文档根目录。

您需要构建两个具有不同文档根的PHP位置。

如果phpmyadmin位于/var/www/phpmyadmin,则不需要alias指令,因为root指令会更有效。请参阅this document

server {
    listen      80;
    server_name domain.tld;
    root        /var/www/domain.tld/html;
    index       index.php index.html index.htm;

    location / { 
    }

    location /nginx_status {
        stub_status on;
        access_log  off;
    }

    location ~ \.php$ {
        try_files $uri =404;
        include fastcgi_params;
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }

    location ^~ /phpmyadmin {
        root /var/www;

        location ~ \.php$ {
            try_files $uri =404;
            include fastcgi_params;
            fastcgi_pass unix:/var/run/php5-fpm.sock;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        }
    }
}

location ^~ /phpmyadmin是一个前缀位置,优先于通常用于处理.php文件的正则表达式位置。它包含一个location ~ \.php$块,它为文档根继承了/var/www的值。

在定义其他include fastcgi_params参数之前建议您fastcgi_param,否则您的自定义值可能会被静默覆盖。

有关详情,请参阅this document