[英]Nginx Location and URI matching
我正在嘗試使用nginx作為反向代理,但是URI匹配存在問題
Application_1運行在8080上Application_2運行在8181上
/ api / v1 / sql網址定向到Application_1
/ api / v1 / map和/ tiles網址被定向到Application_2
其余的URL到rails應用程序。 以下是我對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永久移動”,但是當我直接從應用程序訪問時http://mywebsite.com:8181/ api / v1 / map?q = abcd 。 可以。
另外, http://mywebsite.com/api/v1/maps必須由rails而不是application_2提供
有人可以幫助我正確配置nginx locatin嗎?
謝謝
我認為您的問題與在位置定義末尾加上/
有關。
您正在請求/api/v1/map?q=abcd
並且在您的配置中具有/api/v1/map**/**
(帶有/
)Nginx嘗試將301 /api/v1/map
請求重定向到/api/v1/map**/**
(因為它的末尾配置了/
),對嗎?
我建議您配置位置:
location ^~ /api/v1/sql
location ^~ /api/v1/map
nginx中的^~
表示匹配位置以開頭並具有較高的優先級。 這樣,即使您的/api/v1/maps
uri也應該匹配OK。
希望能幫助到你。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.