簡體   English   中英

“禁止訪問” - 乘客,Nginx,Rails

[英]“Access Forbidden” - Passenger, Nginx, Rails

我知道有大約100個問題,但經過幾個小時的研究,我找不到我的解決方案。 這是我的nginx配置:

server {
    listen 80 default_server;
    listen [::]:80 default_server ipv6only=on;

    root /home/LucyRb/public;
    passenger_enabled on;
    passenger_app_env production;

    index index.html index.htm;
    server_name <domain name>;

    location / {
            try_files $uri $uri/ /index.html;
            passenger_enabled on;
    }
}

我的/public指導:

root@Lucy:/var/www/LucyRb/public# namei -l *
f: 404.html
-rwxrwxrwx root root 404.html
f: 422.html
-rwxrwxrwx root root 422.html
f: 500.html
-rwxrwxrwx root root 500.html
f: favicon.ico
-rwxrwxrwx root root favicon.ico
f: robots.txt
-rwxrwxrwx root root robots.txt

我不認為這是一個許可問題。 我已經運行了rake db:migrate來創建數據庫,並且它有效。 我很確定環境設置正確。 我得到的只是一個文件列表(因為自動索引打開,否則我得到403)。 但路由,應用默認索引/根也不起作用。 我已經閱讀了Passenger文檔,我嘗試使用文檔和其他SO問題進行故障排除,但我似乎無法使其正常工作。

我沒有忘記bundle install和所有正確的軟件包安裝,我很確定(我忘記了嗎? mysqlrvm及其安裝rails, nginxpassenger相關步驟......可能另外2-3) 。

我知道我不應該啟動rails server因為它一次只允許1個連接。 所以nginx應該做得恰到好處,對吧? 或者這就是我應該用某些標志做的事情?

提前致謝。

大家好 在乘客的作者IRC頻道的幫助下,我能夠解決問題。

我安裝了兩次乘客。

從我接下來的文章中我沒有詳盡地討論這個話題,我假設PassengerNginx的一個可安裝模塊,這導致我使用apt-get安裝Nginx ,並通過gem安裝Passenger

這是不必要的冗余並導致沖突。

在這些情況下,要么使用apt-get要么使用gems。

passenger-install-nginx-module不僅安裝了一個模塊,還從頭開始編譯Nginx,因為Nginx不是一個可模塊化的應用程序 它要么與模塊一起編譯,要么根本沒有。

把它們加起來:

  1. 只使用一種方法來安裝Nginx && passenger。
  2. 確保配置指向正確的文件。
    我也遇到了紅寶石的問題。 確保它指向包裝器,而不是單獨的可執行文件:

     root@Lucy:/usr/local/rvm# which ruby /usr/local/rvm/rubies/ruby-2.0.0-p353/bin/ruby 

    在你的配置中:

     passenger_ruby /usr/local/rvm/wrappers/ruby-2.0.0-p353/ruby; 

建議 - 嘗試將您的應用程序移動到普通用戶可訪問的某個位置。例如主目錄

你是怎么安裝乘客的? 使用RVM? RVMSUDO還是sudo? 您可能不應該以root身份使用您的應用。 因此,文件的權限不允許乘客使用rails應用程序。

假設您的config.ru位於指定的passenger_app_root中,請嘗試刪除您的location / {...}指令,重新啟動nginx,並查看您的應用是否至少啟動。 我不是說這是修復,而是一個故障排除措施。

我打算將此放在我的評論部分,但空間和格式有限,所以:

我也看到你兩次指定passenger_enabled ,這似乎是不必要的。 我之前從未在location指令中看到過它,但這可能不是你的問題。

你的日志說什么? 您似乎沒有啟用乘客日志記錄/調試(在http指令中):

http {
...
    passenger_debug_log_file '/path/to/passenger_debug.log';
    passenger_log_level       5; # default
}

我從你的帖子中注意到的另一件事是你的公共目錄似乎不包含rails應用程序?

你有

# nginx config
root /home/LucyRb/public;

# shell
/var/www/LucyRb/public

你在/ home / LucyRb中有正確的應用程序嗎? 如果是這樣,/ var / www / LucyRb的相關性是什么? 如果這是你的配置中的錯誤,那么它可能會導致一些麻煩!

您是否嘗試將文件更改為www-data用戶?

每次我收到該錯誤都是因為Nginx沒有正確指向乘客寶石和可執行文件。 這是我的建議,讓事情有效:

  1. 卸載和/或關閉您當前安裝的任何nginx。
  2. 進入你應用的根目錄,
  3. 執行命令: passenger-install-nginx-module ,讓乘客在/opt下載,編譯和安裝nginx。
  4. 使用/opt/nginx/conf/nginx.conf的乘客腳本提供的示例配置。
  5. 要讓服務器在啟動時啟動,只需將一行/opt/nginx/sbin/nginx/etc/rc.local script

對於我在Ubuntu 10和12上運行RVM + Ruby 1.9,2.0和Rails 3和4,這個方法是可重復的,萬無一失。

暫無
暫無

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

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