Izin ditolak saat membaca di hulu


40

Kami telah menggunakan aplikasi rel kami di pada nginx dan penumpang. Beberapa halaman aplikasi bisa dimuat secara parsial. Tidak ada kesalahan dalam log aplikasi. Tetapi log kesalahan nginx menunjukkan hal-hal berikut:

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"


Anda dapat mengatur level log untuk melakukan debug: nginx.org/en/docs/debugging_log.html
Rimian

Jawaban:


39

Saya memiliki masalah yang sama pada pengaturan NGINX / PHP-FPM (php-fpm = peningkatan fcgi untuk php).

Anda dapat mengetahui pengguna mana yang menjalankan proses nginx

ps aux | grep "nginx: worker process"

Dan kemudian periksa apakah izin di file proxy Anda sudah benar

ls -l /opt/nginx/proxy_temp/

Dalam kasus saya, nginx berjalan sebagai www-datadan dua direktori di direktori proxy saya milik root.

Saya belum tahu bagaimana itu terjadi, tetapi saya memperbaikinya dengan melakukan (sebagai root)

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

4
Solusi terbaik!
efkan

Mengapa belum diterima?
Kishor Pawar

1
bagi mereka yang menggunakan #openresty - "chown www-data: www-data -R / usr / local / openresty / nginx / * _ temp"
BG Bruno

1
Saya menghentikan proses nginx saya, mengganti nama folder menjadi nama lain, memulai kembali proses nginx dan telah membuat folder lagi dengan izin yang benar. Bekerja seperti pesona!
Chirayu Shishodiya

8

Anda mungkin mulai dengan root pengguna, lalu mengubahnya. Sekarang masalahnya adalah folder cache, yaitu

/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

sudah dimiliki oleh root, sehingga nginx Anda (atau apa pun yang Anda coba untuk beralih) pengguna tidak dapat mengaksesnya karena mereka memiliki izin 700.

Jadi solusinya mudah. Hentikan nginx, lalu:

rm -rf /var/cache/nginx/*

atau apa pun jalan di distro Anda dan lepaskan. Kemudian restart nginx yang akan membuat kembali folder-folder ini dengan izin yang sesuai.


8

Periksa juga file nginx.conf untuk memastikan Anda menentukan grup AND AND yang benar.

Saya punya masalah ketika izin pada direktori disetel untuk nama pengguna / nginx, tetapi pengguna nginx.conf hanya menentukan nama pengguna. Secara default, jika tidak ada grup yang diberikan ke arahan pengguna, ia menggunakan nama yang sama dengan pengguna. Jadi, nama pengguna / nama pengguna mencoba mengakses direktori alih-alih nama pengguna / nginx. Memperbarui konfigurasi telah memperbaiki masalah saya.

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


2
Bisakah Anda memposting konfigurasi yang Anda sebutkan di sini?
paweloque

4

Jadi saya melakukan semua hal di atas dan sayangnya bagi saya itu memberi saya kesalahan yang sama. Saya menjalankan aplikasi rel yang dikemas ke dalam file jar dengan torquebox pada mesin centos 6.7 dengan nginx. Saya berjuang ini selama sekitar 3 jam sampai saya menemukan solusi lain dan saya harap ini membantu orang lain. Menurut artikel ini nginx dapat berjalan pada mode penegakan. Saya hanya mengubah nginx ke mode permissive dengan

setenforce 0

Dengan itu, kesalahan sudah hilang dan saya bisa menjalankan aplikasi saya di lingkungan pementasan / produksi.

Saya tidak mengerti sampai saya menemukan kesalahan pada audit.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

Saya sangat berharap ini menyelamatkan seseorang 3 jam saya baru saja kehilangan.


1
Anda tidak salah, saya tidak tahu mengapa seseorang memilih -1 (malu padanya). Masalahnya adalah pada host dan selinux berbasis RedHat / CentOS. Salah satu caranya adalah setenforce 0 (kasar), cara lain adalah dengan setebool dan opsi jaringan.
periket2000

Ini membantu dengan CentOS 7.2.
MKatleast3

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

3

Saat memulai nginx dari akun yang tidak terjangkau, akun use_temp_path=off.

proxy_cache_path ... use_temp_path=off;

Ini diperlukan untuk menghindari nginx mencoba menempatkan file ke dalam default proxy_temp_path. Dari dokumen nginx:

Direktori untuk file sementara diatur berdasarkan parameter use_temp_path (1.7.10). Jika parameter ini dihilangkan atau disetel ke nilai aktif, direktori yang ditetapkan oleh direktif proxy_temp_path untuk lokasi yang diberikan akan digunakan. Jika nilainya dimatikan, file-file sementara akan ditempatkan langsung di direktori cache.


-3
chmod 777 /opt/nginx/proxy_temp/

Saya memiliki masalah yang sama dan diselesaikan oleh chmod ke direktori itu.


13
chmod 777 tidak pernah merupakan ide yang bagus.
sendmoreinfo
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.