2016-09-14 121 views
0

我试图设置nginx,所以每个路径都有自己的根目录。这是工作的大部分,但是POST到PHP-FPM一个扔一个405nginx每个子目录有一个独立的根目录

目前正在努力:

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

是否*任何* POST请求到php-fpm抛出405错误?如果不是,请说明 – YakovL

回答

0

别名没有位置路径追加到该文件的路径。检查逻辑流程。如果服务器根位于/var/www/publicfoo位于/var/www/foo/publicbar位于/var/www/bar/public。那么,这将是很容易配置:

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 

如果你想在一个指令即可使用PHP:

用法
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 

alias - http://nginx.org/en/docs/http/ngx_http_core_module.html#alias Nginx的改性剂 - http://nginx.org/en/docs/http/ngx_http_core_module.html#location

如果你需要更多的路径,那么你必须符号链接。