2014-11-24 41 views
1

我想在web服務器上創建一個子目錄,system爲其他文件夾的後端提供服務,但我遇到了一些困難。如何使用Nginx別名從其他目錄加載PHP?

服務器配置應該將system轉換爲/srv/www/xxx/backend/webindex.php,本質上system應該別名到另一個目錄的索引。

我有一個配置,如:

location /system { 
    alias /srv/www/xxx/backend/web; 
    rewrite ^(.*) /index.php?r=$1; 
    return 200 $document_root$fastcgi_script_name; 
    location ~ \.php$ { 
     fastcgi_split_path_info ^(.+\.php)(/.+)$; 
     try_files $uri =404; 

     # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini 
     fastcgi_pass unix:/var/run/php5-fpm.sock; 
     fastcgi_index index.php; 
     fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
     include fastcgi_params; 
    } 
} 

location/{ 
    rewrite /(.*) /index.php?r=$1; 
} 

location ~ \.php$ { 
    fastcgi_split_path_info ^(.+\.php)(/.+)$; 
    try_files $uri =404; 

    # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini 
    fastcgi_pass unix:/var/run/php5-fpm.sock; 
    fastcgi_index index.php; 
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
    include fastcgi_params; 
} 

我已經試過無數次的迭代(包括使用root),但即使我可以得到:

return 200 $document_root$fastcgi_script_name; 

給我:

/srv/www/xxx/backend/web/index.php 

我已經vi'ed到這個文件,以確保它的工作,當我拿出回報wget給了我一個404.我相信我錯過了一些非常簡單的事情。

有人能幫我理解什麼是錯的嗎?

+0

@XavierLucas哎呀,所以我做了,壞的副本 – Sammaye 2014-11-24 12:40:05

+0

噢好吧。你在錯誤日誌中有什麼? – 2014-11-24 12:40:58

+0

@XavierLucas nout,它只是有「進程啓動」,就是它 – Sammaye 2014-11-24 12:41:28

回答

2

由於位置php嵌套在/index.php這裏不解析URI,而是在您的配置的最後一個塊中。由於nginx別名中的long standing bug不適用於try_files,因此您需要使用root/rewrite couple instead。所以,你可以解決這個問題:

location /system { 

    root /srv/www/xxx/backend/web; 
    rewrite ^/system/(.*)$ /$1 break; 
    try_files $uri /system/index.php?r=$uri; 

    location ~ \.php$ { 
     rewrite ^/system/(.*)$ /$1 break; 
     fastcgi_split_path_info ^(.+\.php)(/.+)$; 
     try_files $uri =404; 

     # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini 
     fastcgi_pass unix:/var/run/php5-fpm.sock; 
     fastcgi_index index.php; 
     fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
     include fastcgi_params; 
    } 
} 

location/{ 
    rewrite /(.*) /index.php?r=$1; 
} 

location ~ \.php$ { 
    fastcgi_split_path_info ^(.+\.php)(/.+)$; 
    try_files $uri =404; 

    # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini 
    fastcgi_pass unix:/var/run/php5-fpm.sock; 
    fastcgi_index index.php; 
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
    include fastcgi_params; 
} 
+0

經過多次試驗和錯誤之後,我終於能夠使其正常工作 – Sammaye 2014-11-24 15:43:30

1

要完成接受的答案,我想補充一些地方獲得靜態文件的工作:

location ~ ^/system(.*) { 
    root /srv/www/xxx/backend/web; 
    rewrite ^/system/(.*)$ /$1 break; 
    try_files $uri /system/index.php?r=$1&$args; 

    location ~ \.php$ { 
     rewrite ^/system/(.*)$ /$1 break; 
     fastcgi_split_path_info ^(.+\.php)(/.+)$; 
     try_files $uri =404; 
     # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini 
     fastcgi_pass unix:/var/run/php5-fpm.sock; 
     fastcgi_index index.php; 
     fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
     include fastcgi_params; 
    } 

    location ~ (.*\.(js|css|png|jpg|gif|swf|ico|pdf|mov|fla|zip|rar|mp4|ogg|woff|ttf))$ { 
     rewrite ^/system/(.*)$ /$1 break; 
     try_files $uri =404; 
    } 
} 

的最後位置解決了靜態文件的問題,其中的文件將不會加載從這個地方。

相關問題