我有以下API:
我想使用NGINX将它们全部运行在以下位置:
本地主机:443 / API /
由于客户跨越两台服务器,这似乎非常困难。
这是我从订单开始的失败尝试
server {
listen 443;
server_name localhost;
location /api/orders {
proxy_pass https://localhost:500/api/orders;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
}
}
server {
listen 443;
server_name localhost;
location /api/customers/$id/billing {
proxy_pass https://localhost:400/api/customers/$id/billing;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
}
}
server {
listen 443;
server_name localhost;
location /api/customers {
proxy_pass https://localhost:300/api/customers;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
}
}
任何事情都可以解决?谢谢!
答案 0 :(得分:14)
这三个服务由同一服务器代理(就nginx
而言),因此必须在一个location
块中构造为三个server
块。有关详细信息,请参阅this document。
如果您只是未经修改地传递原始URI,则无需在proxy_pass
语句中指定URI。
server {
{
listen 443;
server_name localhost;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
location /api/orders {
proxy_pass https://localhost:500;
}
location /api/customers {
proxy_pass https://localhost:400;
}
location = /api/customers {
proxy_pass https://localhost:300;
}
}
如果proxy_set_header
语句相同,则可以在父块中指定它们一次。
所需的location
语句类型取决于localhost:300/api/customers/
服务处理的URI范围。如果它是一个URI,则=
语法将起作用。如果它是任何与/api/customers/:id/billing
不匹配的URI,那么您将需要使用正则表达式位置块。有关详细信息,请参阅this document。
除非您在此处终止SSL,否则我不确定这是否有效。这是配置reverse proxy as a secure server。
答案 1 :(得分:2)
被接受的答案对我不起作用;我有三台服务器作为Kubernetes服务运行,它们映射到不同的群集IP(只能从Kubernetes节点访问)。因此,我使用了主机IP-10.ttt.ttt.104
和以下配置,以便可以从工作网络访问这些服务。
无论如何我都不是nginx专家-但这行之有效-因此可以将其用作基础
events {
worker_connections 4096; ## Default: 1024
}
http{
server {
listen 80;
listen [::]:80;
server_name 10.ttt.ttt.104;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
location / {
proxy_pass http://10.103.152.188:80/;
}
}
server {
listen 9090;
listen [::]:9090;
server_name 10.ttt.ttt.104;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
location / {
proxy_pass http://10.107.115.44:9091/;
}
}
server {
listen 8080;
listen [::]:8080;
server_name 10.ttt.ttt.104;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
location / {
proxy_pass http://10.105.249.237:80/;
}
}
}