(13: Izin ditolak) saat terhubung ke hulu: [nginx]

296

Saya bekerja dengan mengkonfigurasi proyek Django dengan Nginx dan Gunicorn.

Sementara saya mengakses port saya gunicorn mysite.wsgi:application --bind=127.0.0.1:8001di server Nginx, saya mendapatkan kesalahan berikut dalam file log kesalahan saya;

2014/05/30 11:59:42 [crit] 4075 # 0: * 6 terhubung () ke 127.0.0.1:8001 gagal (13: Izin ditolak) saat tersambung ke hulu, klien: 127.0.0.1, server: localhost, permintaan: "GET / HTTP / 1.1", upstream:, "http://127.0.0.1:8001/"host: "localhost: 8080"

Di bawah ini adalah isi nginx.conffile saya ;

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;
    }
}

Di halaman HTML saya dapatkan 502 Bad Gateway.

Kesalahan apa yang saya lakukan?

Mulagala
sumber

Jawaban:

680

Saya memiliki masalah serupa yang membuat Fedora 20, Nginx, Node.js, dan Ghost (blog) berfungsi. Ternyata masalah saya adalah karena SELinux .

Ini harus menyelesaikan masalah:

setsebool -P httpd_can_network_connect 1

Detail

Saya memeriksa kesalahan dalam log SELinux:

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

Dan menemukan bahwa menjalankan perintah berikut memperbaiki masalah saya:

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

Referensi:

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

https://wiki.gentoo.org/wiki/SELinux/Tutorials/Where_to_find_SELinux_permission_denial_details

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

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

joebarbere
sumber
22
Terima kasih, itu memperbaiki masalah saya juga, saya menggunakan CentOS 7.
Jahan
21
Terima kasih. Saya perlu yum install policycoreutils-pythonuntuk mendapatkan yang audit2allowpertama. Referensi: centos.org/forums/viewtopic.php?t=5012
gross.jonas
Terima kasih banyak, ini berhasil bagi saya menggunakan server simpul. (Redhat 7)
BlaShadow
Lihat juga di sini . Dalam kasus saya, saya harus menambahkan nginx ke grup pengguna yang direktori rumahnya wwwroot disimpan.
1
Pada Fedora 23 menginstal policycoreutils-pythontidak memberikan perintah audit2allow. Setelah beberapa penelitian saya menemukan Anda harus menginstal paket devel yum install policycoreutils-devel. Referensi: danwalsh.livejournal.com/61710.html
Joseph N.
182

Saya juga mengalami masalah ini. Solusi lain adalah dengan mengaktifkan nilai SELinux boolean untuk terhubung ke jaringan httpd on(Nginx menggunakan label httpd).

setsebool httpd_can_network_connect on

Untuk membuat perubahan tetap ada gunakan flag -P.

setsebool httpd_can_network_connect on -P

Anda dapat melihat daftar semua boolean SELinux yang tersedia untuk menggunakan httpd

getsebool -a | grep httpd
Sid
sumber
1
Ini berhasil, terima kasih. Saya memperbarui dari CentOS 6.5 -> 6.7 dan pasti nilai defaultnya mati selama pembaruan, karena itu berfungsi dengan baik sebelum pembaruan. Memperbaiki sederhana.
Mike Purcell
16

Punya masalah serupa pada Centos 7. Ketika saya mencoba menerapkan solusi yang ditentukan oleh Sorin, saya mulai bergerak dalam siklus. Pertama-tama saya mendapat izin {write} ditolak. Kemudian ketika saya dipecahkan bahwa saya memiliki izin {connectto} ditolak. Kemudian kembali lagi ke izin {write} ditolak.

Mengikuti @Sid jawaban di atas memeriksa bendera menggunakan getsebool -a | grep httpddan beralih mereka saya menemukan bahwa selain httpd_can_network_connect dimatikan. http_anon_write juga tidak aktif sehingga izin ditolak tulis dan izin ditolak {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

Diperoleh menggunakan sudo cat /var/log/audit/audit.log | grep nginx | grep ditolak seperti dijelaskan di atas.

Jadi saya memecahkannya satu per satu, mengibarkan bendera satu per satu.

setsebool httpd_can_network_connect on -P

Kemudian jalankan perintah yang ditentukan oleh @sorin dan @ Joseph di atas

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

Pada dasarnya Anda dapat memeriksa izin yang ditetapkan pada setsebool dan menghubungkannya dengan kesalahan yang diperoleh dari grepp'ing 'audit.log nginx, ditolak

buka kunci saya
sumber
14

Saya telah memecahkan masalah saya dengan menjalankan Nginx saya sebagai pengguna yang saat ini saya masuk dengannya, mulagala .

Secara default pengguna sebagai nginx didefinisikan di bagian paling atas dari nginx.conffile seperti yang terlihat di bawah ini;

user nginx; # Default Nginx user

Ubah nginx dengan nama pengguna Anda saat ini - di sini, mulagala .

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

Namun, ini mungkin tidak mengatasi masalah yang sebenarnya dan mungkin sebenarnya memiliki efek samping biasa.

Untuk solusi yang efektif, silakan merujuk ke solusi Joseph Barbere .

Mulagala
sumber
Terima kasih telah membantu saya melalui ini
Tuan
4

jika kesalahan "502 Bad Gateway" melempar url api centos untuk api gateway proksi meneruskan pada nginx, jalankan perintah berikut untuk menyelesaikan masalah

sudo setsebool -P httpd_can_network_connect 1
Ezhil Arasan
sumber
2

13-izin-ditolak-saat-menghubungkan-ke-upstreamnginx di server centos -

setsebool -P httpd_can_network_connect 1

kumar
sumber
1

Saya juga mengalami masalah ini. Saya menggunakan Nginx dengan HHVM, solusi di bawah ini memperbaiki masalah saya:

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

sudo restorecon -R -v /etc/nginx/fastcgi_temp
Sule
sumber
1
  1. Periksa pengguna /etc/nginx/nginx.conf
  2. Ubah kepemilikan menjadi pengguna.
sudo chown -R nginx:nginx /var/lib/nginx

Sekarang lihat keajaibannya.

anjaneyulubatta505
sumber
0

Terima kasih banyak. Saya telah menerapkan panduan ini pada: Centos 7, AspNet Core 3.1, pengaturan Nginx.

Quang Vu
sumber
0

Terima kasih atas jawabannya. Jawaban dari Kumar pada 21 Agustus '19 di 12:14 memberi saya jeda setelah beberapa hari memecahkan masalah yang saya miliki, yaitu:

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

Solusi yang saya terapkan adalah sebagai berikut:

setsebool -P httpd_can_network_connect 1
pengguna386578
sumber
-3
sudo cat /var/log/audit/audit.log | grep nginx | grep denied | audit2allow -M mynginx

sudo semodule -i mynginx.pp
TitaniuM
sumber