Quyền bị từ chối trong khi đọc ngược dòng


40

Chúng tôi đã triển khai ứng dụng rails của chúng tôi trên nginx và hành khách. Các trang ứng dụng thường xuyên được tải một phần. Không có lỗi trong nhật ký ứng dụng. Nhưng nhật ký lỗi nginx hiển thị như sau:

2011/02/14 05:49:34 [crit] 25389#0: *645 open() "/opt/nginx/proxy_temp/2/02/0000000022" failed (13: Permission denied) while reading upstream, client: x.x.x.x, server: y.y.y.y, request: "GET /signup/procedures?count=0 HTTP/1.1", upstream: "passenger:unix:/passenger_helper_server:", host: "y.y.y.y", referrer: "http://y.y.y.y/signup/procedures"


Bạn có thể đặt mức ghi nhật ký để gỡ lỗi: nginx.org/en/docs/debugging_log.html
Rimian

Câu trả lời:


39

Tôi gặp vấn đề tương tự khi thiết lập NGINX / PHP-FPM (php-fpm = fcgi được cải thiện cho php).

Bạn có thể tìm ra người dùng nào các quá trình nginx đang chạy như

ps aux | grep "nginx: worker process"

Và sau đó kiểm tra xem các quyền trong tệp proxy của bạn có đúng không

ls -l /opt/nginx/proxy_temp/

Trong trường hợp của tôi, nginx đã chạy www-datavà hai trong số các thư mục trong thư mục proxy của tôi thuộc về root.

Tôi không biết nó đã xảy ra như thế nào, nhưng tôi đã sửa nó bằng cách thực hiện (với quyền root)

chown www-data.www-data /opt/nginx/proxy_temp

4
Giải pháp tốt nhất!
efkan

Tại sao nó chưa được chấp nhận?
Kishor Pawar

1
đối với những người sử dụng #openresty - "chown www-data: www-data -R / usr / local / openresty / nginx / * _ temp"
BG Bruno

1
Tôi đã dừng quá trình nginx của mình, đổi tên thư mục thành tên khác, khởi động lại quá trình nginx và nó đã tạo lại thư mục với quyền chính xác. Làm việc như người ở!
Chirayu Shishodiya

8

Bạn có thể bắt đầu với người dùng root, sau đó thay đổi nó. Bây giờ vấn đề là các thư mục bộ đệm, tức là

/var/cache/nginx/client_temp
/var/cache/nginx/fastcgi_temp
/var/cache/nginx/proxy_temp
/var/cache/nginx/scgi_temp
/var/cache/nginx/uwsgi_temp

đã được sở hữu bởi root, vì vậy nginx của bạn (hoặc bất cứ điều gì bạn đang cố gắng chuyển sang) người dùng không thể truy cập chúng vì họ có quyền 700.

Vì vậy, giải pháp là dễ dàng. Dừng nginx, sau đó:

rm -rf /var/cache/nginx/*

hoặc bất cứ điều gì đường dẫn trên distro của bạn và phát hành. Sau đó khởi động lại nginx sẽ tạo lại các thư mục này với các quyền thích hợp.


8

Đồng thời kiểm tra tệp nginx.conf để đảm bảo bạn chỉ định đúng người dùng VÀ nhóm.

Tôi gặp vấn đề trong đó các quyền trên thư mục được thiết lập cho tên người dùng / nginx, nhưng người dùng nginx.conf chỉ xác định tên người dùng. Theo mặc định, nếu không có nhóm nào được đưa ra cho chỉ thị người dùng, nó sẽ sử dụng cùng tên với người dùng. Vì vậy, tên người dùng / tên người dùng đã cố truy cập vào một thư mục thay vì tên người dùng / nginx. Cập nhật cấu hình đã khắc phục sự cố của tôi.

Xem: http://nginx.org/en/docs/ngx_core_module.html#user


2
Bạn có thể vui lòng gửi cấu hình bạn đề cập ở đây?
paweloque

4

Vì vậy, tôi đã làm tất cả những điều trên và thật không may cho tôi, nó đã cho tôi cùng một lỗi. Tôi đang chạy một ứng dụng rails được đóng gói thành một tệp jar với torquebox trên máy 6,7 centos với nginx. Tôi đã chiến đấu với điều này trong khoảng 3 giờ cho đến khi tôi tìm thấy một giải pháp khác và tôi hy vọng nó sẽ giúp được người khác. Theo bài viết này nginx có thể chạy trên chế độ thực thi. Tôi chỉ đơn giản là thay đổi nginx sang chế độ cho phép với

setenforce 0

Cùng với đó, lỗi đã biến mất và tôi đã có thể chạy ứng dụng của mình trên môi trường dàn dựng / sản xuất.

Tôi đã không biết gì cho đến khi tôi tìm thấy lỗi trên aud.log

type=AVC msg=audit(1444454198.438:466): avc:  denied  { name_connect } for  pid=3201 comm="nginx" dest=8080 scontext=unconfined_u:system_r:httpd_t:s0 tcontext=system_u:object_r:http_cache_port_t:s0 tclass=tcp_socket

Tôi thực sự hy vọng điều này sẽ cứu ai đó trong 3 giờ tôi vừa mất.


1
Bạn không sai, tôi không biết tại sao ai đó bỏ phiếu -1 (xấu hổ với anh ấy / cô ấy). Vấn đề là ở các máy chủ và selinux dựa trên RedHat / CentOS. Một cách là setenforce 0 (thô lỗ), cách khác là với setsebool và các tùy chọn kết nối mạng.
periket2000

Nó đã giúp với CentOS 7.2.
MKatleast3

setsebool -P httpd_can_network_connect 1 từ stackoverflow.com/a/24830777/721331
McKelvin

3

Khi bắt đầu nginx từ một tài khoản không có đặc quyền các use_temp_path=off.

proxy_cache_path ... use_temp_path=off;

Điều này cần thiết để tránh nginx cố gắng đặt các tệp vào mặc định proxy_temp_path. Từ các tài liệu nginx:

Thư mục cho các tệp tạm thời được đặt dựa trên tham số use_temp_path (1.7.10). Nếu tham số này bị bỏ qua hoặc được đặt thành giá trị trên, thư mục được đặt bởi chỉ thị proxy_temp_path cho vị trí đã cho sẽ được sử dụng. Nếu giá trị được đặt thành tắt, các tệp tạm thời sẽ được đặt trực tiếp trong thư mục bộ đệm.


-3
chmod 777 /opt/nginx/proxy_temp/

Tôi đã có cùng một vấn đề và nó đã được giải quyết bằng chmod vào thư mục đó.


13
chmod 777 không bao giờ là một ý tưởng tốt.
sendmoreinfo
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.