簡體   English   中英

Nginx位置和URI匹配

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM