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服務?
這是因爲前綴類型的位置塊(例如您擁有的兩個塊)是按**順序處理的,而且它們在配置文件中出現的位置並不重要。按照外觀順序匹配的位置塊的類型是由正則表達式定義的類型。 – Dayo
謝謝你,它的工作原理 – user702246