2013-05-29 42 views
23

Chỉ muốn giúp ai đó ra ngoài. vâng, bạn chỉ muốn phục vụ tập tin tĩnh nhờ sủ dụng nginx, và bạn có tất cả mọi thứ ngay trong nginx.conf:Nginx phục vụ tệp tĩnh và bị 403 cấm

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

Nhưng, cuối cùng, bạn thất bại. Bạn đã nhận "403 bị cấm" từ trình duyệt ...

----------------------------------- ----- Câu trả lời bên dưới: --------------------------------------- -

giải pháp rất đơn giản:


cách 1: Chạy nginx như là người dùng như '/ root/downloads/hộp /' chủ nhân

Trong nginx.conf:

#user nobody; 
worker_processes 1; 

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

CÓ, trong dòng đầu tiên "#user noboy; "chỉ cần xóa" # "và thay đổi" ai "tên người dùng của riêng bạn trong Linux/OS X, tức là thay đổi thành" gốc "cho thử nghiệm. Các khởi động lại nginx.

Attention , Bạn nên không chạy nginx như gốc! Ở đây chỉ để thử nghiệm, đó là nguy hiểm cho các Hacker.

để tham khảo hơn, hãy xem nginx (engine X) – What a Pain in the BUM! [13: Permission denied]


Way 2: Thay đổi '/ root/downloads/hộp /' chủ sở hữu để 'www-dữ liệu' hoặc 'ai'

Trong ga:

ps aux | grep nginx 

Nhận tên người dùng chạy nginx. Phải là 'www-data' hoặc 'nobody' được xác định bởi phiên bản nginx. Sau đó nhấn vào Terminal (sử dụng 'www-data' ví dụ):

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

-------------------------- ---- Một điều quan trọng khác là: ------------------------------

Những thư mục gốc này "/", "/ root", "/ root/downloads" nên cho thực hiện (x) phép 'www-data' hoặc 'ai'. I E.

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

Để tham khảo hơn, hãy xem Resolving "403 Forbidden" errorNginx 403 forbidden for all files

+1

bạn cũng có thể cấp quyền cho các file vào nhóm nginx là trong, đó là những gì thường được thực hiện, và cũng logic – rednaw

+0

hơn một chút Kiểm tra @rednaw câu trả lời – rednaw

+0

của tôi, tôi là mới trong stackoverflow quá, xin lỗi vì nhận xét pervious, có, tôi đã làm nó sau khi bạn trả lời, nhưng tôi không thành công một lần nữa. tôi đã thay đổi chủ sở hữu thành tệp nhưng trình duyệt hiển thị cho tôi "403 bị cấm". – isaacselement

Trả lời

38

Bạn nên cung cấp cho phép nginx để đọc các tập tin. Điều đó có nghĩa là bạn nên cung cấp cho người dùng chạy quyền xử lý nginx để đọc tệp.

Thành viên này chạy quá trình nginx là cấu hình với user chỉ thị trong cấu hình nginx, thường nằm ở đâu đó trên đỉnh nginx.conf:

user www-data 

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

Đối số thứ hai bạn cung cấp cho user là nhóm, nhưng nếu bạn không chỉ định nó, nó sẽ sử dụng cùng một nhóm với người dùng, vì vậy trong ví dụ của tôi, người dùng và cả hai nhóm là www-data.

Bây giờ, các tệp bạn muốn phân phối cùng với nginx phải có quyền chính xác. Nginx nên có quyền đọc các tập tin. Bạn có thể cung cấp cho các quyền đọc nhóm www-data vào một tập tin như thế này:

chown :www-data my-file.html 

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

với chown bạn có thể thay đổi người sử dụng và nhóm chủ sở hữu của một tập tin. Trong lệnh này, tôi chỉ thay đổi nhóm, nếu bạn thay đổi người dùng, bạn sẽ chỉ định tên người dùng TRƯỚC KHI dấu hai chấm, như chown www-data:www-data my-file.html. Nhưng việc thiết lập quyền của nhóm đúng là đủ để nginx có thể đọc được tệp.

+4

'người dùng root' đã khiến vấn đề biến mất và không bao giờ hiển thị lại khuôn mặt của nó. (có thể bắt đầu tăng tốc!;-) – necromancer

+3

Nó có thể là một sửa chữa dễ dàng, nhưng chạy các chương trình như là người chủ có thể nguy hiểm. Nếu có một bóc lột trong Nginx, và nó đang chạy dưới dạng root, một cracker có thể chiếm toàn bộ hệ điều hành. – rednaw

+0

xem nhận xét tăng cường thở dài của tôi. có, nó là một mối quan tâm hợp lệ nhưng thường là máy được dành riêng cho nginx hoặc không có thông tin quan trọng vì vậy ngay cả khi một cracker mất hơn nó không phải là vấn đề lớn. và một lần nữa nó thực sự hợp lệ nếu bạn đang chạy nginx trên một serer mà cũng có tất cả IP công ty và email của bạn – necromancer

1

cho câu trả lời được chấp nhận

sudo chown -R :www-data static_folder

cho việc thay đổi chủ sở hữu nhóm của tất cả các file trong thư mục đó

1

Sau khi đào sâu vào câu trả lời rất hữu ích quyết định để thu thập tất cả những gì liên quan đến quyền như một công thức . Cụ thể, giải pháp đơn giản nhất với bảo mật tối đa (= quyền tối thiểu).

  1. Giả sử chúng tôi triển khai trang web dưới dạng người dùng admin, tức là, cô ấy sở hữu trang web và mọi thứ bên trong. Chúng tôi làm không phải muốn chạy nginx với tư cách là người dùng này (quá nhiều quyền). OK để thử nghiệm, không phải cho sản phẩm.
  2. Theo mặc định Nginx chạy công nhân như một người dùng nginx, có nghĩa là, cấu hình chứa dòng user nginx
  3. Bằng cách sử dụng mặc định nginx là trong nhóm có cùng tên: nginx.
  4. Chúng tôi muốn cấp quyền tối thiểu cho người dùng nginx mà không thay đổi quyền sở hữu tệp. Điều này dường như là an toàn nhất của các tùy chọn ngây thơ.
  5. Để phục vụ các tập tin tĩnh, các điều khoản yêu cầu tối thiểu trong hệ thống phân cấp thư mục (xem các điều khoản nhóm) nên được như thế này (sử dụng lệnh namei -l /home/admin/WebProject/site/static/hmenu.css):

    dr-xr-xr-x root root/
    drwxr-xr-x nhà gốc rễ
    drwxr-x --- quản trị nginx quản trị
    drwx - x --- quản trị nginx WebProject
    drwx - x --- quản trị trang web nginx
    drwx-- x --- admin nginx tĩnh
    -rwxr ----- admin nginx hmenu.css

  6. Tiếp theo, làm thế nào để có được bức ảnh đẹp này? Để thay đổi quyền sở hữu nhóm cho các thư mục, trước tiên, chúng tôi áp dụng sudo chown :nginx /home/admin/WebProject/site/static và sau đó lặp lại các lệnh loại bỏ các dir từ bên phải một.

  7. Để thay đổi quyền đối với dir, chúng tôi áp dụng sudo chmod g+x /home/admin/WebProject/site/static và một lần nữa xóa các thư mục.

  8. Thay đổi nhóm cho các tập tin trong thư mục/tĩnh: sudo chown -R :nginx /home/admin/WebProject/site/static

  9. Cuối cùng, cho phép thay đổi đối với các tập tin trong thư mục/tĩnh: sudo chmod g+r /home/admin/WebProject/site/static/*

(Tất nhiên người ta có thể tạo ra một nhóm chuyên dụng và thay đổi tên người dùng, nhưng điều này sẽ che khuất tường thuật bằng các chi tiết không quan trọng.)

0

Vì Nginx xử lý trực tiếp các tệp tĩnh, nên cần truy cập vào d thích hợp irectories. Chúng tôi cần cung cấp cho nó quyền thực thi cho thư mục chính của chúng tôi.

Cách an toàn nhất để thực hiện việc này là thêm người dùng Nginx vào nhóm người dùng của riêng mình. Sau đó chúng tôi có thể thêm sự cho phép thực thi cho chủ sở hữu nhóm các thư mục chính của chúng tôi, cho vừa đủ quyền truy cập cho Nginx để phục vụ các tập tin:

sudo usermod -a -G your_user nginx

chmod 710/home/your_user

Các vấn đề liên quan