रिक्त PHP पृष्ठ दिखा रहा है


164

मैंने php5-fpm के साथ एक nginx सर्वर सेटअप किया है। जब मैं साइट को लोड करने की कोशिश करता हूं तो मुझे बिना किसी त्रुटि के एक खाली पृष्ठ मिलता है। Html पृष्ठों को ठीक से परोसा जाता है लेकिन php को नहीं। मैंने php.ini में display_errors को चालू करने का प्रयास किया लेकिन कोई भाग्य नहीं। php5-fpm.log कोई त्रुटि उत्पन्न नहीं कर रहा है और न ही nginx है।

nginx.conf

server {
    listen 80;
    root /home/mike/www/606club;
    index index.php index.html;
    server_name mikeglaz.com www.mikeglaz.com;
    error_log /var/log/nginx/error.log;
    location ~ \.php$ {
            #fastcgi_pass 127.0.0.1:9000;
            # With php5-fpm:
            fastcgi_pass unix:/var/run/php5-fpm.sock;
            fastcgi_index index.php;
            include fastcgi_params;
    }
}

संपादित करें

यहाँ मेरा nginx त्रुटि लॉग है:

2013/03/15 03:52:55 [error] 1020#0: *55 open() "/home/mike/www/606club/robots.txt" failed (2: No such file or directory), client: 199.30.20.40, server: mikeglaz.com, request: "GET /robots.txt HTTP/1.1", host: "mikeglaz.com"

1
स्पष्ट रूप से php-fpm को nginx द्वारा नहीं बुलाया गया था, क्या आपने nginx की त्रुटि लॉग की जाँच की है?
13:56

ऊपर मेरे अपडेट की जाँच करें।
माइक ग्लेज़

Nginx त्रुटि connect() failed ... fastcgi://127.0.0.1:9000आपके nginx conf, पुनः लोड nginx conf का विरोध करती है?
एडम्समिथ

मुझे लगता है कि यह सही है।
माइक ग्लेज़

2
मैं वास्तव में आश्चर्यचकित हूं कि यह केवल ग्रह पर कुछ हजार लोगों को प्रभावित करने के लिए लगता है, क्योंकि डिफ़ॉल्ट नग्नेक्स + php config भी इस चीज का कारण बनता है।
सलीक

जवाबों:


250

संदर्भ के लिए, मैं एक्सटेंशन के locationसाथ फाइल पकड़ने के लिए अपने ब्लॉक को संलग्न कर रहा हूं .php:

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

डबल-चेक करें /path/to/fastcgi-params, और सुनिश्चित करें कि यह nginx उपयोगकर्ता द्वारा मौजूद और पठनीय है।


3
आपका समाधान इसका एक हिस्सा था। दूसरा भाग यहाँ है wildlyinaccurate.com/solve-502-bad-gateway-with-nginx-php-fpm
माइक ग्लेज़

154
'SCRIPT_FILENAME' के साथ अंतिम पंक्ति ने मेरे लिए यह काम किया :) धन्यवाद
Stijn Leenknegt

3
धन्यवाद, कि आखिरी पंक्ति ने चाल चली (यह नग्नेक्स के 1.0 संस्करण का उपयोग करते समय इसकी आवश्यकता नहीं है जो सेंटोस के साथ भेज दिया गया है)। मैं इस सुधार के चारों ओर प्रलेखन देखना पसंद करूंगा।
जोरे

1
आपका स्वागत है, यह जानकर खुशी हुई कि इन सभी वर्षों के बाद भी यह लोगों की मदद कर रहा है। हालांकि, कृपया नीचे दिए गए स्पेसपाइल के अपडेट किए गए उत्तर पर ध्यान दें, जो संभवतः बेहतर है।
जूलियन एच। लैम

2
मैं उसी मुद्दे में भाग गया और मेरे लिए समाधान SCRIPT_FILENAME को यहाँ वर्णित (स्लैश / के बिना) जोड़ना था। लेकिन मुझे पागल कर दिया, इसलिए मुझे वास्तव में ऐसा करने की आवश्यकता है? हमारे पास एक और नगीनक्स स्थापित था (1.9 से अधिक पुराना) और वहां यह रेखा आवश्यक नहीं थी। मुझे यह nginx.com/resources/wiki/start/topics/examples/phpfcgi मिला है , और यदि आप इसे अपने fastcgi_params से तुलना करते हैं तो आप देखेंगे कि संभवतः यह सूचीबद्ध ऑनलाइन संस्करण के समान नहीं है और आप देखेंगे कि SCRIPT_FILENAME वहाँ नहीं है। यही कारण है कि? गो फिगर ...
डैनियल दिमित्रोव

342

बदलने के

include fastcgi_params;

साथ में

include fastcgi.conf;

और nginx.conf में fastcgi_param SCRIPT_FILENAME ... हटाएं


17
इसने मेरे लिए इसे ठीक कर दिया। एक .confसे एक अतिरिक्त कॉन्फ़िगरेशन पैरामीटर गायब है _params
माल्विनस

7
यह (और, ज़ाहिर है, /etc/init.d/nginx restart) भी यह मेरे लिए डेबियन परीक्षण पर एक के बाद तय nginx10 सितंबर 2014 पर उन्नयन
SEVERIN

6
इसने इसे मेरे लिए और साथ ही nginx को 1.6.2 में अपडेट करने के बाद तय किया (सितम्बर 2014 अद्यतन)। चीजों को बेतरतीब ढंग से तोड़ने वाले प्यार को अपडेट करता है।
महन

30
यहाँ की पृष्ठभूमि की कहानी है fastcgi_paramsबनाम fastcgi.conf: blog.martinfjordvald.com/2013/04/...
लेवीय

4
यह कोड काम नहीं करता है - मुझे नहीं पता कि क्यों; यह कोड काम करता है, मुझे नहीं पता कि क्यों। आपने मुझे कई घंटे बचाया।
एलेक्स

54

यह भी मुद्दा था और अंत में यहाँ समाधान पाया । संक्षेप में, आपको निम्न लाइन को अपने nginx fastcgi config file (/ etc / nginx / fastcgi_params Ubuntu 12.04) में जोड़ना होगा।

fastcgi_param PATH_TRANSLATED $document_root$fastcgi_script_name;

2
बहुत बहुत धन्यवाद, यह Ubuntu 12.04 LTS पर तय किया।
वैलेंटाइन क्लिंगहैमर

2
Nginx 1.5.4 -> 1.7.4 के उन्नयन के बाद मेरे लिए भी निश्चित। आपको बहुत - बहुत धन्यवाद!
trisweb

4
Ubuntu 14.04 पर काम किया।
टाइमऑफली 18

1
डेबियन व्हीज़ी (7.8) से जेसी (8) और नगनेक्स 1.2.1-2.2 से 1.6.2-5 पर अपग्रेड करते समय फिक्स्ड। बहुत धन्यवाद।
विलियम टरेल

1
जैसा कि मैं समझता हूं, यह फास्टसीगी को बताता है कि फाइलें कहां हैं और इसे सेवा देने की जरूरत है। PATH_TRANSLated अनुरोध को URI लेता है, और फिर सर्वर में वास्तविक फ़ाइल में इसे "अनुवाद" करता है। उदाहरण के लिए। परीक्षण के लिए PATH_TRANSLated.com/index.php /var/www/index.php हो सकता है
लगातार

44

बहुत से उपयोगकर्ता इस धागे में पड़ते हैं कि नग्नेक्स + php-fpm का उपयोग करते हुए रिक्त पृष्ठों के लिए एक समाधान खोजने की अपेक्षा करते हैं , मुझे उनमें से एक है। यह एक पुनरावृत्ति है जो मैंने कई जवाबों को पढ़ने के बाद यहाँ किया है, साथ ही मेरी अपनी जाँच (php7.2 पर अद्यतन):

1) /etc/php/7.2/fpm/pool.d/www.confपैरामीटर के मूल्य को खोलें और जांचें listen

listen = /var/run/php/php7.2-fpm.sock

2) पैरामीटर listenको fastcgi_passआपकी साइट कॉन्फ़िगरेशन फ़ाइल (i, e:) में पैरामीटर से मेल खाना चाहिए /etc/nginx/sites-enabled/default

fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;

3) वास्तव में मौजूद फ़ाइल की जाँच करें:

$ file /var/run/php/php7.2-fpm.sock 
/var/run/php/php7.2-fpm.sock: socket

4) अगर इसका मतलब यह नहीं है कि php7.2-fpm नहीं चल रहा है, तो आपको इसे पुनः आरंभ करने की आवश्यकता है:

$ sudo /etc/init.d/php7.2-fpm restart
[ ok ] Restarting php7.2-fpm (via systemctl): php7.2-fpm.service.


इस locationअनुभाग के संबंध में /etc/nginx/sites-enabled/default:

   # pass PHP scripts to FastCGI server
   #
   location ~ \.php$ {
      include snippets/fastcgi-php.conf;

      # With php-fpm (or other unix sockets):
      fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
   }

snippets/fastcgi-php.confस्थान पर मौजूद फ़ाइल की जाँच करें /etc/nginx/:

$ file /etc/nginx/snippets/fastcgi-php.conf
/etc/nginx/snippets/fastcgi-php.conf: ASCII text

इस फ़ाइल में php7.2-fpm द्वारा आवश्यक चर परिभाषाओं की एक सूची है। चर सीधे या एक अलग फ़ाइल के शामिल के माध्यम से परिभाषित कर रहे हैं।

 include fastcgi.conf;

यह फ़ाइल यहां स्थित है /etc/nginx/fastcgi.confऔर ऐसा दिखता है:

fastcgi_param  QUERY_STRING       $query_string;
fastcgi_param  REQUEST_METHOD     $request_method;
...
fastcgi_param  REDIRECT_STATUS    200;

nginx में दो संभावित पैरामीटर फाइलें शामिल हैं: fastcgi_params और fastcgi.conf । दोनों के बीच का अंतर चर की परिभाषा है SCRIPT_FILENAME:

$ diff fastcgi_params fastcgi.conf 
1a2
> fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;

एक लंबी कहानी को छोटा करने के लिए, fastcgi.conf को हमेशा काम करना चाहिए। यदि किसी कारण से आप सेट हो रहे हैं तो fastcgi_params का उपयोग कर रहे हैं , आपको परिभाषित करना चाहिए SCRIPT_FILENAME:

location ~ \.php$ {
  include snippets/fastcgi-php.conf;

  # With php-fpm (or other unix sockets):
  fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;

  fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;
}

अब nginx कॉन्फ़िगरेशन पुनः लोड करें:

$ sudo nginx -s reload

और एक php फ़ाइल को सही ढंग से प्रदर्शित किया गया है। उदाहरण के लिए:

/var/www/html/test.php

<pre><?php var_export($_SERVER)?></pre>

/var/www/htmlदस्तावेज़ रूट का पथ कहाँ है

यदि इन सब के बावजूद, आप अभी भी एक रिक्त फ़ाइल देख रहे हैं, तो सुनिश्चित करें कि आपके php.iniद्वारा short_open_tagसक्षम किया गया है (यदि आप छोटे टैग के साथ PHP पृष्ठ का परीक्षण कर रहे हैं)।


1
धन्यवाद डिएगो! fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;क्या आखिरकार चाल चली गई।
खतरा '

Fastcgi.conf को यह सब ठीक करने में मदद करता है
Rytis Lukoševičius

1
भयानक टूट! मुझे SCRIPT_FILENAME कॉन्फ़िगरेशन याद आ रही थी, इसने काम किया
herval

1
जब मैंने उस विन्यास में SCRIPT_FILENAME को जोड़ा है, तो फिर से "फ़ाइल नहीं मिली" के साथ सब कुछ विफल हो गया
होम्स

लंबी कहानी के बारे में, दो क्यों शामिल हैं और एक बॉक्स से बाहर काम नहीं करता है?
द गॉडफादर

24

सुनिश्चित करें कि आपने इसे / etc / nginx / fastcgi_params में प्राप्त किया है

fastcgi_param SCRIPT_FILENAME $ request_filename;

कौन जानता है कि यह पहले से ही क्यों नहीं है? समय की मात्रा यह सामूहिक रूप से बर्बाद करना होगा!


1
+1 "Fastcgi_param SCRIPT_FILENAME $ request_filename;" "$ document_root / $ fastcgi_script_name" के विपरीत, "$ request_filename" Nginx के "उपनाम" निर्देश के लिए मार्ग को दर्शाता है। देखें: nginx.org/en/docs/http/ngx_http_core_module.html#variables , nginx.org/en/docs/http/ngx_http_core_module.html#alias , और मार्टिन फजॉर्डवाल्ड के ब्लॉग का हवाला देते हुए उपरोक्त लेख ( blog.martinfin.com) / 04 /… )। मेरे स्थान ब्लॉक में, इसने El Capitan पर Homebrew के साथ स्थापित php71-fpm और Nginx के साथ रिक्त पृष्ठ समस्या को हल किया।
स्लैक अंडरटेक

15

मैंने एक छोटा C प्रोग्राम लिखा है जो nginx से पारित पर्यावरण चर को fastCGI एप्लिकेशन पर लौटाता है।

#include <stdlib.h>
#include <fcgi_stdio.h>
extern char **environ;

int main(int argc, char **argv) {
    char *envvar;
    int i;

    int count = 0;
    while(FCGI_Accept() >= 0) {
        printf("Content-type: text/html\n\n"
               "<html><head><title>FastCGI Call Debug Tool</title></head>\n"
               "<body><h1>FastCGI Call Debugging Tool</h1>\n"
               "<p>Request number %d running on host <i>%s</i></p>\n"
               "<h2>Environment Variables</h2><p>\n",
              ++count, getenv("SERVER_NAME"));
        i = 0;
        envvar = environ[i];
        while (envvar != NULL) {
                printf("%s<br/>",envvar);
                envvar = environ[++i];
        }
        printf("</p></body></html>\n");
    }
    return 0;
}

इसे एक फ़ाइल में सहेजें, उदा fcgi_debug.c

इसे संकलित करने के लिए, पहले स्थापित करें gccऔर libfcgi-devफिर चलाएँ:

gcc -o fcgi_debug fcgi_debug.c -lfcgi

इसे चलाने के लिए, इंस्टॉल करें spawn-fcgi, फिर चलाएं:

spawn-fcgi -p 3000 -f /path/to/fcgi_debug

फिर, डिबग प्रोग्राम को इंगित करने के लिए अपना nginx fcgi config बदलें:

fastcgi_pass  127.0.0.1:3000;

पेज को फिर से ताज़ा करें, और आपको डीबग करने के लिए अपने ब्राउज़र में दिखाई देने वाले सभी मापदंडों को देखना चाहिए! :-)


1
ध्यान दें, आपको हेडर और स्पॉन-एफसीजी की आवश्यकता है। डेबियन / उबंटू पर आप इसे प्राप्त कर सकते हैं apt-get install spawn-fcgi libfcgi-dev
9

8

इन संकेतों ने मुझे मेरे Ubuntu 14.04 LTS को स्थापित करने में मदद की,

इसके अलावा मुझे अंदर जाने की जरूरत short_open_tagथी/etc/php5/fpm/php.ini

$ sudo kate /etc/php5/fpm/php.ini

short_open_tag = On

$ sudo service php5-fpm restart
$ sudo service nginx reload

यह डीओ ड्रॉपलेट उबंटू इंस्टॉल द्वारा तय किया गया है। साभार
एंड्रयू

यह मेरे लिए तय किया गया था।
नगीनेक्स

6

इसे इसमें जोड़ें /etc/nginx/conf.d/default.conf:

fastcgi_param PATH_TRANSLATED $document_root$fastcgi_script_name;

2
क्या आप ध्यान देंगे कि ओपी की समस्या क्या है और ओपी की समस्या का समाधान कैसे किया जाता है?
wookie919

1
इसने मेरे लिए उबंटू 15.04 पर nginx 1.8.0 और php-fpm 5.6.4-4ubuntu6 के साथ यही समस्या हल की। मुझे यह जानकर अच्छा लगेगा कि यह वास्तव में क्या कर रहा है और इसे डिफ़ॉल्ट नगनेक्स कॉन्फिग फाइल के साथ क्यों शामिल नहीं किया गया है, लेकिन मैं कम से कम खुश हूं कि मैंने अब इसे डॉकरफाइल में कोड कर दिया है।
जेम्स विलियम्स

/etc/nginx/fastcgi_paramsफ़ाइल में मान डालना अधिक उचित होगा जो मुझे लगता है।
अरदा

4

यदि किसी के पास यह समस्या है, लेकिन उपरोक्त में से कोई भी उत्तर उनकी समस्याओं को हल नहीं करता है, तो मैं इस समस्या को हल कर रहा था और सबसे कठिन समय था जब मैं अपनी कॉन्फिग फाइलों को सही होने के बाद इसे ट्रैक कर रहा था, मेरी ngnix और php-fpm नौकरियां ठीक चल रही थीं, और कोई त्रुटि लॉग के माध्यम से आने वाली कोई त्रुटि नहीं थी।

गूंगा गलती लेकिन मैंने कभी भी अपनी php.ini फ़ाइल में शॉर्ट ओपन टैग वैरिएबल को चेक नहीं किया जो कि सेट किया गया था short_open_tag = Off। चूंकि मेरी php फाइलें <?इसके बजाय उपयोग कर रही थीं <?php, इसलिए पेज खाली दिख रहे थे। Onमेरे मामले में लघु ओपन टैग को सेट किया जाना चाहिए था ।

आशा है कि यह किसी की मदद करता है।


2

यह समस्या तब होती है क्योंकि नॅग्नेक्स में फास्टगि कॉन्फ़िगरेशन आवश्यक के रूप में कार्य नहीं करता है और स्थान या प्रसंस्करण में, वे html डेटा के रूप में प्रतिक्रिया करते हैं। इस समस्या से बचने के लिए दो संभावित तरीके हैं जिनसे आप अपने नगनेक्स को कॉन्फ़िगर कर सकते हैं।

  1. विधि 1:

        location ~ \.php$ {
                fastcgi_split_path_info ^(.+\.php)(/.+)$;
                # With php5-fpm:
                fastcgi_pass unix:/run/php5-fpm.sock;
                fastcgi_index index.php;
                include fastcgi.conf;
        }
  2. विधि 2:

    location ~ \.php$ {
            fastcgi_split_path_info ^(.+\.php)(/.+)$;
            include snippets/fastcgi-php.conf;
            # With php5-fpm:
            fastcgi_pass unix:/var/run/php5-fpm.sock;
            include fastcgi_params;
    }

दोनों विधियां ठीक से काम करेंगी, आप आगे बढ़ सकते हैं और उनमें से किसी एक को ले जा सकते हैं। वे लगभग बहुत ही अंतर के साथ एक ही संचालन करते हैं।


1
location ~ [^/]\.php(/|$) {
         fastcgi_pass unix:/PATH_TO_YOUR_PHPFPM_SOCKET_FILE/php7.0-fpm.sock;
         include fastcgi_params;
         fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
         fastcgi_param SCRIPT_NAME $fastcgi_script_name;
}

सौभाग्य


0

उपर्युक्त उत्तरों में से किसी ने भी मेरे लिए काम नहीं किया - PHP ने mysqli पर भरोसा करने वाले पृष्ठों को छोड़कर सब कुछ ठीक से प्रस्तुत किया था, जिसके लिए वह 200 उत्तर कोड के साथ एक रिक्त पृष्ठ भेज रहा था और किसी भी त्रुटि को नहीं फेंक रहा था। जैसा कि मैं ओएस एक्स पर हूं, फिक्स बस था

sudo port install php56-mysql

PHP-FPM और nginx के पुनरारंभ के बाद।

मैं एक पुराने अपाचे / पीएचपी सेटअप से nginx की ओर पलायन किया गया था, और के लिए ड्राइवर में संस्करण बेमेल नोटिस करने में विफल रहा php-mysqlऔर php-fpm


0

मैं एक ऐसी ही समस्या थी, nginx एक पृष्ठ आधे रास्ते प्रसंस्करण तो रोक रहा था। यहां सुझाए गए समाधानों में से कोई भी मेरे लिए काम नहीं कर रहा था। मैंने इसे नगीने फास्टकोगी बफरिंग को बदलकर तय किया:

fastcgi_max_temp_file_size 0;

fastcgi_buffer_size 4K;
fastcgi_buffers 64 4k;

परिवर्तनों के बाद मेरा locationब्लॉक जैसा दिखता था:

location ~ \.php$ {
    try_files $uri /index.php =404;
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_max_temp_file_size 0;
    fastcgi_buffer_size 4K;
    fastcgi_buffers 64 4k;
    include fastcgi_params;
}

विवरण के लिए https://www.namhuy.net/3120/fix-nginx-upstream-response-buffered-temporary-file-error.html देखें


0

यदि आपको एक रिक्त स्क्रीन मिल रही है, तो वह 2 कारणों से हो सकती है:

  1. ब्राउज़र फ़्रेम को प्रदर्शित होने से रोक रहा है। कुछ ब्राउज़रों में फ़्रेम को असुरक्षित माना जाता है। इसे दूर करने के लिए आप phpPgAdmin के फ्रैमलेस संस्करण को लॉन्च कर सकते हैं

    http://-your-domain-name-/intro.php

  2. आपने X-Frame-Options के लिए Nginx में एक सुरक्षा सुविधा को सक्षम किया है जो इसे अक्षम करने का प्रयास करता है।


0

इससे मेरी समस्या हल हो गई:

location ~ \.php$ {
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    include snippets/fastcgi-php.conf;
    # With php5-fpm:
    fastcgi_pass unix:/var/run/php5-fpm.sock;
    include fastcgi_params;
}

0

यह UBUNTU 18.04 + अपाचे + php7.2 के लिए मेरा vhost है

server {
    listen 80;
    server_name test.test;
    root /var/www/html/{DIR_NAME}/public;
    location / {
        try_files $uri /index.php?$args;
    }
location ~ \.php$ {
    try_files $uri =404;
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    fastcgi_pass unix:/run/php/php7.2-fpm.sock;
    fastcgi_index index.php;
    include fastcgi_params;
    fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    }
}

अंतिम पंक्ति इसे अन्य उत्तरों से अलग बनाती है।


2
200+ मतों के साथ एक स्वीकृत उत्तर है - प्रश्न 5 वर्ष पुराना है .. मैं व्यक्तिगत रूप से इस उत्तर को प्रश्न के साथ जोड़कर नहीं देख रहा हूँ ..
treyBake

0

मेरे पास एक समान त्रुटि थी, लेकिन नेक्क्लाउड के संयोजन में। तो इस मामले में काम नहीं किया, कोशिश: Nginx मैनुअल पर एक नज़र रखना

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.