web-dev-qa-db-ja.com

複数の場所を持つnginxサーバー構成が機能しない

私はこれを何時間も働かせようとしている!

シンプルなウェブサーバーをセットアップしたいのですが。私のWebファイルは/var/wwwにあります。また、phpmyadminも必要です。ディレクトリ/var/phpmyadminを作成しました。今、私は標準的な方法で通常のウェブファイルにアクセスしたいと思います。
例:ファイル/var/www/test.phphttp://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;
  }
}

何が悪いのですか?

編集:

興味深いことに、これは機能します(ルートディレクトリは機能します(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はまだ機能しません!

7
BrainStone

目標は、「通常の」WebファイルをphpMyAdminインストールから完全に分離することです。

Nginxの各サーバー構成は1つのWebrootしか持つことができない(そして持つ必要がある)ことを強調しておく必要があります。そうは言っても、これらはあなたのオプションです:

  • PhpMyAdminを、Webルートの下のディレクトリ(この場合は/var/www/phpmyadmin)にインストールします。 http://localhost/phpmyadminからアクセスできます

    これは最も単純な構成であり、完全を期すためにここに含めています(検索エンジンからここに来る人も)。

  • PhpMyAdminをウェブルート外のディレクトリにインストールしてから、そのディレクトリを指すphpmyadminという名前のシンボリックリンクをウェブルートに作成します。その場合は、サーバー構成でdisable_symlinks offを指定したことを確認する必要があります。

  • 異なるポートでリッスンし、異なるWebルートを持ち、proxy_passディレクティブを介して通信する2つのサーバー構成を作成することにより、同じvhostで分離を実現できます。このような構成の基本的な概要は次のとおりです。

    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つのサーバー構成を作成することで、異なるvhostで分離を実現できます。たとえば、次のような基本的なアウトライン:

    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を介してファイルにアクセスし、http://phpmyadmin.localを介してphpMyAdminインスタンスにアクセスできます。明らかに、ローカルワークステーションから。

9
dkaragasidis