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