根据目录重定向

根据目录重定向

在我当前的负载均衡器上,我已将其设置为重定向到我的集群,如下所示:

upstream myapp1 {
    server 192.168.0.20; #RP1
}

server {
    listen 80;

    location / {
        proxy_pass http://myapp1;
        proxy_set_header Host $host;
    }
}

效果很好。

但我的网络服务器中有一个目录,它背后有很多“压力”www.example.com/local/

我想知道是否有一种方法可以重定向到负载平衡器(最强大的当前服务器),192.168.1.10以便它将所有流量带到本地目录/var/www/local/。同时upstream myapp1将重定向所有其他目录。


我尝试过这个:

好的,我想要使用的目录192.168.1.10wwww.example.com/local,在服务器上(192.168.1.10),/local我已授予此目录如下权限:

sudo chown -R www-data:www-data /local

然后我把这个放在/etc/nginx/sites-available/default192.168.1.10

upstream myapp1 {
    server 192.168.0.20; #RP1
}

server {
    listen 80;

    location / {
        proxy_pass http://myapp1;
        proxy_set_header Host $host;
    }

    location /local/ {
        root /local;
        index index.php index.html index.htm;
    }

    server_name 192.168.1.10;

    error_page 404 /404.html;
    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
        root /usr/share/nginx/html;
    }

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        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 @extensionless-php {
        rewrite ^(.*)$ $1.php last;
    }
}

但它不起作用,我收到错误日志

*1 未找到“/local/local/index.php”(2:没有此文件或目录)`

为什么它要查看目录/local/local/...此外,我现在已经添加了该文件和目录用于测试目的,并且收到了错误日志

0.0.0.0:80 上冲突的服务器名称“192.168.1.10”,已被忽略

好的,现在我已通过删除其中的其他文件来解决这个问题/etc/nginx/sites-enabled/

现在我访问时只出现 404 页面www.example.com/local/,没有错误日志

答案1

您可以指定多个location以不同方式处理请求的指令:

upstream myapp1 {
    server 192.168.0.20; #RP1
}
upstream myapp2 {
    server 192.168.0.10; # some other machine?
}

server {
    listen 80;

    # server requests to myapp1 if there is no more specific match
    location / {
        proxy_pass http://myapp1;
        proxy_set_header Host $host;
    }

    # serve requests to this path from a different host    
    location /foo/ {
        proxy_pass http://myapp2;
        proxy_set_header Host $host;
    }

    # serve requests to this path from the local disk
    location /this-server/ {
        root /var/www;
    }
}

相关内容