2013-05-29 80 views
23

只是想幫助某人。是的,你只是想使用nginx的服務靜態文件,你得到的一切權利nginx.confNginx服務靜態文件並得到403禁止

location /static { 
     autoindex on; 
     #root /root/downloads/boxes/; 
     alias /root/downloads/boxes/; 
     } 

不過,到最後,你失敗了。您從瀏覽器中獲得「403禁止」...

----------------------------------- ----- The Answer Answer: --------------------------------------- -

解決方案是很簡單的:


方式1:作爲用戶的 '/根/下載/盒/' 所有者nginx的運行

nginx.conf

#user nobody; 
worker_processes 1; 

#error_log logs/error.log; 
#error_log logs/error.log notice; 

YES,在第一行的「#user noboy; 「只是刪除」 「變」 無人 「以自己的用戶名中的Linux/OS X,即變更爲」 「測試。重啓nginx的。

注意 ,你最好不要只是爲了測試運行nginx的!在這裏,這是危險的黑客。

更多參考,請參閱nginx (engine X) – What a Pain in the BUM! [13: Permission denied]


方法2:更改 '/根/下載/盒/' 所有者 'www數據' 或 '無人'

終端

ps aux | grep nginx 

獲取用戶名運行nginx的。應該是'www-data''nobody'由nginx的版本決定。然後,在終端(使用'WWW的數據'例如)擊中:

chown -R www-data:www-data /root/downloads/boxes/ 

-------------------------- ---- 更重要的是: ------------------------------

這些父目錄「/」「/根」「/根/下載」應該得到執行(x)的權限'www數據''無人'。即

ls -al /root 
chmod o+x /root 
chmod o+x /root/downloads 

更多參考,請參閱Resolving "403 Forbidden" errorNginx 403 forbidden for all files

+1

你也可以給文件權限的組nginx的是,這就是通常做的,也更符合邏輯 – rednaw

+0

一點點檢查我的回答 – rednaw

+0

@rednaw,我是在stackoverflow中也是新的,對於前面的評論感到抱歉,是的,我在你回答之後做了它,但是我再次失敗了。我確實將所有者更改爲文件,但瀏覽器顯示「403禁止」。 – isaacselement

回答

38

你應該給nginx的權限讀取文件。這意味着你應該給運行nginx進程權限的用戶讀取文件。

運行Nginx的過程與此用戶的user指令在nginx的配置,通常位於的nginx.conf頂部的地方配置:

user www-data 

http://wiki.nginx.org/CoreModule#user

你給user的第二個參數是組,但是如果你沒有指定它,它使用與用戶相同的一個,所以在我的例子中,用戶和組都是www-data

現在你想用nginx提供的文件應該有正確的權限。 Nginx應該有權限讀取這些文件。你可以給該組www-data讀取權限像這樣的文件:

chown :www-data my-file.html 

http://linux.die.net/man/1/chown

chown您可以更改文件的用戶和組所有者。在這個命令中,我只更改組,如果您也要更改用戶,您可以指定用戶名BEFORE冒號,如chown www-data:www-data my-file.html。但是設置組權限正確應該足以讓nginx能夠讀取文件。

+4

'用戶根'使問題消失,永遠不再顯示它的臉。 (可能過度換氣開始!;-) – necromancer

+3

這可能是一個簡單的解決方法,但以root身份運行程序可能會很危險。如果Nginx中存在一個利用漏洞,並且它以root身份運行,那麼破解者可能會接管完整的操作系統。 – rednaw

+0

看到我過度換氣的評論。是的,這是一個值得關注的問題,但通常這臺機器專門用於nginx或者沒有關鍵信息,所以即使一個破解者接管它也沒什麼大不了的。如果你在一個服務器上運行nginx,它也有你所有的公司IP和你的電子郵件 – necromancer

1

爲接受的答案

sudo chown -R :www-data static_folder

改變所有文件的組所有者對該文件夾

1

挖成非常有用的答案後,決定收集相關權限配方一切。具體而言,具有最大安全性的最簡單解決方案(=最小權限)。

  1. 假設我們以用戶admin的身份部署站點,也就是說,她擁有站點目錄和其中的所有內容。我們做而不是想以此用戶身份運行nginx(權限太多)。測試可以,不用於產品。
  2. 默認情況下,Nginx的運行工爲用戶nginx,那就是,配置包含行user nginx
  3. 默認情況下,用戶nginx是具有相同名稱的組中:nginx
  4. 我們希望在不更改文件所有權的情況下爲用戶nginx提供最小權限。這似乎是最安全的天真選擇。
  5. 爲了提供靜態文件,在文件夾層次結構中(參見組權限)的最小所需的權限應該是這樣的(使用命令namei -l /home/admin/WebProject/site/static/hmenu.css):

    DR-XR-XR-X根根/
    drwxr-XR-X根的根主
    drwxr-X ---管理nginx的管理
    drwx - X ---管理nginx的WebProject
    drwx - X ---管理nginx的網站
    drwx-- x ---管理員nginx靜態
    -rwxr -----管理員nginx hmenu.css

  6. 接下來,如何獲得這張美麗的圖片?要更改dirs的組所有權,我們首先應用sudo chown :nginx /home/admin/WebProject/site/static,然後從右側一個一個地重複刪除dirs命令。

  7. 要更改dirs的權限,我們應用sudo chmod g+x /home/admin/WebProject/site/static並再次剝離dirs。在/靜態目錄中的文件

  8. 更改組:sudo chown -R :nginx /home/admin/WebProject/site/static

  9. 最後,在/靜態目錄中的文件更改權限:sudo chmod g+r /home/admin/WebProject/site/static/*

(當然,你可以創建一個專門的組和改變用戶名,但這會掩蓋敘述不重要的細節。)

0

由於Nginx正在直接處理靜態文件,它需要訪問適當的d irectories。我們需要爲其主目錄提供可執行權限。

最安全的方法是將Nginx用戶添加到我們自己的用戶組中。然後,我們可以將執行權限添加到我們的主目錄的組擁有者,讓剛剛夠准入Nginx的服務文件:

須藤usermod命令-a -G your_user nginx的

搭配chmod 710 /家用/ your_user