如何为多个服务配置 NGINX 位置
How to configure NGINX Location for Multiple Service
我想配置 NGINX 作为其他微服务的反向代理。
我能够将请求从 NGINX 转发到其中一个微服务
如果我这样做 curl http://xx.xx.xx.xx:8080/
呼叫确实登陆了 consumer-portal 但是
它使用默认位置配置 /
当我评论 1st
块并为位置 /consumer-portal
配置相同的 code
并执行 curl http://xx.xx.xx.xx:8080/consumer-portal
我得到:
Cannot GET /consumer-portal
我想使用 NGINX 调用 10 多个微服务。
下面是我的 nginx.conf
文件
worker_processes 4;
events {
worker_connections 1024;
}
http {
sendfile on;
upstream consumer-portal {
server xx.xx.xx.xx:9006;
}
upstream publisher-portal {
server xx.xx.xx.xx:9001;
}
server {
listen 8080;
#1st Block
#location / {
# proxy_pass http://consumer-portal;
# proxy_redirect off;
# 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-Host $server_name;
#}
#2nd Block
location /consumer-portal {
proxy_pass http://consumer-portal;
proxy_redirect off;
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-Host $server_name;
}
#3rd Block
location /publisher-portal/ {
proxy_pass http://publisher-portal;
proxy_redirect off;
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-Host $server_name;
}
}
}
此外,如果我可以使用 docker 容器名称转发请求,请告诉我。
例如,我想使用 server consumer-portal:9006
而不是服务器 xx.xx.xx.xx:9006
请建议我需要对 .conf 文件进行哪些更改。
location /consumer-portal {
proxy_pass http://consumer-portal;
如果你的 proxy_pass
URL 只是一个 domain/IP/hostname 并且没有设置 URI 那么 Nginx 将把完整的客户端请求 URL 传递给代理以匹配请求位置块。所以在这里你的请求
http://xx.xx.xx.xx:8080/consumer-portal
将被 Nginx 代理到
http://consumer-portal/consumer-portal
如果您的 proxy_pass
URL 是一个 domain/IP/hostname 并且还附加了一个 URI,那么 Nginx 将用中的 URI 替换原始客户端请求中您的位置块的匹配部分您的指令,然后将生成的 URL 代理到上游服务器。所以如果你有 proxy_pass http://consumer-portal/new/location;
然后请求
http://xx.xx.xx.xx:8080/consumer-portal/account
将被 Nginx 代理到
http://consumer-portal/new/location/account
因为您想从对上游代理的请求中删除 /consumer-portal
,解决方案就像在 proxy_pass
指令中添加尾部斜线一样简单,如下所示:
proxy_pass http://consumer-portal/;
我想配置 NGINX 作为其他微服务的反向代理。
我能够将请求从 NGINX 转发到其中一个微服务
如果我这样做 curl http://xx.xx.xx.xx:8080/
呼叫确实登陆了 consumer-portal 但是
它使用默认位置配置 /
当我评论 1st
块并为位置 /consumer-portal
配置相同的 code
并执行 curl http://xx.xx.xx.xx:8080/consumer-portal
我得到:
Cannot GET /consumer-portal
我想使用 NGINX 调用 10 多个微服务。
下面是我的 nginx.conf
文件
worker_processes 4;
events {
worker_connections 1024;
}
http {
sendfile on;
upstream consumer-portal {
server xx.xx.xx.xx:9006;
}
upstream publisher-portal {
server xx.xx.xx.xx:9001;
}
server {
listen 8080;
#1st Block
#location / {
# proxy_pass http://consumer-portal;
# proxy_redirect off;
# 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-Host $server_name;
#}
#2nd Block
location /consumer-portal {
proxy_pass http://consumer-portal;
proxy_redirect off;
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-Host $server_name;
}
#3rd Block
location /publisher-portal/ {
proxy_pass http://publisher-portal;
proxy_redirect off;
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-Host $server_name;
}
}
}
此外,如果我可以使用 docker 容器名称转发请求,请告诉我。
例如,我想使用 server consumer-portal:9006
xx.xx.xx.xx:9006
请建议我需要对 .conf 文件进行哪些更改。
location /consumer-portal {
proxy_pass http://consumer-portal;
如果你的 proxy_pass
URL 只是一个 domain/IP/hostname 并且没有设置 URI 那么 Nginx 将把完整的客户端请求 URL 传递给代理以匹配请求位置块。所以在这里你的请求
http://xx.xx.xx.xx:8080/consumer-portal
将被 Nginx 代理到
http://consumer-portal/consumer-portal
如果您的 proxy_pass
URL 是一个 domain/IP/hostname 并且还附加了一个 URI,那么 Nginx 将用中的 URI 替换原始客户端请求中您的位置块的匹配部分您的指令,然后将生成的 URL 代理到上游服务器。所以如果你有 proxy_pass http://consumer-portal/new/location;
然后请求
http://xx.xx.xx.xx:8080/consumer-portal/account
将被 Nginx 代理到
http://consumer-portal/new/location/account
因为您想从对上游代理的请求中删除 /consumer-portal
,解决方案就像在 proxy_pass
指令中添加尾部斜线一样简单,如下所示:
proxy_pass http://consumer-portal/;