编辑:

编辑:

我已经尝试让它工作几个小时了!

我想建立一个简单的网络服务器。我的网络文件应位于/var/www.我也想要 phpmyadmin。我创建了一个目录/var/phpmyadmin。现在我想以标准方式访问普通的网页文件。
例如:该文件/var/www/test.php应该可以通过http://localhost/test.php.
phpmyadmin 部分应该像这样访问:http://localhost/phpmyadmin。通过下面的配置,我得到了 404。还有这个 URL:http://localhost/phpmyadmin/index.php

为此,我在 nginx 的 site-availble 文件夹中创建了此文件:

server {
  listen 80; ## listen for ipv4; this line is default and implied
  listen [::]:80 default_server ipv6only=on; ## listen for ipv6

  root /var/www;
  index index.html index.htm index.php;

  try_files $uri $uri/ $uri/index.html $uri/index.htm $uri/index.php;

  # This didn't work
  location /phpmyadmin/ {
     alias /var/phpmyadmin;
  }

  # And this did neither. (Never used both at the same time!)
  location /phpmyadmin/ {
     root /var;
  }

  location ~ \.php$ {
    try_files $uri =404;
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini

    # With php5-cgi alone:
    #fastcgi_pass 127.0.0.1:9000;
    # With php5-fpm:
    fastcgi_pass unix:/var/run/php5-fpm.sock;
    fastcgi_index index.php;
    include fastcgi_params;
  }

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

我究竟做错了什么?

编辑:

有趣的是,这是有效的(根目录有效(http://localhost)):

  root /var/www/htdocs;

  index index.php index.html index.htm;

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

而这并没有:

  index index.php index.html index.htm;

  location / {
    root /var/www/htdocs;
  }

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

phpmyadmin 还是不行!

答案1

您的目标是将您的“常规”Web 文件与您的 phpMyAdmin 安装完全分离。

应该强调的是,Nginx 中的每个服务器配置可以(并且应该)只有一个 webroot。话虽这么说,这些是您的选择:

  • 将 phpMyAdmin 安装在您的 webroot 下的目录中,在您的例子中是/var/www/phpmyadmin.可以通过以下方式访问它http://localhost/phpmyadmin

    这是最简单的配置,为了完整起见,我将其包含在此处(以及来自搜索引擎的人们)。

  • 将 phpMyAdmin 安装在 webroot 之外的目录中,然后创建一个phpmyadmin在 webroot 中命名的指向该目录的符号链接。在这种情况下,您需要确保已disable_symlinks off在服务器配置中指定。

  • 您可以通过创建 2 个监听不同端口、具有不同 Webroot 并通过 proxy_pass 指令进行通信的服务器配置来实现同一虚拟主机上的分离。这种配置的基本概要如下:

    server {
        listen   80;
        server_name localhost;
        root /var/www/htdocs;
        index index.php index.html index.htm;
    
        location /phpmyadmin {
            proxy_pass http://127.0.0.1:8080/;
        }
    
        # ...Add more location directives, php support, etc...
    }
    
    server {
        listen 8080;
        server_name localhost;
        root /var/www/phpmyadmin;
        index index.php index.html index.htm;
    
        # ...Specify additional location directives, php support, etc...
    }
    

    在这种情况下,对 phpMyAdmin 的所有请求都将通过侦听端口 80 的服务器实例中的位置透明地传递到/phpmyadmin侦听端口 8080 的服务器实例。

  • 最后,您可以通过创建侦听同一端口但具有不同server_name指令和不同root位置的 2 个服务器配置来实现不同虚拟主机上的分离。例如,这样的基本轮廓:

    server {
        listen   80;
        server_name dev.local;
        root /var/www/htdocs;
        index index.php index.html index.htm;
    
        # ...Add more location directives, php support, etc...
    }
    
    server {
        listen   80;
        server_name phpmyadmin.local;
        root /var/www/phpmyadmin;
        index index.php index.html index.htm;
    
        # ...Specify additional location directives, php support, etc...
    }
    

然后,您可以继续将以下条目添加到您的/etc/hosts

127.0.0.1    dev.local
127.0.0.1    phpmyadmin.local

然后您可以通过 访问您的文件http://dev.local并通过 phpMyAdmin 实例访问您的文件http://phpmyadmin.local。显然,来自您的本地工作站。

相关内容