nginx的403 Forbidden問題


今天幫同事解決一個nginx的問題;

問題描述:

文件地址在瀏覽器中無法下載,

http://10.60.1.66:9082/upload/doc/20190510165337.docx

 

 

nginx在頁面上報錯信息:

403 Forbidden

 

Forbidden,第一反應是該文件沒有讀權限,查看該文件,妹子已經給整個目錄777權限了;

 

[root@localhost doc]# ll

total 72

-rwxrwxrwx. 1 www www 8414 May 10 16:26 20190510162651.docx

-rwxrwxrwx. 1 www www 8291 May 10 16:50 20190510165002.docx

-rwxrwxrwx. 1 www www 8413 May 10 16:50 20190510165005.docx

-rwxrwxrwx. 1 www www 8292 May 10 16:53 20190510165337.docx

-rwxrwxrwx. 1 www www 8292 May 10 16:55 20190510165553.docx

-rwxrwxrwx. 1 www www 8292 May 10 16:56 20190510165652.docx

[root@localhost doc]#

 

 

 

訪問項目根目錄下的兩個文件

http://10.60.1.66:9082/index.php

http://10.60.1.66:9082/access.log

 

 

[root@localhost server_api]# ll access.log

-rw-r--r--. 1 www www 14170 May 10 16:55 access.log

[root@localhost server_api]#

 

.php能正常訪問,上傳的文件docx, 根目錄下的.log文件無法訪問; 這些文件即使賦予777權限,也無法訪問;

 

 

查看nginx進程的用戶,發現work進程的用戶是nobody

 

[root@localhost ~]# ps -ef |grep nginx

root      37054      1  0 May04 ?        00:00:00 nginx: master process /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf

nobody    77749  37054  0 17:27 ?        00:00:00 nginx: worker process

root      77813  77798  0 17:34 pts/10   00:00:00 grep nginx

[root@localhost ~]#

 

 

看到了,就很清楚了,系統確實沒有nobody用戶,所以即使給www屬主的文件賦予777權限,nginxwork進程怎么能讀取這些文件呢?

 

index.php的文件又為什么能正常訪問呢? 因為nginx收到.php結尾的請求,就轉發給php-fpm(的默認端口9000)去處理了, php-fpmwork進程的用戶是www,所以php-fpm當然訪問自己所屬的文件啦.

[root@localhost ~]# ps -ef|grep php-fpm

root       5150      1  0 Apr28 ?        00:00:16 php-fpm: master process (/usr/local/php/etc/php-fpm.conf)

www       40653   5150  0 May05 ?        00:00:12 php-fpm: pool www

www       44580   5150  0 May06 ?        00:00:11 php-fpm: pool www

www       54400   5150  0 May08 ?        00:00:09 php-fpm: pool www

root      78344  78181  0 18:53 pts/2    00:00:00 grep php-fpm

[root@localhost ~]#

 

 

nginx中的./conf/nginx.conf中默認注釋的usernobody, 我安裝nginx,已經把user改成了www;

查看./conf/nginx.con, 果然被別人改成了nobody.  改回www,重啟nginx即可;

 

 

下載問題解決,以為到這里就結束了....

 

過了一會妹子又說啦,下載文件是好了,但有個賬號在后台管理系統中登陸成功后,首頁無法展示全部信息;之前是正常的;

 

瀏覽器<F12>查看network中的請求,發現一個獲取用戶信息的接口沒有返回數據;

這是個正式環境,我沒有權限上傳代碼,無法打log;測試環境沒有這個問題;所以我無法直接調試這個接口;

 

妹子說是我把nginxuser改為www用戶后,才出現的這個問題;那驗證下吧,

/usr/local/nginx/conf/nginx.conf中的user改回nobody,發現該管理員登陸正常,說明跟wwwnobody確實有關系;

 

 

nginx.conf中的user還是改為www,重啟nginx;

 

查找屬主為nobody用戶的文件

find / -user nobody

搜索到/usr/local/nginx/fastcgi_temp/目錄下,有大量屬主為nobody的文件,查看如下:

 

[root@localhost nginx]# ll

total 36

drwx------.  2 www  root 4096 May 10 17:24 client_body_temp

drwxr-xr-x.  3 root root 4096 May 10 19:16 conf

drwx------. 12 www  root 4096 Apr 25 13:46 fastcgi_temp

drwxr-xr-x.  2 root root 4096 Apr 24 11:04 html

drwxr-xr-x.  2 root root 4096 May 10 19:17 logs

drwx------. 12 www  root 4096 Apr 28 00:08 proxy_temp

drwxr-xr-x.  2 root root 4096 Apr 23 22:04 sbin

drwx------.  2 www  root 4096 Apr 23 22:04 scgi_temp

drwx------.  2 www  root 4096 Apr 23 22:04 uwsgi_temp

[root@localhost nginx]# cd fastcgi_temp/

[root@localhost fastcgi_temp]# ll

total 40

drwx------. 34 nobody nobody 4096 May  4 14:52 0

drwx------. 35 nobody nobody 4096 May  4 14:53 1

drwx------. 35 nobody nobody 4096 May  4 14:54 2

drwx------. 35 nobody nobody 4096 May  4 14:54 3

drwx------. 33 nobody nobody 4096 May  4 14:54 4

drwx------. 34 nobody nobody 4096 May  4 14:51 5

drwx------. 33 nobody nobody 4096 May  4 14:51 6

drwx------. 33 nobody nobody 4096 May  4 14:51 7

drwx------. 34 nobody nobody 4096 May  4 14:51 8

drwx------. 34 nobody nobody 4096 May  4 14:52 9

[root@localhost fastcgi_temp]#

 

改變nobody用戶文件的屬主和屬組都為www, 必須加-R遞歸改,只改fastcgi_tem目錄的文件權限無效;

chown -R www:www /usr/local/nginx/fastcgi_temp

 

刷新頁面問題解決.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM