2017-03-03 130 views
1

这里是我的nginx.conf供应来example.com/srv/phabricator/phabricator/webroot/index.php的任何请求。我想改变功能,如果请求进入example.com/test则提供/home/phragile/public/index.php如何nginx的请求重定向到不同的路径

daemon off; 
error_log stderr info; 
worker_processes 1; 
pid  /run/nginx.pid; 

events { 
    worker_connections 4096; 
    use epoll; 
} 

http { 
    include  /etc/nginx/mime.types; 
    default_type application/octet-stream; 
    sendfile  on; 
    keepalive_timeout 65; 
    gzip on; 
    client_max_body_size 200M; 
    client_body_buffer_size 200M; 

    map $http_upgrade $connection_upgrade { 
     default upgrade; 
     '' close; 
    } 

    upstream websocket_pool { 
     ip_hash; 
     server 127.0.0.1:22280; 
    } 

    server { 
     listen  *:80; 

     access_log /var/log/nginx/access.log; 
     error_log /var/log/nginx/error.log; 

     root /srv/phabricator/phabricator/webroot; 
     try_files $uri $uri/ /index.php; 

     location /.well-known/ { 
      root /srv/letsencrypt-webroot; 
     } 

     location/{ 
      index index.php; 

      if (!-f $request_filename) 
      { 
       rewrite ^/(.*)$ /index.php?__path__=/$1 last; 
       break; 
      } 
     } 

     location /index.php { 
      include /app/fastcgi.conf; 
      fastcgi_param PATH "/usr/local/bin:/usr/bin:/sbin:/usr/sbin:/bin"; 
      fastcgi_pass 127.0.0.1:9000; 
     } 

     location = /ws/ { 
      proxy_pass http://websocket_pool; 
      proxy_http_version 1.1; 
      proxy_set_header Upgrade $http_upgrade; 
      proxy_set_header Connection "upgrade"; 
      proxy_read_timeout 999999999; 
     } 
    } 
} 

我曾尝试以下,但它不工作:

location /test { 
    root /home/phragile/public; 
} 

有人能告诉我需要在.conf文件添加什么?

回答

1

您将需要使用alias而不是root,因为您试图将/test映射到/home/phragile/public,而后者不会以前者结束。有关更多信息,请参阅this document。您还需要在该位置执行PHP(请参阅您的location /index.php块)。

您有一个非常具体的配置,旨在执行一个PHP文件。为/test一般的解决方案可能是这样的:

location ^~ /test { 
    alias /home/phragile/public; 
    if (!-e $request_filename) { rewrite^/test/index.php last; } 

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

     include /app/fastcgi.conf; 
     fastcgi_param PATH "/usr/local/bin:/usr/bin:/sbin:/usr/sbin:/bin"; 
     fastcgi_pass 127.0.0.1:9000; 

     fastcgi_param SCRIPT_FILENAME $request_filename; 
    } 
} 

我已经粘贴现有的FastCGI指令(这我相信是为你工作)和SCRIPT_FILENAME添加所需的值(假设你使用php_fpm或类似)。

当然,如果在/test下没有静态内容,则可以大大简化。

+0

这个工作时,我尝试了下面的URI:'http:// code.baqar.xgrid/test/index.php' 我需要改变什么才能使它只使用'http://代码。 baqar.xgrid/test /' –

+1

将“index index.php”语句移动到服务器块中,以便它由新的位置块继承。 –

相关问题