具有多个位置的 nginx 服务器配置不起作用

Bra*_*one 7 debian configuration webserver nginx phpmyadmin

我一直试图让它工作几个小时!

我想建立一个简单的网络服务器。我的网络文件应在/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 的 sites-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;
  }
}
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

编辑:

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

  root /var/www/htdocs;

  index index.php index.html index.htm;

  location /phpmyadmin/ {
    root /var/www/phpmyadmin;
  }
Run Code Online (Sandbox Code Playgroud)

而这不会:

  index index.php index.html index.htm;

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

  location /phpmyadmin/ {
    root /var/www/phpmyadmin;
  }
Run Code Online (Sandbox Code Playgroud)

phpmyadmin 还是不行!

dka*_*dis 10

您的目标是将您的“常规”网络文件与您的 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...
    }
    
    Run Code Online (Sandbox Code Playgroud)

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

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

    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...
    }
    
    Run Code Online (Sandbox Code Playgroud)

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

127.0.0.1    dev.local
127.0.0.1    phpmyadmin.local
Run Code Online (Sandbox Code Playgroud)

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