如何将nginx请求重定向到不同的路径

时间:2017-03-03 22:57:20

标签: nginx webserver phabricator

以下是我的 nginx.conf ,它会随example.com/srv/phabricator/phabricator/webroot/index.php提出请求。我想更改功能,以便在请求进入example.com/test时提供/home/phragile/public/index.php

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 个答案:

答案 0 :(得分: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下没有静态内容,您可以大大简化。