簡體   English   中英

Nginx與Phusion乘客URI路由

[英]Nginx with Phusion Passenger URI routing

這是我的Nginx Server配置文件

server {
        listen   80;
        location /node {
                proxy_pass      http://127.0.0.1:8080;
                include         /etc/nginx/proxy.conf;
        }
        location /ror {
                root /var/www/ror/public;
                passenger_enabled on;
                proxy_cache        off;
                proxy_pass_header  Server;
        }
        location / {
                root /usr/share/nginx/www;
        }
}

這主要是“ HelloWorld”設置,用於同時測試REST服務器正在運行的Node和RoR。

問題是我需要將servername.com/ror轉發到/var/www/ror/public ,以便RoR做出響應。 我嘗試了一些配置,但無法弄清楚如何正確轉發。 問題似乎是ror URI段傳遞給RoR,這導致它尋找該控制器,並返回404。

只要我將/ror/public包含在URI中,將root更改為/var/www的其他配置就可以使用。

那么,有沒有辦法以這種方式在反向代理上執行子URI路由?


好的,所以我添加了重寫規則。

location /ror {
        root /var/www/ror/public;
        rewrite ^/ror/(.*)$ /$1 last;
        passenger_enabled on;
        proxy_cache        off;
        proxy_pass_header  Server;
}

但是,問題在於,現在它正在從默認根目錄提供文件,在我的安裝中,該根目錄是/usr/nginx ,並且完全忽略了location塊內的根目錄。

**我感謝您的幫助。 這是我第一次使用Nginx(通常是Apache Fiend),所以我很難理解它是如何解釋這些命令的。

/ror/a.txt在本地fs中是/var/www/ror/public/ror/a.txt ,因此您需要在location /ror使用重寫規則。

就像rewrite ^/ror(.*)$ $1;

我最終想通了。

我的VHOST部分:

server {
        #server_name domain.com;
        listen   80;
        root /var/www/rails;

        passenger_enabled on;
        passenger_base_uri /todo;

        rails_spawn_method smart;
        rails_env development;

        proxy_cache off;
        proxy_pass_header Server;

        location /node {
                proxy_pass      http://127.0.0.1:8080;
                include         /etc/nginx/proxy.conf;
        }
}

我最終創建了一個名為rails的新目錄,並在其中創建了一個指向實際應用程序公共目錄的符號鏈接。

ln -s /var/www/todo/public /var/www/rails/todo

此外,我沒有正確初始化Initial乘客,這就是為什么它沒有響應並返回錯誤。 考慮到我現在必須手動添加每個子URI應用程序,因此此設置並不理想,但是它可以正常工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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