2015-08-23 37 views
0

我已經用python和ruby寫了兩個微服務。 Python的一個服務於一些API請求。而紅寶石服務於其他api請求。如何設置Nginx在一臺機器上代理兩個服務?

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錯誤,並請求被定向到蟒蛇服務。

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

可以得到正確的反應。

如何設置nginx配置文件並將請求路由到ruby服務?

回答

0

locations按順序處理。 /-位置在/products之前匹配,所以後者永遠不會到達。將/置於配置文件的末尾。

+0

這是因爲前綴類型的位置塊(例如您擁有的兩個塊)是按**順序處理的,而且它們在配置文件中出現的位置並不重要。按照外觀順序匹配的位置塊的類型是由正則表達式定義的類型。 – Dayo

+0

謝謝你,它的工作原理 – user702246

相關問題