Nginx racines multiples

13

Je voudrais détourner les demandes vers un sous-répertoire particulier, vers un autre emplacement racine. Comment? Mon bloc existant est:

server {
    listen       80;
    server_name  www.domain.com;

    location / {
        root   /home/me/Documents/site1;
        index  index.html;
    }

    location /petproject {
        root   /home/me/pet-Project/website;
        index  index.html;
        rewrite ^/petproject(.*)$ /$1;
    }

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    } }

Autrement dit, http://www.domain.com devrait servir /home/me/Documents/site1/index.html tandis que http://www.domain.com/petproject devrait servir / home / me / pet-Project / website /index.html - il semble que nginx réexécute toutes les règles après le remplacement, et http://www.domain.com/petproject sert juste /home/me/Documents/site1/index.html.

Michael restaure Monica Cellio
la source

Réponses:

27

La configuration a le problème habituel qui se produit généralement avec nginx. Autrement dit, en utilisant la rootdirective à l'intérieur du locationbloc.

Essayez d'utiliser cette configuration au lieu de vos locationblocs actuels :

root /home/me/Documents/site1;
index index.html;

location /petproject {
    alias /home/me/pet-Project/website;
}

Cela signifie que le répertoire par défaut de votre site Web est /home/me/Documents/site1, et pour l' /petprojectURI, le contenu est servi à partir du /home/me/pet-Project/websiterépertoire.

Tero Kilkanen
la source
4

Vous avez besoin de l' breakindicateur ajouté à la règle de réécriture, afin que le traitement s'arrête, et comme il se trouve à l'intérieur d'un bloc d'emplacement, le traitement se poursuivra à l'intérieur de ce bloc:

rewrite ^/petproject/?(.*)$ /$1 break;

Remarque J'ai également ajouté /?au modèle de correspondance afin de ne pas vous retrouver avec des doubles barres obliques au début de l'URL.

gémir
la source
La réécriture n'est pas du tout nécessaire ici lorsque la aliasdirective est utilisée comme elle devrait l'être ici.
Tero Kilkanen du