Die Nginx-Serverkonfiguration mit mehreren Standorten funktioniert nicht

7

Ich habe seit Stunden versucht, dies zum Laufen zu bringen!

Ich möchte einen einfachen Webserver einrichten. Meine Webdateien sollen in sein /var/www. Ich möchte auch phpmyadmin haben. Ich habe ein Verzeichnis erstellt /var/phpmyadmin. Jetzt möchte ich auf normale Weise auf die normalen Webdateien zugreifen.
Zum Beispiel: Die Datei /var/www/test.phpsollte mit zugänglich sein http://localhost/test.php.
Der phpmyadmin-Teil sollte wie folgt zugänglich sein : http://localhost/phpmyadmin. Mit der Konfiguration unten bekomme ich eine 404. Auch mit dieser URL:http://localhost/phpmyadmin/index.php

Dafür habe ich diese Datei im Sites-Available-Ordner von nginx erstellt:

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;
  }
}

Was mache ich falsch?

Bearbeiten:

Interessant ist, dass dies funktioniert (Das Stammverzeichnis funktioniert ( http://localhost)):

  root /var/www/htdocs;

  index index.php index.html index.htm;

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

Und das nicht:

  index index.php index.html index.htm;

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

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

phpmyadmin funktioniert immer noch nicht!

BrainStone
quelle

Antworten:

9

Ihr Ziel ist es, Ihre "normalen" Webdateien vollständig von Ihrer phpMyAdmin-Installation zu trennen.

Es sollte betont werden, dass jede Serverkonfiguration in Nginx nur eine Webroot haben kann (und sollte). Davon abgesehen sind dies Ihre Optionen:

  • Installieren Sie phpMyAdmin in einem Verzeichnis unter Ihrer Webroot, in Ihrem Fall /var/www/phpmyadmin. Es kann über zugegriffen werdenhttp://localhost/phpmyadmin

    Dies ist die einfachste Konfiguration und ich füge sie der Vollständigkeit halber hier ein (und Leute, die von Suchmaschinen hierher kommen).

  • Installieren Sie phpMyAdmin in einem Verzeichnis außerhalb Ihrer Webroot und erstellen Sie dann einen Symlink mit dem Namen phpmyadminin Ihrer Webroot, der auf dieses Verzeichnis verweist. In diesem Fall müssen Sie sicherstellen, dass Sie disable_symlinks offin Ihrer Serverkonfiguration angegeben haben .

  • Sie können eine Trennung auf demselben vhost erreichen, indem Sie zwei Serverkonfigurationen erstellen, die unterschiedliche Ports überwachen, unterschiedliche Webroots haben und über die Anweisung proxy_pass kommunizieren. Ein grundlegender Überblick über eine solche Konfiguration ist der folgende:

    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...
    }
    

    In diesem Fall werden alle Anforderungen an phpMyAdmin transparent an die Serverinstanz weitergeleitet, die Port 8080 überwacht, und zwar über den /phpmyadminSpeicherort in der Serverinstanz, der Port 80 überwacht.

  • Schließlich können Sie eine Trennung auf verschiedenen vhosts erreichen, indem Sie zwei Serverkonfigurationen erstellen, die denselben Port überwachen, aber unterschiedliche server_nameAnweisungen und unterschiedliche rootSpeicherorte haben. Zum Beispiel eine grundlegende Gliederung wie diese:

    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...
    }
    

Dann würden Sie fortfahren und die folgenden Einträge zu Ihrem hinzufügen /etc/hosts:

127.0.0.1    dev.local
127.0.0.1    phpmyadmin.local

und dann können Sie über http://dev.localund auf Ihre phpMyAdmin-Instanz über auf Ihre Dateien zugreifen http://phpmyadmin.local. Natürlich von Ihrer lokalen Workstation.

dkaragasidis
quelle
Funktioniert immer noch nicht!
BrainStone
Ich aktualisiere meine Frage mit weiteren Ergebnissen aus meinen Versuchen, sie zum Laufen zu bringen!
BrainStone
@BrainStone Ich habe meine Antwort aktualisiert. Scheint, als wäre ich in eine der Fallstricke der Nginx-Konfiguration geraten.
Dkaragasidis
Ich möchte trotzdem meine phpmyadmin-Dateien aus meinem Webdateiverzeichnis heraushalten! Das muss möglich sein!
BrainStone
@BrainStone Sie können eine neue Serveranweisung hinzufügen, um einen anderen Port abzuhören und ein anderes Webroot zu haben, das auf die Installation von phpmyadmin verweist. Anschließend können Sie einen / phpmyadmin / -Standort erstellen, der eine proxy_pass-Direktive enthält, die auf die neue Server-Direktive verweist, die Sie erstellt haben und die für die Bereitstellung Ihrer phpmyadmin-Installation verantwortlich ist.
Dkaragasidis