【问题标题】:Nginx: How to forward requests to a port using proxy_passNginx:如何使用 proxy_pass 将请求转发到端口
【发布时间】:2015-03-16 09:12:15
【问题描述】:

我刚刚开始使用 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 时,我希望从部署的 API 获得 JSON 响应,但我没有收到任何响应。

另外,我对www.mydomain.com 的 301 重定向不起作用。那个块是我从Nginx Pitfalls复制的代码。

我尝试过的:

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

知道我在这里缺少什么吗?

【问题讨论】:

    标签: nginx virtualhost server proxypass


    【解决方案1】:

    您不需要为您的用例显式捕获 URL。以下应该适用于您的位置块:

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

    【讨论】:

    • 我也是这么想的,但是没用……这就是我走正则表达式路线的原因。配置中必须有其他事情发生。我的另一个服务器块,它只提供静态页面,工作正常。
    【解决方案2】:

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

    我的一位同事实际上帮助我解决了这个问题。我们在本地机器上使用 telnet 通过 IP 地址连接到服务器时发现了问题,并看到 Nginx 实际上正在做我想做的事情。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-15
      • 2020-09-03
      • 1970-01-01
      • 2017-01-22
      • 1970-01-01
      • 2023-03-24
      • 2020-10-25
      • 1970-01-01
      相关资源
      最近更新 更多