2016-09-14 1 views
0

J'essaie de configurer nginx de sorte que chaque chemin ait son propre répertoire racine. Cela fonctionne pour la plupart, mais POST pour php-FPM a lancer une 405.nginx avec une racine séparée par sous-répertoire

en train d'essayer:

location ^~ /foo { 
     alias /www/foo; 
     #index index.php; 
     try_files $uri /www/foo/index.php$request_uri; 
     access_log /var/log/nginx/foo.log main; 
     error_log /var/log/nginx/foo.log error; 
    } 

    location ^~ /bar { 
     alias /www/bar; 
     #index index.php; 
     try_files $uri /www2/bar/index.php$request_uri; 
     access_log /var/log/nginx/bar.log main; 
     error_log /var/log/nginx/bar.log error; 
    } 

    location ~ \.php { 
     set $php_root /usr/local/deploy/baz/current/web; 
     if ($request_uri ~* /foo) { 
      set $php_root /www/foo/current/web; 
     } 
     if ($request_uri ~* /bar) { 
      set $php_root /www2/bar/current/web; 
     } 

     fastcgi_pass 127.0.0.1:9000; 
     fastcgi_index index.php; 
     fastcgi_param SCRIPT_FILENAME $php_root$fastcgi_script_name; 
     fastcgi_param DOCUMENT_ROOT $php_root; 
     include  fastcgi_params; 
} 
+0

Est-ce que * any * demande POST à ​​php-fpm jeter l'erreur 405? Si non, veuillez préciser – YakovL

Répondre

0

Alias ​​n'ajoute pas chemin d'accès au chemin du fichier. Vérifiez le flux logique. Si la racine du serveur est /var/www/public, foo est situé au /var/www/foo/public, bar est situé au /var/www/bar/public. Ensuite, ce sera la config facile:

server { 
root /var/www/public; 
... 
location /foo { 
    root /var/www/foo/public; 
    } 
location ~ /foo/.+\.php$ { 
    fastcgi_param SCRIPT_FILENAME /var/www/foo/public$fastcgi_script_name; 
    # rest of fastcgi 
} 

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

location ~ /bar/.+\.php$ { 
    fastcgi_pass 127.0.0.1:9000; 
    fastcgi_param  SCRIPT_FILENAME/var/www/bar/public$fastcgi_script_name; 
    # rest of fastcgi 
} 
} # ends server 

Si vous voulez utiliser PHP dans une seule directive alors:

server { 
... 
root /var/www/public; 
... 
location /foo { 
    root /var/www/foo/public; 
    } 
location /bar { 
    root /var/www/bar/public; 
    } 

location ~ \.php$ { 
    set $php_root /var/www/public; 
    if ($request_uri ~* /foo) { 
     set $php_root /var/www/foo/public; 
    } 
    if ($request_uri ~* /bar) { 
     set $php_root /var/www/bar/public; 
    } 
    fastcgi_pass 127.0.0.1:9000; 
    fastcgi_index index.php; 
    fastcgi_param SCRIPT_FILENAME $php_root$fastcgi_script_name; 
    include /etc/nginx/fastcgi_params; 
     } 
... 
} # server block ends 

Utilisation de alias - http://nginx.org/en/docs/http/ngx_http_core_module.html#alias modificateur Nginx - http://nginx.org/en/docs/http/ngx_http_core_module.html#location

Si vous avez besoin de plus de nombre de chemin, alors vous devez créer un lien symbolique.