पीएचपी एफपीएम अनुमति से इनकार करता है?


9

मैंने कई प्रविष्टियाँ पढ़ीं कि क्यों PHP-FPM मुझे अनुमति से वंचित कर सकता है लेकिन मैं इसे हल नहीं कर सकता।

त्रुटि लॉग इस तरह पढ़ें:

    2013/04/20 23:33:28 [crit] 15479#0: *6 open() "/var/lib/nginx/tmp/fastcgi
/2/00/0000000002" failed (13: Permission denied) while reading upstream, client: 
99.999.999.999, server: example.net, request: "GET /wp-admin/ HTTP/1.1", 
upstream: "fastcgi://unix:/tmp/php-fpm.sock:", host: "example.net", referrer:    
"http://example.net/"

Im थोड़ा लेकिन हार गया:

  1. मैंने ec2-user के लिए / var / lib / nginx / tmp सेट किया है (मैं भी +777 सब कुछ जांचने के लिए)
  2. मैंने /tmp/php-fpm.sock को ec2-user पर सेट किया है
  3. nginx conf फ़ाइल ec2-user पर सेट है
  4. php-conf उपयोगकर्ता और समूह ec2-user पर सेट है
  5. ps aux सभी php-fpm और nginx प्रक्रियाओं पर ec2-user देता है

मेरे Nginx कॉन्फ़िगरेशन में बहुत सारी फाइलें शामिल हैं, मूल जानकारी यह है:

user              ec2-user ec2-user;
worker_processes  5;  
error_log /opt/nginx/error.log;    
pid        /var/run/nginx.pid;    
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;    
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
    access_log /opt/nginx/access.log main;    
    sendfile        on;
    keepalive_timeout  65;
    client_max_body_size 13m;
    index index.php index.html index.htm;
    upstream php {
       server unix:/tmp/php-fpm.sock;
    }
    include /etc/nginx/conf.d/*.conf;
    include /mnt/web/nginx/conf.d/*.conf;
}

my /etc/nginx/conf.d/ रिक्त है मेरा /mnt/web/nginx/conf.d में वेबसाइट कॉन्फ़िगरेशन का एक बहुत सम्‍मिलित है जिसमें सभी "wordpress.conf" शामिल हैं:

location / {
    try_files $uri $uri/ /index.php?$args;
}
rewrite /wp-admin$ $scheme://$host$uri/ permanent;
location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
    expires 24h;
    log_not_found off;
}
location ~ \.php$ {
    try_files $uri =404;    
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    include fastcgi_params;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_pass php;
}

मेरा / अपना / aphp/etc/php-fpm.conf:

include=/opt/php/etc/fpm.d/*.conf
pid = run/php-fpm.pid
error_log = log/php-fpm.log
log_level = notice
[www]
listen = /tmp/php-fpm.sock
user = ec2-user
group = ec2-user
pm = dynamic
pm.max_children = 250
pm.start_servers = 20
pm.min_spare_servers = 5
pm.max_spare_servers = 35
pm.max_requests = 500
pm.status_path = /fpm-status
ping.path = /fpm-ping
slowlog = log/$pool.log.slow
catch_workers_output = yes

अद्यतन: समस्या पाई गई, इसे उत्तर में रखें


1
सेलेनक्स सक्षम है? रन गेनफोर्स या कैट / सेलिनक्स / एनफोर्स 0 सक्षम नहीं होने पर
सिल्वीउड

1
आपके नगीनक्स कॉन्फ़िगरेशन के बाकी हिस्से क्या हैं?
माइकल हैम्पटन

1
लॉग फ़ाइल से आपका सॉकेट /tmp/php-fpm.sock है लेकिन आपने / var / lib / nginx / tmp को बदल दिया है - क्या आपने nginx में chroot किया था?
सिल्वीउड

1
कमांड माउंट से आउटपुट भेजें
सिल्वीउड

1
यह भी देखें कि आपके घर की सभी निर्देशिकाएँ ... serverfault.com/questions/170192/…
silviud

जवाबों:


16

मैंने / var / lib / nginx / tmp को ec2-user / ec2-user (i भी +777 सब कुछ जांचने के लिए) सेट किया था

लेकिन ... मुझे भी ec2-user / ec2-user को / var / lib / nginx सेट करना था

... माता-पिता के नगनेक्स फोल्डर को चेंज / चेंज करने के बाद: कोई और त्रुटि नहीं।

मुझे कुछ घंटे लगे ...


7
chown -Rf www-data:www-data /var/lib/nginxमेरे लिए काम किया। कुछ भी chmod करने की जरूरत नहीं है।
क्रिस

लॉग फ़ाइलों की जाँच करने से हमेशा मदद मिलती है, कुछ भी करने से पहले उन्हें याद रखना याद रखें :)
दुःख

9

यह आम तौर पर होता है। जब usernginx.conf में सेटिंग को इससे बदला जाता है

user nginx;

कुछ और करने के लिए। इस मामले में,

user ec2-user ec2-user;

क्रिस की टिप्पणी के अनुसार चामोद कमान आवश्यक नहीं है, और एक सुरक्षा छेद खोल सकता है।

समाधान:

वर्तमान उपयोगकर्ता और समूह के स्वामित्व को / var / lib / nginx पर जांचें।

$ ls -ld /var/lib/nginx
drwx------ 3 nginx nginx 4096 Aug  5 00:05 /var/lib/nginx

यह आपको बताता है कि संभवतः एक गैर-मौजूद उपयोगकर्ता और समूह का नाम nginxइस फ़ोल्डर का मालिक है। यह फ़ाइल अपलोड करने से रोकता है।

इस स्थिति में nginx.conf में परिभाषित उपयोगकर्ता के लिए फ़ोल्डर स्वामित्व बदलें ec2-user(sudo की आवश्यकता नहीं हो सकती है)।

$ sudo chown -Rf ec2-user:ec2-user /var/lib/nginx

सत्यापित करें कि यह वास्तव में बदल गया है।

$ ls -ld /var/lib/nginx
drwx------ 3 ec2-user ec2-user 4096 Aug  5 00:05 /var/lib/nginx

अनुमति से इनकार त्रुटि अब दूर जाना चाहिए। Error.log (nginx.conf error_log स्थान पर आधारित) की जाँच करें।

$ sudo nano /opt/nginx/error.log

यदि वह काम नहीं करता है, तो आपको nginx और php-fpm को पुनः लोड करने की आवश्यकता हो सकती है।

$ sudo service nginx reload
$ sudo service php-fpm reload

यह मेरे गूगल क्लाउड Centos 7 सर्वर पर चाल है।
दामोदर बश्याल

3

अन्य किसी भी समाधान ने मेरे लिए काम नहीं किया, लेकिन मुझे यह काम करने के लिए मिला:

$ apt-get install php-pear php5-dev
$ pecl install timezonedb
$ echo 'extension=timezonedb.so'> /etc/php5/mods-available/timezonedb.ini
$ ln -sf /etc/php5/mods-available/timezonedb.ini /etc/php5/conf.d/30-timezonedb.ini
$ service php5-fpm restart

स्रोत


ठीक है, हमने कई समाधानों की कोशिश की और यह वह है जिसने काम किया। हमें नहीं पता कि यह क्यों काम किया या समस्या क्या थी, लेकिन यह किया।
नील मास्टर्स

1

मुझे फ़ाइल अपलोड के साथ भी ऐसी ही समस्या है। nginx 500 त्रुटि 2015/07/05 03:50:36 [crit] 3656#0: *7 open() "/var/lib/nginx/tmp/client_body/0000000007" failed (13: Permission denied), client: 10.0.2.2, server: www.test.com, request: "POST /api/v1/users HTTP/1.1", host: "test"

मुद्दा केवल अनुमति से संबंधित था, मैंने सिर्फ सेट किया chmod -R 755 /var/lib/nginxऔर चीजें काम कीं!


0

बस मेरी समस्या को अनुमति के साथ हल कर दिया है। सबसे आसान तरीका और सबसे सरल था php-fpm या nginx को sudo (सुपर उपयोगकर्ता) के रूप में न चलाना। आपको क्या करना होगा:

  1. nginx के लिए सभी लॉग आउटपुट स्थानों को अपने यूजरनेम पर चांस दें: yourUserName उदाहरण :chown yourUserName:yourUserName /var/log/nginx/error.log
  2. अगला अपडेट सर्वर dir के साथ ही उदाहरण के लिए :chown yourUserName:yourUserName -R /var/www

रूट का उपयोग नहीं करने से मुझे php-fpm उपयोगकर्ता या समूह या किसी सुनने वाले उपयोगकर्ता या समूह को बदलना नहीं पड़ा। सुनिश्चित करें कि आप nginx.conf 'उपयोगकर्ता' को भी टिप्पणी करते हैं क्योंकि यह वर्तमान उपयोगकर्ताओं का नाम होगा।


कृपया एक ही उत्तर को कई बार पोस्ट न करें। साथ ही, यह समस्या लंबे समय से सुलझी हुई है।
स्वेन

0

/ Var / lib / nginx / जो कुछ भी हो, पर संपादन की अनुमति के बजाय, यह अधिक समझदारी नहीं होगी कि nginx को / tmp / nginx जैसे भिन्न पथ का उपयोग करने के लिए कहें? यह मेरे लिए समस्या तय:

# create the directory
mkdir /tmp/nginx
chown -R nginx.nginx /tmp/nginx (assumes nginx user is named nginx)
chmod -R 700 /tmp/nginx

/ tmp / nginx अनुमतियाँ 700 अधिमानतः होनी चाहिए (जो तब तक कोई समस्या नहीं होनी चाहिए जब तक कि स्वामी एक ही उपयोगकर्ता /etc/nginx/nginx.conf 'उपयोगकर्ता के निर्देश में निर्दिष्ट हो) या 770 यदि किसी कारण से आपकी आवश्यकता है समूह अनुमतियों के माध्यम से i / o करने के लिए एक अलग फ़ाइल स्वामी और nginx है। ऐसा कभी नहीं देखा लेकिन कौन जानता है।

Centos7 पर, /etc/nginx/nginx.conf को संपादित करके nginx को उन नए शरीर के लिए उपयोग करने के लिए कहेंगे

...

http {
  ...
  client_body_temp_path /tmp/nginx 1 2;
  ...
}

और फिर से शुरू करें nginx (फिर से centos7)

systemctl restart nginx

कभी भी 777 की कोई बात नहीं करें। विशेष रूप से कैश नहीं! अब कोई भी स्थानीय उपयोगकर्ता आपके कैश को फिर से लिख सकता है और अपने उपयोगकर्ताओं को संभावित रूप से दुर्भावनापूर्ण डेटा भेज सकता है। अपलोड के लिए, कोई इसके बजाय अपने अपलोड को स्थानापन्न कर सकता है।
माइकल हैम्पटन

जीसस ड्यूड आराम करते हैं, यह निर्माण एक डेमो क्लस्टर का हिस्सा है। लेकिन जो लोग बेहतर नहीं जानते हैं, उनके लिए अच्छी पकड़, मैं जवाब को संपादित करूँगा।
सिलिकॉनक्रॉस्टर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.