Question projets nginx dans des sous-dossiers


Je suis frustré par la configuration de nginx et je demande donc de l’aide pour écrire mon fichier de configuration afin de servir plusieurs projets à partir de sous-répertoires situés dans la même racine. Ce n'est pas un hébergement virtuel, car ils utilisent tous la même valeur d'hôte. Peut-être qu'un exemple clarifiera ma tentative:

  • demande 192.168.1.1/ devrait servir index.php de /var/www/public/
  • demande 192.168.1.1/wiki/ devrait servir index.php de /var/www/wiki/public/
  • demande 192.168.1.1/blog/ devrait servir index.php de /var/www/blog/public/

Ces projets utilisent PHP et utilisent fastcgi.

Ma configuration actuelle est très 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;
    }
}

J'ai essayé diverses choses avec alias et rewrite mais n'a pas été en mesure de régler les choses correctement pour fastcgi. Il semble qu'il devrait y avoir un moyen plus éloquent que d'écrire des blocs d'emplacement et de dupliquer root, index, SCRIPT_FILENAME, etc.

Tous les indicateurs pour que je me dirige dans la bonne direction sont appréciés.


10
2018-01-05 05:00


origine


Par curiosité, quelle URL pensez-vous pouvoir accéder à un fichier /var/www/public/wiki/foo.html? - natacado
C'est un bon point, Natacado. le répertoire public principal ne contiendra que quelques fichiers divers et ne devrait jamais être utilisé de toute façon. C'est une configuration interne donc je vais en avoir le contrôle. Espérons que nous n'aurons pas à le savoir :) - Timothy


Réponses:


Puisque vos projets ne sont pas réellement dans la même racine, vous doit utiliser plusieurs emplacements pour cela.

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

En outre, placez fastcgi_index dans votre fichier fastcgi_params et incluez-le au niveau du serveur, afin de garder vos emplacements php aussi petits que possible.


14
2018-01-05 06:02



C'était exactement le type de configuration que j'espérais éviter ... la duplication. Hélas, si cela est "correct", c'est ce que je ferai. Merci pour votre aide, Martin! - Timothy


Résout par emplacement + 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 
}


5
2018-01-05 07:32





Voici ce que j'ai essayé, plus de détails sur 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;
    }

0
2017-11-09 04:59