我想通過Nginx
和RoR網絡服務器(如Unicorn
,Thin
或WEBrick
)在本地計算機上部署我的Ruby on Rails應用程序。爲什麼我無法通過nginx代理傳遞訪問子域?
如下圖所示,我想訪問我的web應用程序通過post
子域:
upstream sub {
server unix:/tmp/unicorn.subdomain.sock fail_timeout=0;
# server 127.0.0.1:3000;
}
server {
listen 80;
server_name post.subdomain.me;
access_log /var/www/subdomain/log/access.log;
error_log /var/www/subdomain/log/error.log;
root /var/www/subdomain;
index index.html;
location/{
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_redirect off;
try_files /system/maintenance.html $uri $uri/index.html $uri.html @ruby;
}
location @ruby {
proxy_pass http://sub;
}
}
一切工作正常,當我鍵入post.subdomain.me
我可以看到我的RoR應用程序。
問題:當我使用post.subdomain.me
網址我無法訪問我的子域(request.subdomain
返回空和request.host
回報subdomain
的subdomain.me
instaed)。但是當我使用post.subdomain.me:3000
時,每件事情都很完美(我失去了一半的頭髮來實現這一點)。爲什麼以及如何解決它?
你對HTTP服務器有什麼用?你提到過Unicorn,Thin和Webrick,但沒有說你嘗試過哪一個。 –
@TomL:所有人都有同樣的問題。 –
所有'proxy_xxx'指令都位於錯誤的'location'塊中。你需要在'location @ ruby'塊中用'proxy_pass'指令保留它們,否則它們將被忽略。 –