Nginx:如何使用 proxy_pass 将请求转发到端口
Nginx: How to forward requests to a port using proxy_pass
我刚刚开始使用 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
中创建了一个符号链接。
我的期望:
我 运行 deployd 在端口 8080 上。当我转到 api.mydomain.com/users
时,我希望从已部署的 API 得到 JSON 响应,但我没有得到任何回应。
此外,我的 www.mydomain.com
的 301 重定向无效。该块是我从 Nginx Pitfalls.
复制的代码
我尝试过的:
- 确认
mydomain.com:8080/users
和 $ curl
http://127.0.0.1:8080/users
return 预期响应。
- 更改服务器块后重新启动 nginx 服务。
- 尝试删除
proxy_set_header
行。
知道我在这里遗漏了什么吗?
您不需要为您的用例显式捕获 URL。以下应该适用于您的位置块:
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
}
事实证明,我的问题不在于 Nginx 配置,而在于我的 DNS 设置。我必须为我的每个子域(www
和 api
)创建一个 A NAME
记录。菜鸟错误。
我的一位同事实际上帮助我解决了这个问题。我们在本地机器上使用 telnet
通过 IP 地址连接到服务器时发现了这个问题,并且看到 Nginx 事实上正在做我想要的事情。
我刚刚开始使用 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
中创建了一个符号链接。
我的期望:
我 运行 deployd 在端口 8080 上。当我转到 api.mydomain.com/users
时,我希望从已部署的 API 得到 JSON 响应,但我没有得到任何回应。
此外,我的 www.mydomain.com
的 301 重定向无效。该块是我从 Nginx Pitfalls.
我尝试过的:
- 确认
mydomain.com:8080/users
和$ curl http://127.0.0.1:8080/users
return 预期响应。 - 更改服务器块后重新启动 nginx 服务。
- 尝试删除
proxy_set_header
行。
知道我在这里遗漏了什么吗?
您不需要为您的用例显式捕获 URL。以下应该适用于您的位置块:
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
}
事实证明,我的问题不在于 Nginx 配置,而在于我的 DNS 设置。我必须为我的每个子域(www
和 api
)创建一个 A NAME
记录。菜鸟错误。
我的一位同事实际上帮助我解决了这个问题。我们在本地机器上使用 telnet
通过 IP 地址连接到服务器时发现了这个问题,并且看到 Nginx 事实上正在做我想要的事情。