我有域example.com和子域blog.example.com 。 我有一个运行在localhost:5000的独angular兽应用程序,并使用Nginx作为反向代理。
运行example.com时,我没有任何问题。 不过,我想添加子域支持,并有一些问题。
我在example.com/blog有一些内容。 我想blog.example.com指向它,没有用户知识,使用重写。 我想映射所有的URL,所以:
blog.example.com – > localhost:5000/blog blog.example.com/index.php – > localhost:5000/blog/index.php blog.example.com/foo/bar – > localhost:5000/blog/foo/bar 我迄今为止的最佳尝试是这样的:
server { listen 80; server_name blog.example.com; location / { proxy_pass http://localhost:5000/blog/$uri; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_set_header X-Forwarded-Proto $scheme; proxy_redirect off; } client_max_body_size 4G; keepalive_timeout 10; }
这正确地重写blog.example.com ,但与blog.example.com/index.php失败:
$ curl -v 'http://blog.example.com' > GET /index.php HTTP/1.1 > Host: blog.example.com > User-Agent: curl/7.51.0 > Accept: */* > < HTTP/1.1 301 Moved Permanently < Date: Sun, 26 Mar 2017 12:29:00 GMT < Content-Type: text/html; charset=iso-8859-1 < Content-Length: 337 < Connection: keep-alive < Location: http://blog.example.com/blog/index.php
我发现我的错误是在这一行:
proxy_pass http://localhost:5000/blog/$uri;
更改为
proxy_pass http://localhost:5000/blog$uri;
代理按预期工作。
[编辑]
更好的版本,也传递查询string:
proxy_pass http://localhost:5000/blog$uri$is_args$args;