我正在尝试使用nginx作为反向代理,但遇到URI匹配问题
Application_1在8080上运行 Application_2运行于8181
/ api / v1 / sql url将被定向到Application_1
/ api / v1 / map和/ tiles url将定向到Application_2
和rails应用程序的其余URL。下面是我对nginx配置的尝试,但我认为Application_2匹配存在错误。
upstream application_1{
server 127.0.0.1:8080;
}
upstream application_2{
server 127.0.0.1:8181;
}
location ^~ /api/v1/sql/ {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_redirect off;
proxy_pass http://application_1;
break;
error_page 404 = /;
}
location ^~ (/api/v1/map/ | /tiles) {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_redirect off;
proxy_pass http://application_2;
break;
error_page 404 = /;
}
location / {
if ($http_origin) {
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Methods "GET,POST,OPTIONS,PUT";
add_header Access-Control-Allow-Headers Content-Type;
add_header Access-Control-Max-Age 86400;
}
passenger_spawn_method direct;
root /var/www/html ;
passenger_enabled on;
rails_env development;
}
当我尝试发布http://mywebsite.com/api/v1/map?q=abcd时,我会收到状态消息“301 Moved Permanently”,但是当我直接从应用程序访问时http://mywebsite.com:8181/api/v1/map?q=abcd。它运作正常。
此外,http://mywebsite.com/api/v1/maps必须由rails而不是application_2
提供任何人都可以帮我正确配置nginx locatin吗?
由于
答案 0 :(得分:0)
我认为您的问题与位置定义结尾处/
有关。
您正在请求/api/v1/map?q=abcd
,并且您的配置中有/api/v1/map**/**
(尾随/
)
Nginx尝试将您的/api/v1/map
请求重定向到/api/v1/map**/**
(因为它最后配置了/
),对吗?
我建议您配置您的位置:
location ^~ /api/v1/sql
location ^~ /api/v1/map
nginx中的 ^~
表示以优先级开头且具有高优先级的匹配位置。这样甚至你的/api/v1/maps
uri也应该匹配好。
希望它有所帮助。