2014-03-03 75 views
0

我試圖運行使用nginx的反向代理,但與URI匹配Nginx的位置和URI匹配

Application_1 8080 Application_2運行在8181上運行

/API/V1/SQL網址是問題定向到Application_1
/api/v1/map和/ tiles url指向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必須由軌道,而不是application_2

送達

誰能幫我正確nginx的locatin配置?

感謝

回答

0

我覺得你的問題是關係到在位置定義的末尾有/

您請求/api/v1/map?q=abcd,並在你的配置你有/api/v1/map**/**(與後/) Nginx的嘗​​試301重定向你/api/v1/map請求/api/v1/map**/**(因爲它有它/配置末),對不對?

我會recommned配置您的位置:

location ^~ /api/v1/sql 
location ^~ /api/v1/map 

^~在nginx的手段開始比賽地點和具有高優先級。這樣即使你的/api/v1/maps uri應該匹配OK。

希望它有幫助。