我用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服务?
答案 0 :(得分:0)
locations
按顺序处理。 /
- 位置在/products
之前匹配,因此永远不会到达。将/
放在配置文件的末尾。