NGINX:没有重定向的子域到子目录

时间:2015-10-12 06:14:54

标签: redirect nginx subdomain subdirectory

我需要将子域转换为子目录,如abc.example.com => example.com/abc,我阅读了nginx论坛并尝试使用config进行代理传递,如下所示:

abc.example.com nginx配置文件:

location / {
    proxy_pass  http://example.com/abc;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
}

example.com nginx配置文件:

upstream example { 
    least_conn;
    server ip_addr_1:port;
    server ip_addr_2:port;
}
server {
    listen    80;
    server_name example.com;
    return 301 https://example.com$request_uri;
}
server {
    listen 443;
    server_name example.com
    root /var/www/test/public_html;
    index index.html index.htm;
    ssl on;    
    ssl_certificate /etc/nginx/ssl/example.com.chained.crt;
    ssl_certificate_key /etc/nginx/ssl/example.key;

    location / {
        proxy_pass http://example;
        proxy_redirect off;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_set_header X-NginX-Proxy true;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}

配置文件有效,但它打开空白页,控制台错误为:

  

未捕获的SyntaxError:意外的标记<

我意识到对于像/ api和/ css这样的调用,它必须如下所示

example.com/api
example.com/css

而不是abc.example.com:

abc.example.com/api
abc.example.com/css

所以在我如上所述更改配置文件后,如果我尝试打开abc.example.com而不是获取example.com/abc,我会获得example.com的主页。

总体:需要帮助才能将子域映射到子路径/子目录而不需要修改URL(重定向关闭),并且应在顶级(根)域调用/ api和/ css。

感谢您耐心阅读整个问题并帮助解决问题!

P.S。 我按如下方式修改了配置:paste。我们能够将带有URI的映射保留为abc.example.com但不能删除/ abc。因此,出现的URI是abc.example.com/abc,而我们需要它只是abc.example.com。简而言之,需要帮助从出现在客户端的URL中删除额外的 / abc

1 个答案:

答案 0 :(得分:1)

尝试这样的事情:

server {
  server_name abc.example.com;
  location / {
     proxy_pass http://example/abc/;
     proxy_set_header Host "example.com";
  }
  location /api {
     proxy_pass http://example;
     proxy_set_header Host "example.com";
  }
  location /css {
     proxy_pass http://example;
     proxy_set_header Host "example.com";
  }
}