2017-02-09 28 views
1

我堅持簡單的事情,請幫助。 我有2個PHP項目目錄:/ var/www/api /和/ var/www/api-beta /。 我想將它們轉發到PHP-FPM。 Nginx的配置:NGINX,轉發幾個本地主機到php -fpm

server { 
    listen 80; 
    set $doc_root /var/www/api; 
    root $doc_root; 
    index index.php index.html; 


    location /beta { 
      alias /var/www/api-beta; 
    } 


    location ~ \.php$ { 
     set $php_root /var/www/api; 
     if ($request_uri ~* /beta) { 
      set $php_root /var/www/api-beta; 
       } 

      fastcgi_pass unix:/var/run/php/php7.0-fpm.sock; 
      fastcgi_index index.php; 
      fastcgi_param SCRIPT_FILENAME $php_root$fastcgi_script_name; 
      include /etc/nginx/fastcgi_params; 


    } 
} 

我試着if ($request_uri ~* /beta)做到這一點,但沒有奏效。我覺得這個問題,因爲從/ var/www/api項目工作正常,但從/ var/www/api-beta我有「文件未找到。」錯誤。

回答

0

它可以更簡單,以創建每個PHP根location塊:

server { 
    listen 80; 
    root /var/www/api; 
    index index.php index.html; 

    location ~ \.php$ { 
     try_files $uri =404; 

     include /etc/nginx/fastcgi_params; 
     fastcgi_param SCRIPT_FILENAME $request_filename; 
     fastcgi_pass unix:/var/run/php/php7.0-fpm.sock; 
    } 

    location ^~ /beta { 
     alias /var/www/api-beta; 

     location ~ \.php$ { 
      if (!-f $request_filename) { return 404; } 

      include /etc/nginx/fastcgi_params; 
      fastcgi_param SCRIPT_FILENAME $request_filename; 
      fastcgi_pass unix:/var/run/php/php7.0-fpm.sock; 
     } 
    } 
} 

注:

  • 避免使用別名和try_files在一起。請參閱this long standing issue
  • ^~修飾符會使前綴位置優先於上面的正則表達式位置。有關更多信息,請參閱this document
+0

它的工作原理,thanx!我想,我們可以爲PHP使用相同的指令位置。 –