Дозвіл відхилено під час читання вище за течією


40

Ми розгорнули нашу програму на рейках на nginx і на пасажирах. Сторінки програми мимоволі завантажуються частково. У журналі журналу не виникає помилок. Але журнал помилок nginx показує наступне:

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"


Ви можете встановити рівень журналу для налагодження: nginx.org/en/docs/debugging_log.html
Rimian

Відповіді:


39

У мене була така ж проблема з налаштуванням NGINX / PHP-FPM (php-fpm = поліпшені fcgi для php).

Ви можете дізнатися, для якого користувача запущені процеси nginx

ps aux | grep "nginx: worker process"

Потім перевірте, чи правильні дозволи у ваших проксі-файлах

ls -l /opt/nginx/proxy_temp/

У моєму випадку nginx працює як, www-dataа два каталоги в моєму каталозі проксі належать root.

Я ще не знаю, як це сталося, але я виправив це, роблячи (як root)

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

4
Найкраще рішення!
efkan

Чому його ще не прийнято?
Кішор Павар

1
для тих, хто використовує #openresty - "chown www-data: www-data -R / usr / local / openresty / nginx / * _ temp"
BG Bruno

1
Я зупинив свій процес nginx, перейменував папку на інше ім'я, перезапустив процес nginx, і він знову створив папку з правильними дозволами. Працював як шарм!
Chirayu Shishodiya

8

Ви, ймовірно, почали з користувачем root, а потім змінили його. Тепер проблема полягає в тому, що папки кеша, тобто

/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

вже належать root, тому ваш nginx (або все, що ви намагаєтесь перейти) користувач не може отримати доступ до них, оскільки вони мають дозвіл 700.

Тож рішення легко. Зупиніть nginx, потім:

rm -rf /var/cache/nginx/*

або будь-який шлях у вашому дистрибуції та звільнення. Потім перезапустіть nginx, який знову створить ці папки з відповідними дозволами.


8

Також перевірте файл nginx.conf, щоб переконатися, що ви вказуєте правильну групу користувача І.

У мене виникла проблема, коли дозволи в каталозі були налаштовані на ім’я користувача / nginx, але користувач nginx.conf вказав лише ім'я користувача. За замовчуванням, якщо жодна група не надана інструкції користувача, вона використовує те саме ім’я, що і користувач. Отже, ім'я користувача / ім'я користувача намагалися отримати доступ до каталогу замість імені користувача / nginx. Оновлення конфігурації вирішило мої проблеми.

Дивіться: http://nginx.org/en/docs/ngx_core_module.html#user


2
Чи можете ви опублікувати згадану тут конфігурацію?
paweloque

4

Тому я зробив усе вищесказане, і, на жаль, для мене це дало ту саму помилку. У мене запущено додаток для рейок, упаковане у файл з баштою з torquebox, на машині centos 6.7 з nginx. Я боровся з цим близько 3 годин, поки не знайшов іншого рішення і сподіваюся, що це допоможе комусь іншому. Відповідно до цієї статті nginx може працювати в режимі примусового виконання. Я просто змінив nginx на дозвільний режим на

setenforce 0

З цим помилка зникла, і я зміг запустити свою програму в режимі постановки / виробництва.

Я був незрозумілий, поки не знайшов помилку на 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

Я дуже сподіваюся, що це врятує когось 3 години, які я просто втратив.


1
Ви не помиляєтесь, я не знаю, чому хтось голосує -1 (сором за нього / неї). Проблема полягає в хостах і selinux на базі RedHat / CentOS. Один із способів - setenforce 0 (грубий), інший - за допомогою параметрів setsebool та мереж.
periket2000

Це допомогло з CentOS 7.2.
MKatleast3

setsebool -P httpd_can_network_connect 1 від stackoverflow.com/a/24830777/721331
McKelvin

3

При запуску nginx з непривілейованого облікового запису use_temp_path=off.

proxy_cache_path ... use_temp_path=off;

Це потрібно, щоб nginx не намагався розмістити файли за замовчуванням proxy_temp_path. З документів nginx:

Каталог тимчасових файлів встановлюється на основі параметра use_temp_path (1.7.10). Якщо цей параметр опущено або встановлено значення увімкнено, буде використаний каталог, встановлений директивою proxy_temp_path для даного місця. Якщо значення встановлено на вимкнено, тимчасові файли будуть розміщені безпосередньо в каталозі кешу.


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.