(13: Quyền bị từ chối) trong khi kết nối với thượng nguồn: [nginx]


296

Tôi đang làm việc với việc cấu hình dự án Django với Nginx và Gunicorn.

Trong khi tôi đang truy cập cổng của mình gunicorn mysite.wsgi:application --bind=127.0.0.1:8001trong máy chủ Nginx, tôi gặp lỗi sau trong tệp nhật ký lỗi của mình;

2014/05/30 11:59:42 [crit] 4075 # 0: * 6 kết nối () với 127.0.0.1:8001 không thành công (13: Quyền bị từ chối) trong khi kết nối với thượng nguồn, máy khách: 127.0.0.1, máy chủ: localhost, yêu cầu: "GET / HTTP / 1.1", ngược dòng : "http://127.0.0.1:8001/", máy chủ: "localhost: 8080"

Dưới đây là nội dung của nginx.conftập tin của tôi ;

server {
    listen 8080;
    server_name localhost;
    access_log  /var/log/nginx/example.log;
    error_log /var/log/nginx/example.error.log;

    location / {
        proxy_pass http://127.0.0.1:8001;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header Host $http_host;
    }
}

Trong trang HTML tôi đang nhận được 502 Bad Gateway.

Tôi đang làm gì sai?

Câu trả lời:


680

Tôi gặp vấn đề tương tự khi Fedora 20, Nginx, Node.js và Ghost (blog) hoạt động. Hóa ra vấn đề của tôi là do SELinux .

Điều này sẽ giải quyết vấn đề:

setsebool -P httpd_can_network_connect 1

Chi tiết

Tôi đã kiểm tra lỗi trong nhật ký SELinux:

sudo cat /var/log/audit/audit.log | grep nginx | grep denied

Và thấy rằng việc chạy các lệnh sau đã khắc phục sự cố của tôi:

sudo cat /var/log/audit/audit.log | grep nginx | grep denied | audit2allow -M mynginx
sudo semodule -i mynginx.pp

Người giới thiệu:

http://blog.frag-gustav.de/2013/07/21/nginx-selinux-me-mad/

https://wiki.gentoo.org/wiki/SELinux/Tutorials/Where_to_find_SELinux_ allow_denial_details

http://wiki.gentoo.org/wiki/SELinux/Tutorials/Managing_network_port_labels

http://www.linuxprobols.org/wiki/Selinux


22
Cảm ơn, điều đó cũng đã khắc phục vấn đề của tôi, tôi đang ở trên CentOS 7.
Jahan

21
cảm ơn. Tôi cần yum install policycoreutils-pythonphải có được audit2allowđầu tiên. Tham khảo: centos.org/forums/viewtopic.php?t=5012
Gross.jonas

Cảm ơn rất nhiều vì nó sử dụng máy chủ nút. (Redhat 7)
BlaShadow

Xem thêm tại đây . Trong trường hợp của tôi, tôi đã phải thêm nginx vào nhóm người dùng trong thư mục chính của wwwroot được lưu trữ.

1
Trên Fedora 23 cài đặt policycoreutils-pythonkhông cung cấp lệnh audit2allow. Sau một số nghiên cứu tôi thấy bạn nên cài đặt gói devel yum install policycoreutils-devel. Tham khảo: danwalsh.livejournal.com/61710.html
Joseph N.

182

Tôi cũng gặp phải vấn đề này. Một giải pháp khác là chuyển đổi giá trị boolean SELinux cho mạng httpd kết nối với on(Nginx sử dụng nhãn httpd).

setsebool httpd_can_network_connect on

Để thay đổi liên tục, hãy sử dụng cờ -P.

setsebool httpd_can_network_connect on -P

Bạn có thể xem danh sách tất cả các booleans SELinux có sẵn cho httpd bằng cách sử dụng

getsebool -a | grep httpd

1
Điều này đã làm việc, cảm ơn. Tôi đã cập nhật từ CentOS 6.5 -> 6.7 và nó phải mặc định tắt giá trị trong khi cập nhật, vì nó hoạt động tốt trước khi cập nhật. Cách khắc phục đơn giản.
Mike Purcell

16

Có một vấn đề tương tự trên Centos 7. Khi tôi cố gắng áp dụng giải pháp do Sorin quy định, tôi bắt đầu di chuyển theo chu kỳ. Đầu tiên tôi có quyền {write} bị từ chối. Sau đó, khi tôi giải quyết rằng tôi đã bị từ chối {connectto}. Sau đó quay lại lần nữa để cho phép {write} bị từ chối.

Sau khi trả lời @Sid ở trên về việc kiểm tra các cờ bằng cách sử dụng getsebool -a | grep httpdvà chuyển đổi chúng, tôi thấy rằng ngoài httpd_can_network_connect bị tắt. http_anon_write cũng bị tắt dẫn đến quyền bị từ chối ghi và quyền bị từ chối {connectto}

type=AVC msg=audit(1501830505.174:799183): avc:  
denied  { write } for  pid=12144 comm="nginx" name="myroject.sock" 
dev="dm-2" ino=134718735 scontext=system_u:system_r:httpd_t:s0 
tcontext=system_u:object_r:default_t:s0 tclass=sock_file

Thu được bằng cách sử dụng sudo cat /var/log/audit/audit.log | grep nginx | grep bị từ chối như đã giải thích ở trên.

Vì vậy, tôi đã giải quyết từng cái một, bật từng lá cờ một.

setsebool httpd_can_network_connect on -P

Sau đó chạy các lệnh được chỉ định bởi @sorin và @Joseph ở trên

sudo cat /var/log/audit/audit.log | grep nginx | grep denied | 
audit2allow -M mynginx
sudo semodule -i mynginx.pp

Về cơ bản, bạn có thể kiểm tra các quyền được thiết lập trên setsebool và tương quan với lỗi nhận được từ grepp'ing 'aud.log nginx, bị từ chối


14

Tôi đã giải quyết vấn đề của mình bằng cách chạy Nginx của mình với tư cách là người dùng mà tôi hiện đang đăng nhập, mulagala .

Theo mặc định, người dùng là nginx được xác định ở phần trên cùng của nginx.conftệp như được thấy bên dưới;

user nginx; # Default Nginx user

Thay đổi nginx thành tên của người dùng hiện tại của bạn - ở đây, mulagala .

user mulagala; # Custom Nginx user (as username of the current logged in user)

Tuy nhiên, điều này có thể không giải quyết được vấn đề thực tế và thực sự có thể có tác dụng phụ thông thường.

Để có giải pháp hiệu quả, vui lòng tham khảo giải pháp của Joseph Barbere .


Cảm ơn bạn đã giúp tôi vượt qua điều này
Overlord

4

nếu lỗi "502 Bad Gateway" ném vào url api centos cho proxy proxy api qua nginx, hãy chạy lệnh sau để giải quyết vấn đề

sudo setsebool -P httpd_can_network_connect 1

2

13-cho phép-từ chối-trong khi kết nối-lên-ngược dòng trên máy chủ centos -

setsebool -P httpd_can_network_connect 1


1

Tôi cũng gặp phải vấn đề này. Tôi đang sử dụng Nginx với HHVM, giải pháp bên dưới đã khắc phục sự cố của tôi:

sudo semanage fcontext -a -t httpd_sys_rw_content_t "/etc/nginx/fastcgi_temp(/.*)?"

sudo restorecon -R -v /etc/nginx/fastcgi_temp

1
  1. Kiểm tra người dùng trong /etc/nginx/nginx.conf
  2. Thay đổi quyền sở hữu cho người dùng.
sudo chown -R nginx:nginx /var/lib/nginx

Bây giờ hãy xem điều kỳ diệu.


0

Cảm ơn bạn rất nhiều. Tôi đã áp dụng hướng dẫn này trên: Centos 7, AspNet Core 3.1, thiết lập Nginx.


0

Cảm ơn tất cả các câu trả lời. Câu trả lời của Kumar vào ngày 21 tháng 8 năm 19 lúc 12:14 đã cho tôi một thời gian nghỉ ngơi sau vài ngày khắc phục sự cố mà tôi gặp phải, tức là:

connect() to 127.0.0.1:9090 failed (13: Permission denied) while connecting to upstream, client: 127.0.0.1, server

Giải pháp tôi áp dụng như sau:

setsebool -P httpd_can_network_connect 1

-3
sudo cat /var/log/audit/audit.log | grep nginx | grep denied | audit2allow -M mynginx

sudo semodule -i mynginx.pp
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.