it-swarm.dev

لم يتم تشغيله على الملف عند التشغيل PHP مع Nginx

قمت مؤخرًا بتثبيت أحدث إصدار من Nginx ويبدو أنني أواجه صعوبة في تشغيل PHP معها.

فيما يلي ملف التكوين الذي أستخدمه للمجال:

server {
listen       80;
server_name  localhost;

location / {
    root   /usr/share/nginx/html;
    index  index.php;
}

error_page   500 502 503 504  /50x.html;
location = /50x.html {
    root   /usr/share/nginx/html;
}

location ~ \.php$ {
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
    include        fastcgi_params;
}

}

إليك الخطأ الذي أواجهه في ملف سجل الأخطاء:

FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream
52
user2298995

جرب * fastcgi_param * آخر شيء من هذا القبيل

fastcgi_param SCRIPT_FILENAME /usr/share/nginx/html$fastcgi_script_name;
64
deagh

واجهت مشكلة "لم يتم العثور على الملف" ، لذا قمت بنقل تعريف "الجذر" إلى شريحة "الخادم" لتوفير قيمة افتراضية لجميع المواقع. يمكنك دائمًا تجاوز هذا عن طريق إعطاء أي موقع خاص به.

server {
    root /usr/share/nginx/www;
    location / {
            #root /usr/share/nginx/www;
    }

    location ~ \.php$ {
            try_files $uri =404;
            fastcgi_split_path_info ^(.+\.php)(/.+)$;
            fastcgi_pass 127.0.0.1:9000;
            fastcgi_index index.php;
            include fastcgi_params;
    }
}

بدلاً من ذلك ، كان بإمكاني تحديد الجذر في كلا موقعي.

38
dogatonic

ربما فات الأوان للإجابة ولكن هناك شيئين لأن هذا خطأ مزعج حقًا. الحل التالي يعمل على Mac OS X Yosemite.

  1. إنه الأفضل إذا كان لديك

fastcgi_param SCRIPT_FILENAME $ document_root $ fastcgi_script_name؛

  1. يجب أن يتضمن تضمين مع cgi params سريع فوق هذا الخط.

  2. جميع الأدلة الخاصة بك وصولاً إلى PHP الملف الذي تقوم بتنفيذه (بما في ذلك الملف أيضًا) يجب أن يكون لها أذونات a+x ، على سبيل المثال.

Sudo chmod a+x /Users/
Sudo chmod a+x /Users/oleg/
Sudo chmod a+x /Users/oleg/www/
Sudo chmod a+x /Users/oleg/www/a.php
11
Oleg Berman

في حالتي عاد PHP-script نفسه إلى رمز 404. لا علاقة له بـ nginx.

2
PHZ.fi-Pharazon

لقد أمضيت للتو 40 دقيقة في محاولة تصحيح حالة/عدم عمل مع:

$ SCRIPT_NAME=/status SCRIPT_FILENAME=/status QUERY_STRING= REQUEST_METHOD=GET cgi-fcgi -bind -connect /var/run/php5-fpm.sock

لقد أنتجت للتو خطأ "لم يتم العثور على الملف" ، بينما البرامج النصية الفعلية (التي تم العثور عليها على نظام الملفات) عملت بشكل جيد.

اتضح ، كان لدي بضع عمليات يتيمة من php5-fpm. بعد أن قتلت كل شيء وأعدت تشغيل php5-fpm بشكل نظيف ، عادت إلى وضعها الطبيعي.

أتمنى أن يساعدك هذا.

2
Alex A.

كنت أواجه نفس المشكلات ، وخلال اختباراتي ، واجهت كلتا المشكلتين:

1º: "الملف غير موجود"

و

2º: 404 صفحة خطأ

ووجدت ذلك ، في حالتي:

اضطررت إلى تحميل وحدات التخزين للمجلدات العامة الخاصة بي على كل من وحدات تخزين Nginx و PHP وحدات التخزين.

إذا تم تثبيته في Nginx ولم يتم تثبيته فيPHP، فسوف يقدم: " لم يتم العثور على الملف "

أمثلة (ستظهر "خطأ لم يتم العثور على الملف"):


services:
  php-fpm:
    build:
      context: ./docker/php-fpm
  nginx:
    build:
      context: ./docker/nginx
    volumes:
        #Nginx Global Configurations
      - ./docker/nginx/nginx.conf:/etc/nginx/nginx.conf
      - ./docker/nginx/conf.d/:/etc/nginx/conf.d

        #Nginx Configurations for you Sites:

        # - Nginx Server block
      - ./sites/example.com/site.conf:/etc/nginx/sites-available/example.com.conf
        # - Copy Public Folder:
      - ./sites/example.com/root/public/:/var/www/example.com/public
    ports:
      - "80:80"
      - "443:443"
    depends_on:
      - php-fpm
    restart: always

إذا تم تثبيته فيPHPولم يتم تركيبه في Nginx ، فسيعطي 404 خطأ في الصفحة غير موجود .

مثال (سوف يرمي 404 صفحة لم يتم العثور على خطأ):

version: '3'

services:
  php-fpm:
    build:
      context: ./docker/php-fpm
    volumes:
      - ./sites/example.com/root/public/:/var/www/example.com/public
  nginx:
    build:
      context: ./docker/nginx
    volumes:
        #Nginx Global Configurations
      - ./docker/nginx/nginx.conf:/etc/nginx/nginx.conf
      - ./docker/nginx/conf.d/:/etc/nginx/conf.d

        #Nginx Configurations for you Sites:

        # - Nginx Server block
      - ./sites/example.com/site.conf:/etc/nginx/sites-available/example.com.conf
    ports:
      - "80:80"
      - "443:443"
    depends_on:
      - php-fpm
    restart: always

و هذا من شأنه أن يعمل بشكل جيد (التركيب على كلا الجانبين) (على افتراض أن كل شيء آخر قد تم تكوينه بشكل جيد وأنت تواجه نفس المشكلة مثلي):

version: '3'

services:
  php-fpm:
    build:
      context: ./docker/php-fpm
    volumes:
      # Mount PHP for Public Folder
      - ./sites/example.com/root/public/:/var/www/example.com/public
  nginx:
    build:
      context: ./docker/nginx
    volumes:
        #Nginx Global Configurations
      - ./docker/nginx/nginx.conf:/etc/nginx/nginx.conf
      - ./docker/nginx/conf.d/:/etc/nginx/conf.d

        #Nginx Configurations for you Sites:

        # - Nginx Server block
      - ./sites/example.com/site.conf:/etc/nginx/sites-available/example.com.conf
        # - Copy Public Folder:
      - ./sites/example.com/root/public/:/var/www/example.com/public
    ports:
      - "80:80"
      - "443:443"
    depends_on:
      - php-fpm
    restart: always

إليك أيضًا مشروع مثال كامل يعمل باستخدام Nginx/Php ، لعرض مواقع متعددة: https://github.com/Pablo-Camara/simple-multi-site-docker-compose-nginx-Alpine-php-fpm-Alpine -https-ssl-الشهادات

آمل أن يساعد هذا شخصًا ، وإذا كان أي شخص يعرف المزيد عن هذا ، فيرجى إخبارنا ، شكرًا!

1
Pablo Camara

كان لي هذا الخطأ كذلك. في حالتي ، كان ذلك بسبب وجود مضيف افتراضي آخر يشير إلى نفس الدليل الجذر.

1
Sarcastron

في حالتي ، كان ذلك بسبب عدم تعيين الأذونات على دليل الويب الجذر بشكل صحيح. للقيام بذلك ، يجب أن تكون في المجلد الأصل عند تشغيل هذا في المحطة الطرفية:

Sudo chmod -R 755 htmlfoldername

سيؤدي هذا إلى تغيير جميع الملفات الموجودة في مجلد html الخاص بك ، والذي لا يوصى بإنتاجه لأسباب أمنية ، ولكن يجب أن يتيح لك رؤية الملفات الموجودة في هذا المجلد ، للتأكد من أن هذه ليست المشكلة أثناء استكشاف الأخطاء وإصلاحها.

1
rncrtr

بعد الترقية إلى PHP72 ، واجهنا مشكلة حيث فقد php-fpm.d/www.conf إعدادات المستخدم/المجموعة التي تسببت في هذا الخطأ. تأكد من التحقق من ذلك إذا كان الإعداد يتضمن php-fpm.

1
Aepod

بالنسبة لي ، كانت المشكلة مطبعي في مسار الموقع.

ربما أول شيء للتحقق من هذا النوع من المشاكل

هو الطريق إلى المشروع.

0
Stevan Tosic

عند الحصول على "لم يتم العثور على الملف" ، كانت مشكلتي أنه لم يكن هناك رابط في المجلد حيث كان يشير إلى هذا السطر في ngix config:

root /var/www/claims/web;
0
Darius.V