如何在一台机器上设置Nginx代理两个服务?

时间:2015-08-23 14:44:38

标签: python ruby nginx reverse-proxy microservices

我用python和ruby编写了两个微服务。 python一个提供一些api请求。并且红宝石服务于其他api请求。

python one侦听端口80并且可以处理/ users / feeds请求 ruby一个侦听端口4567并且可以处理/命令/产品请求。

以下是我的配置文件。但它不适用于nginx。

upstream midgard_api_cluster
 {
     server unix:/tmp/midgard_api.sock;
  }

upstream tradeapi {
    server    127.0.0.1:4567;
 }

server {
   listen        80;
server_name my.domain.name;
client_max_body_size 20M;

set $x_remote_addr $http_x_real_ip;
if ($x_remote_addr = "") {
    set $x_remote_addr $remote_addr;
}

access_log     /var/log/nginx/midgard/access_log ;
error_log     /var/log/nginx/midgard/error_log ;
charset utf-8;
location /static/ {
        root /opt/www/templates/;
        expires 30d;
    }

location / {
        error_page      502 503 504 /500.html;
        uwsgi_pass      midgard_api_cluster;
        include     uwsgi_params;

        # proxy_redirect      default;
        proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header    X-Real-IP $x_remote_addr;
        proxy_set_header    Host $http_host;
        proxy_set_header    Range $http_range;

        proxy_connect_timeout 10;
        proxy_send_timeout 10;
        proxy_read_timeout 11;
    }

    location /products {
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header Host $host;
    proxy_set_header X-NginX-Proxy true;
    proxy_pass http://tradeapi;
    proxy_redirect off;
}

location /orders {
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header Host $host;
    proxy_set_header X-NginX-Proxy true;
    proxy_pass http://tradeapi;

    proxy_redirect off;
}

}

现在,当我使用

 curl http://my.domain.name/products 

它出现404错误,请求被定向到python服务。

curl http://my.domain.name:3000/products 

可以得到正确的回应。

如何设置nginx配置文件并将请求路由到ruby服务?

1 个答案:

答案 0 :(得分:0)

locations按顺序处理。 / - 位置在/products之前匹配,因此永远不会到达。将/放在配置文件的末尾。