不使用符号链接为子目录配置 nginx

不使用符号链接为子目录配置 nginx

我一直在尝试使用以下方法在我的 nginx 服务器上设置 phpmyadmin这个过时的教程来自 DigitalOcean。想法是进行以下配置:

http(s)://example.com=>/usr/share/nginx/html

http(s)://example.com/phpmyadmin=>/usr/share/phpmyadmin

本教程的“解决方案”是创建一个/usr/share/nginx/html指向的符号链接/usr/share/phpmyadmin。这与这个问题。不幸的是,这造成了一些其他问题这里我就不多说了。

我觉得我应该能够使用单独的location块来控制这种行为。我尝试了建议的方法这里

server {
        listen 80 default;

        server_name localhost;

        root /usr/share/nginx/html;
        index index.php index.html index.htm index.nginx-debian.html;

        location ~ \.php$ {
                include snippets/fastcgi-php.conf;
                # With php7.0-fpm:
                fastcgi_pass unix:/run/php/php7.0-fpm.sock;
                fastcgi_param SCRIPT_FILENAME /usr/share/nginx/html$fastcgi_script_name;
                include fastcgi_params;
        }

        location /phpmyadmin {
            root /usr/share/phpmyadmin;
        }

        location ~ /phpmyadmin/.+\.php$ {
            fastcgi_pass unix:/run/php/php7.0-fpm.sock;
            fastcgi_param  SCRIPT_FILENAME /usr/share/phpmyadmin$fastcgi_script_name;
        }
}

我仍然可以访问 nginx 的默认页面http://example.com,甚至可以通过 等 URL 执行 PHP 脚本http://example.com/info.php。不幸的是,每当我尝试访问任何http://example.com/*URL 时,都会出现 404 错误。

我应该如何正确配置它?我在 Ubuntu 服务器上运行带有 PHP-FPM 的 PHP7.0。

答案1

我在下面提出了一些建议。免责声明:它尚未经过测试。

server {
    listen 80 default;

    server_name localhost;

    root /usr/share/nginx/html;
    index index.php index.html index.htm index.nginx-debian.html;

    location / {
        try_files $uri $uri/ =404;
    }

    location ~ \.php$ {
        try_files $uri =404;

        include snippets/fastcgi-php.conf;
        # With php7.0-fpm:
        fastcgi_pass unix:/run/php/php7.0-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

    location ^~ /phpmyadmin {
        root /usr/share;
        try_files $uri $uri/ =404;

        location ~ \.php$ {
            try_files $uri =404;

            fastcgi_pass unix:/run/php/php7.0-fpm.sock;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include fastcgi_params;
        }
    }
}

你的root说法是错误的,除非 phpmyadmin 在下面/usr/share/phpmyadmin/phpmyadmin

您可以嵌套PHP位置块,并使用^~修饰符,这样看起来更整洁。请参阅这个文件了解详情。

我添加了一些try_files语句, 依据最佳实践. 此外,location /处理块普通的URI。

您可能想要将其中一些=404代码更改为默认操作。

相关内容