Nginx-Projekte in Unterordnern

10

Ich bin frustriert über meine Nginx-Konfiguration und bitte um Hilfe beim Schreiben meiner Konfigurationsdatei, um mehrere Projekte aus Unterverzeichnissen im selben Stammverzeichnis zu bedienen. Dies ist kein virtuelles Hosting, da alle denselben Hostwert verwenden. Vielleicht verdeutlicht ein Beispiel meinen Versuch:

  • Anfrage 192.168.1.1/soll dazu dienen , index.phpaus/var/www/public/
  • Anfrage 192.168.1.1/wiki/soll dazu dienen , index.phpaus/var/www/wiki/public/
  • Anfrage 192.168.1.1/blog/soll dazu dienen , index.phpaus/var/www/blog/public/

Diese Projekte verwenden PHP und verwenden fastcgi.

Meine aktuelle Konfiguration ist sehr minimal.

server {
    listen 80 default;
    server_name localhost;

    access_log /var/log/nginx/localhost.access.log;

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

    location ~ \.php$ {
        fastcgi_pass  127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME /var/www$fastcgi_script_name;
        include fastcgi_params;
    }
}

Ich habe verschiedene Dinge mit ausprobiert aliasund rewritekonnte die Dinge für Fastcgi nicht richtig einstellen. Es scheint , es sollte ein beredter Weise als Standort Blöcke zu schreiben und zu duplizieren root, index, SCRIPT_FILENAMEusw.

Alle Hinweise, die mich in die richtige Richtung bringen, sind willkommen.

Timothy
quelle
Unter welcher URL können Sie aus Neugier auf eine Datei /var/www/public/wiki/foo.html zugreifen?
Natacado
Das ist ein guter Punkt, Natacado. Das öffentliche Hauptverzeichnis besteht nur aus ein paar verschiedenen Dateien und sollte sowieso nie wirklich verwendet werden. Es ist eine interne Einrichtung, also werde ich die Kontrolle darüber haben. Hoffentlich müssen wir es nicht herausfinden :)
Timothy

Antworten:

16

Da sich Ihre Projekte nicht im selben Stamm befinden, müssen Sie hierfür mehrere Speicherorte verwenden.

location /wiki {
    root /var/www/wiki/public;
}

location ~ /wiki/.+\.php$ {
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_param  SCRIPT_FILENAME /var/www/wiki/public$fastcgi_script_name;
}

location /blog {
    root /var/www/blog/public;
}

location ~ /blog/.+\.php$ {
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_param  SCRIPT_FILENAME /var/www/blog/public$fastcgi_script_name;
}

Fügen Sie außerdem fastcgi_index in Ihre Datei fastcgi_params ein und fügen Sie es auf Serverebene ein, damit Sie Ihre PHP-Speicherorte so klein wie möglich halten.

Martin Fjordvald
quelle
1
Dies war genau die Art von Konfiguration, die ich vermeiden wollte ... Doppelarbeit. Ach, wenn das "richtig" ist, dann werde ich das tun. Danke für deine Hilfe, Martin!
Timothy
7

Löst nach Standort + Alias:


location / {
   root /var/www/public;
   index index.php;
}
location /blog/ {
   alias /var/www/blog/public/;
   index index.php;
}
location /wiki/ {
   alias /var/www/wiki/public/;
   index index.php;
}

location ~ \.php$ {
   #your fastcgi configuration here 
}

Vadim
quelle
0

Hier ist, was ich versucht habe, weitere Details unter http://programmersjunk.blogspot.com/2013/11/nginx-multiple-sites-in-subdirectories.html

    location /Site1/ {
            root /usr/share/nginx/www/Site1;
           try_files $uri $uri/ /index.php?$query_string;
    }

    # the images need a seperate entry as we dont want to concatenate that with index.php      
    location ~ /Site1/.+\.(jpg|jpeg|gif|css|png|js|ico|xml)$ {
            root /usr/share/nginx/www/Site1;
    }
    # pass the PHP scripts to FastCGI server
    location ~ /Site1/.+\.php$ {
            fastcgi_split_path_info ^(.+\.php)(/.+)$;
            allow 127.0.0.1;
    #       # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
    #       # With php5-fpm:
            fastcgi_pass unix:/var/run/php5-fpm.sock;
            include fastcgi_params;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            fastcgi_index index.php;
    }

location /Site3/ {
            root    /usr/share/nginx/www/Site3;
    }

    # pass the PHP scripts to FastCGI server
    location ~ /Site3/.+\.php$ {
            allow 127.0.0.1;
            fastcgi_pass unix:/var/run/php5-fpm.sock;
            include fastcgi_params;
            #we are directly using the $request_filename as its a single php script
            fastcgi_param SCRIPT_FILENAME $request_filename;
    }
Appcoder
quelle