Nginx:如何使用proxy_pass将请求转发到端口

时间:2015-01-18 01:58:03

标签: nginx virtualhost server proxypass

我刚刚开始使用Nginx并尝试设置服务器块以将子域api.mydomain.com上的所有请求转发到端口8080.

以下是我所拥有的:

更新:

server {
  server_name api.mydomain.com;

  location / {
    proxy_pass http://127.0.0.1:8080/;
    proxy_set_header    Host            $host;
    proxy_set_header    X-Real-IP       $remote_addr;
    proxy_set_header    X-Forwarded-for $remote_addr;
  }
}

server {
  server_name www.mydomain.com;
  return 301 $scheme://mydomain.com$request_uri;
}

server {
  server_name mydomain.com;

  root /var/www/mydomain.com;
  index index.html index.htm;

  location / {
    try_files $uri $uri/ =404;
  }
}

服务器块存在于/etc/nginx/sites-available中,我在/etc/nginx/sites-enabled中创建了一个符号链接。

我的期望:

我在端口8080上运行deployd。当我转到api.mydomain.com/users时,我希望从deployd API获得JSON响应,但我没有得到任何响应。

此外,我对www.mydomain.com的301重定向无效。该块是我从Nginx Pitfalls复制的代码。

我尝试了什么:

  • 确认mydomain.com:8080/users$ curl http://127.0.0.1:8080/users会返回预期的回复。
  • 更改服务器块后重新启动nginx服务。
  • 尝试删除proxy_set_header行。

知道我在这里失踪的是什么吗?

2 个答案:

答案 0 :(得分:1)

您不需要明确捕获用例的URL。以下内容适用于您的位置块:

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

答案 1 :(得分:0)

事实证明,我的问题不在于Nginx配置,而在于我的DNS设置。我必须为每个子域(A NAMEwww)创建api条记录。菜鸟错误。

我的一位同事实际上帮我解决了这个问题。当我使用本地机器中的telnet通过IP地址连接到服务器时,我们发现了问题,并且看到Nginx实际上正在按照我的意图行事。