পিএইচপি এফপিএম অনুমতি অস্বীকার করে?


9

আমি পিএইচপি-এফপিএম কেন আমাকে অনুমতি অস্বীকার করতে পারে সে সম্পর্কে বেশ কয়েকটি এন্ট্রি পড়েছি তবে আমি এটি সমাধান করতে পারি না।

ত্রুটি লগগুলি পড়তে হবে:

    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/"

আমি কিছুটা হলেও হারিয়েছি:

  1. আমি ইসি 2-ব্যবহারকারীর কাছে / var / lib / nginx / tmp সেট করেছি (আমি চেক করার জন্য এমনকি +777 সব কিছু)
  2. আমি ইসি 2 ব্যবহারকারীর জন্য /tmp/php-fpm.sock সেট করেছি
  3. এনগিনেক্স কনফ ফাইলটি ই্যাক 2-ব্যবহারকারীতে সেট করা আছে
  4. পিএইচপি-কনফার্ট ব্যবহারকারী এবং গোষ্ঠী ই সি 2-ব্যবহারকারীকে সেট করা আছে
  5. পিএস অক্স সব পিএইচপি-এফপিএম এবং এনগিনেক্স প্রসেসে এক্স 2 ব্যবহারকারী দেয়

আমার এনগিনেক্স কনফিগারেশনে প্রচুর ফাইল অন্তর্ভুক্ত রয়েছে, মূল কনফ:

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

আমার /etc/nginx/conf.d/ খালি আমার /mnt/web/nginx/conf.d এ প্রচুর ওয়েবসাইট কনফিগারেশন রয়েছে যার মধ্যে "ওয়ার্ডপ্রেস.কনফ" অন্তর্ভুক্ত রয়েছে:

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

আমার / ওপট / পিএইচপি /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
আপনার nginx কনফিগারেশন বাকি কি?
মাইকেল হ্যাম্পটন

1
লগ ফাইল থেকে আপনার সকেটটি /tmp/php-fpm.sock হয় তবে আপনি / var / lib / nginx / tmp পরিবর্তন করেছেন - আপনি কি এনজিনেক্সে ক্রোট করেছেন?
সিলভিড

1
কমান্ড মাউন্ট থেকে আউটপুটটি প্রেরণ করুন
সিলভিউড

1
আপনার বাড়ির সমস্ত ডিরেক্টরিও সন্ধান করুন ... দেখুন সার্ভারফল্ট
প্রশ্ন /

উত্তর:


16

আমি / var / lib / nginx / tmp ই সি 2 ব্যবহারকারী / ই সি 2-ব্যবহারকারীকে সেট করে দিয়েছি (আমি এমনকি +777 সবকিছু চেক করতে পারি)

তবে ... আমাকে ইসি 2-ব্যবহারকারীর / ইসি 2-ব্যবহারকারীর সাথে / var / lib / nginx সেট করতে হয়েছিল

... পরে অভিভাবক nginx ফোল্ডারটি chogrp / chgrp করার পরে: আর কোনও ত্রুটি নেই।

আমাকে কয়েক ঘন্টা সময় নিয়েছে ...


7
chown -Rf www-data:www-data /var/lib/nginxআমার জন্য কাজ। কিছু chmod করার দরকার নেই।
ক্রিস

লগ ফাইলগুলি চেক করা সর্বদা সহায়তা করে, কোনও কিছুর আগে সেগুলি পরীক্ষা করে দেখুন:
দুঃখের কবিতা

9

এটি সাধারণত ঘটে থাকে। যখন usernginx.conf এ সেটিংস পরিবর্তন করা হয়

user nginx;

অন্য কিছু। এক্ষেত্রে,

user ec2-user ec2-user;

ক্রিসের মন্তব্যে chmod কমান্ড প্রয়োজনীয় নয়, এবং এটি একটি সুরক্ষা গর্ত খুলে দিতে পারে।

সমাধান:

/ 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

অনুমতি অস্বীকার ত্রুটি এখন চলে যাওয়া উচিত। ত্রুটি.লগটি পরীক্ষা করুন (nginx.conf ত্রুটি_লগ অবস্থানের উপর ভিত্তি করে)।

$ sudo nano /opt/nginx/error.log

যদি এটি কাজ না করে তবে আপনাকে এনজিনেক্স এবং পিএইচপি-এফপিএম পুনরায় লোড করতে হবে।

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

এটি আমার গুগল ক্লাউড সেন্টোস 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

অনুমতি সহ কেবলমাত্র আমার সমস্যাটি সমাধান করুন। সবচেয়ে সহজ উপায় এবং সবচেয়ে সহজ ছিল পিএইচপি-এফপিএম বা এনগিনেক্সকে সুডো (সুপার ব্যবহারকারী) হিসাবে চালানো না। আপনার যা করতে হবে তা হ'ল:

  1. আপনার ইউজারনামে এনগিনেক্সের জন্য সমস্ত লগ আউটপুট অবস্থানগুলি ছুঁড়ে ফেলেছে: yourUserName উদাহরণ :chown yourUserName:yourUserName /var/log/nginx/error.log
  2. পরবর্তী আপডেট সার্ভার দির পাশাপাশি উদাহরণ :chown yourUserName:yourUserName -R /var/www

রুট ব্যবহার না করে আমাকে পিএইচপি-এফপিএম ব্যবহারকারী বা গ্রুপ বা কোনও শ্রোতা ব্যবহারকারী বা গোষ্ঠী পরিবর্তন করতে হবে না। নিশ্চিত হয়ে নিন যে আপনি nginx.conf 'ব্যবহারকারী' হিসাবে মন্তব্য করেছেন কারণ এটি বর্তমান ব্যবহারকারীর নাম হবে name


দয়া করে একাধিকবার একই উত্তর পোস্ট করবেন না। এছাড়াও, এই সমস্যা দীর্ঘকাল সমাধান করা হয়েছে।
সোভেন

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 সঞ্চালনের জন্য একটি পৃথক ফাইলের মালিক এবং এনগিনেক্স রয়েছে। কখনই দেখেনি তবে কে জানে।

সেন্টোস 7-তে, ক্লায়েন্ট বডিগুলির জন্য নতুন ডিরেক্টরিটি ব্যবহার করতে এনজিনেক্সকে বলতে /etc/nginx/nginx.conf সম্পাদনা করুন

...

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

এবং nginx পুনরায় আরম্ভ করুন (আবার Centos7)

systemctl restart nginx

কখনও chmod 777 কিছুই। বিশেষ করে ক্যাশে নয়! এখন যে কোনও স্থানীয় ব্যবহারকারী আপনার ক্যাশে পুনর্লিখন করতে পারেন এবং আপনার ব্যবহারকারীদের জন্য সম্ভাব্য দূষিত ডেটা প্রেরণ করতে পারেন। আপলোডগুলির জন্য, কেউ তার পরিবর্তে নিজের আপলোডের বিকল্প দিতে পারে।
মাইকেল হ্যাম্পটন

যীশু ডুড আরাম করুন, এই বিল্ডটি একটি ডেমো ক্লাস্টারের অংশ। তবে যারা ভাল জানেন না তাদের পক্ষে ভাল ধরা, আমি উত্তরটি সম্পাদনা করব।
সিলিকনরোক স্টার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.