Nginxは.phpファイルを実行するのではなく、ダウンロードとして提供します


151

ドロップレット(デジタルオーシャン)にWebサイトをインストールしています。PHPでNGINXを適切にインストールするための問題があります。チュートリアルhttps://www.digitalocean.com/community/tutorials/how-to-install-linux-nginx-mysql-php-lemp-stack-on-ubuntu-14-04を実行しましたが、いくつか実行しようとしたとき.phpファイルダウンロードしているだけです...たとえば... http://5.101.99.123/info.php動作していますが...メインに移動するとhttp://5.101.99.123、index.phpをダウンロードしています:/

何か案が?

-rw-r--r--  1 agitar_user www-data   418 Jul 31 18:27 index.php
-rw-r--r--  1 agitar_user www-data    21 Aug 31 11:20 info.php

私の/ etc / nginx / sites-available / default

server {
        listen 80 default_server;
        listen [::]:80 default_server ipv6only=on;

        root /var/www/html;
        index index.html index.htm index.php;

        # Make site accessible from http://localhost/
        server_name agitarycompartir.com;

               location ~ \.php$ {
                    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    #               # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
    #
    #               # With php5-cgi alone:
    #               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;
            }


              location / {

                    try_files $uri $uri/ =404;
                    # Uncomment to enable naxsi on this location
                    # include /etc/nginx/naxsi.rules
            }

...他の「場所」にはコメント(#)


4
はい...あなたはNginxでPHP-FPMを正しく設定していませんでした。それはあなたが私たちに示さなかったので、私たちはかかわらず、あなたを伝えることができるすべてです任意のあなたの設定のを。
ブラッド

どのファイルを見たいですか?ありがとう@Brad
Apeiron

設定を入れたファイル(1つまたは複数)。関連する部分は... Nginx設定でPHP-FPMを設定する場所です。
ブラッド

2
1時間のグーグル検索の後、このaskubuntu.com/a/601996/89455が見つかりました-キャッシュをクリアする前に設定が間違っていた場合-ここで動作しました!
tm_lv 2016

回答:


131

これを試して:

  1. 編集する /etc/nginx/sites-available/default

  2. nginxがポート80 IPv4およびIPv6でリッスンするように、両方のリッスン行のコメントを外します。

    listen   80; ## listen for ipv4; this line is default and implied
    listen   [::]:80 default_server ipv6only=on; ## listen for ipv6
    
  3. 脱退server_name一人で

    # Make site accessible (...)
    server_name localhost;
    
  4. 追加index.phpindex

    root /usr/share/nginx/www;
    index index.php index.html index.htm;
    
  5. コメントを外す location ~ \.php$ {}

    # pass the PHP scripts to FastCGI server listening on (...)
    #
    location ~ \.php$ {
            try_files $uri =404;
            fastcgi_split_path_info ^(.+\.php)(/.+)$;
            # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
    
            # With php5-cgi alone:
            #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;
    }
    
  6. 編集して/etc/php5/fpm/php.ini、にcgi.fix_pathinfo設定されていることを確認してください0

  7. nginxとphp5-fpmを再起動します sudo service nginx restart && sudo service php5-fpm restart


私は1週間前にLinuxを使い始めたばかりなので、これについてあなたを助けたいと思います。nanoテキストエディターを使用してファイルを編集しています。apt-get install nanoがない場合は実行します。詳細については、Googleをご覧ください。


14
service nginx restart && service php5-fpm restart
デューク

8
nginx -s reload
デューク

2
PHP7-fpmの場合:service php7.0-fpm restart
Alex

1
@ジョイ、あなたの提案を試みましたが、うまくいきませんでした。fastcgi_pass unix:/run/php/php7.0-fpm.sock;を使用する必要がありました。
jdstaerk 2017年

1
php7.2の場合:(もう1つのネスト)にunix:/var/run/php5-fpm.sock;変換しunix:/var/run/php/php7.2-fpm.sock;ます/php
Oleg

50

Nginxサーバーでphpファイルを実行するには、これを/ etc / nginx / sites-enabled / defaultに追加する必要があります。

server {
    listen 80 default_server;
    listen [::]:80 default_server ipv6only=on;

    root /usr/share/nginx/html;
    index index.php index.html index.htm;

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

SCRIPT_FILENAMEとは何ですか?
mp3por 2017年

2
あなたはPHP 7.0を使用している場合、これは正しいです:fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
アンドリュー・フォックス

1
@ AndrewFox-私のファイル名はありphp7.0-fpm.pidませんし、php7.0-fpm.sock中に/var/run/php/ それがどういう意味?
vsync 2018

@vsync試してみてください。sudo service php7.0-fpm restart。sockがない場合は、phpプロセスが実行中であることを示しています。
zhisme

1
@Pathros-私の場合、wordpressのサーバー設定ファイルが別のフォルダーにあり、それらを編集する必要がありました/etc/nginx/conf.d/wordpress_https.conf
vsync

43

私は同様の問題を抱えていましたが、ブラウザーのキャッシュを空にすることで解決しました(別のブラウザーでも問題なく動作しました)。


5
再起動とシークレットモードが役に立ったと思います。私たちにできるうるささをトンに感謝します。
Swapnil Mhaske 2017年

4
どうもありがとう。あなたは私の日を救った)シークレットモードで+1
エディ

3
これは私にとっても成功しました。また、提案された他の多くの解決策を何時間も試しました。
Kleag、

1
私のサイトがIEとChromeで動作していて、mozillaで実行する代わりにサイトをダウンロードしたのは不思議でした。これは、mozillaのキャッシュ障害でした。
Viktor Joras 2018

3
あなたは私の時間の仲間を救った。
アミールカフタリ

12

nginx config / etc / nginx / sites-available / defaultまたは設定ファイルを更新します

あなたがphp7を使用している場合はこれを使用してください

    location ~ \.php$ {
            include snippets/fastcgi-php.conf;
            fastcgi_pass unix:/run/php/php7.0-fpm.sock;      
    }

php5を使用している場合はこれを使用してください

    location ~ \.php$ {
            include snippets/fastcgi-php.conf;
            fastcgi_pass unix:/run/php/php5-fpm.sock;
            fastcgi_index index.php;
            include fastcgi_params;
    }

詳細はこちらをご覧ください詳細はこちら


私はこれがうまくいかなかったのですが、ubuntu 14.04とphp 7.0を使用しています。どうすればこの問題を修正できますか?
Kishore

上記の共有リンク「完全な詳細」が壊れている
Kishore

どういう意味include snippets/fastcgi-php.conf;ですか?
ティモ

9

上記の多くの解決策があり、多くは正しく動作しましたが、それらが何をしているのか理解できず、コード、特にfastcgiをコピーして貼り付けるだけで心配でした。これが私の2セントです。

  1. nginxはWebサーバーでありアプリケーションサーバーではない)、したがって、静的ページのみを提供できます。
  2. いつでも、我々は、例えば、index.phpのため、.PHPファイルを返す/レンダリングしてみてください、nginxのそれだけで理解することができないので、何をすべきか分かっていないの.phpファイル(またはそのことについては別に少数精鋭から任意の拡張子を同様の.html、.jsファイルなどの静的ファイルです)
  3. したがって、他の種類のファイルを実行するには、nginxとアプリケーション(ここではphpアプリケーション)の間にあるものが必要です。これがCommon Gateway Interface(CGI)の出番です。これは、この通信を管理するソフトウェアの一部です。CGIは、可能な任意の言語のPython(uWSGI)、PHP(FPM)、さらにはCでも実装できます。FastCGIは、基本的にはCGIよりはるかに高速なCGIのアップグレードバージョンです。

Apacheなどの一部のサーバーでは、PHPを解釈するためのサポートが組み込まれているため、CGIは必要ありません。

このデジタルオーシャンリンクは、FPMをインストールする手順をかなりうまく説明しており、他の答えはかなり良いので、レンダリングの代わりにphpファイルがダウンロードされる問題を解決するために必要な手順は書いていません。


いい説明者。ありがとう。
Jon

1
nginxはブラウザではなくWeb サーバーです。修正してください。
ジオコード

8

私は同じ問題を抱えていましたが、答えはどれも問題を解決しませんでした。

私が走った:

sudo nginx -t

/ etc / nginx / sites-available / defaultで設定ファイルをテストします。

それは私にこれらのエラーを与えました:

nginx: [emerg] unexpected end of file, expecting "}" in /etc/nginx/sites-enabled/default:115
nginx: configuration file /etc/nginx/nginx.conf test failed

だから私は設定ファイルに入り、最後の行に

#}

私はコメントを外し、テストコマンドを再度実行しましたが、うまくいきました


問題を修正するためのアドバイスに加えて、テストコマンド構文を含めるのはいい感じです。
greybeard 2017

7

これは私にとってはうまくいきました。

1)MyAppファイル

vi / etc / nginx / sites-available / myApp

server {
  listen 80;
  listen [::]:80;

  root /var/www/myApp;
  index index.php index.html index.htm;

  location ~ \.php$ {
      try_files $uri =404;
      fastcgi_split_path_info ^(.+\.php)(/.+)$;
      fastcgi_pass unix:/run/php/php7.0-fpm.sock;
      fastcgi_index index.php;
      fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
          include fastcgi_params;
      }
}

PHP5ユーザー

変化する

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

fastcgi_pass unix:/var/run/php5-fpm.sock;

2)cgi.fix_pathinfoを設定します

cgi.fix_pathinfoを0に設定します

ロケーション:

PHP5 /etc/php5/fpm/php.ini

PHP7 /etc/php/7.0/fpm/php.ini


3)サービスを再起動します

FPM

php5 sudo service php5-fpm restart

php7 sudo service php7.0-fpm restart

NGINX

sudo service nginx restart

fastcgi_pass unix:/run/php/php7.0-fpm.sock; 間違っています。それは/var/run/php/php7.0-fpm.sockである必要があります。また、指定したphpバージョンを、インストールしたもので更新する必要があります。たとえば、/ var / run / php / php7.2-fpm.sock;
VanAlbert

4

私にとっては?$query_string、以下のように/index.phpの最後に追加するのに役立ちました:

location / {
        try_files $uri $uri/ /index.php?$query_string;
}

3

提案された回答のいずれかが機能しない場合は、これを試してください:

1. www.confをetc / php5 / fpm / pool.dに修正します。

listen = 127.0.0.1:9000;(delete all line contain listen= )

2. usr / local / nginx / confのnginx.confを修正します。

remove server block server{} (if exist) in block html{} because we use server{} in default (config file in etc/nginx/site-available) which was included in nginx.conf.

3. etc / nginx / site-availableのデフォルトファイルを修正する

location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; include fastcgi_params; }

4. nginxサービスを再起動します

sudoサービスnginx再起動

5.phpサービスを再起動します

サービスphp5-fpm再起動

6.楽しむ

/ usr / share / nginx / htmlに任意のphpファイルを作成し、「server_name / file_name.php」で実行します(server_nameは設定に依存します。通常、localhostであり、file_name.phpは/ usr / share / nginxで作成されたファイルの名前です。 / html)。

Ubuntu 14.04を使用しています


2

上記の答えは、私が到達したソリューションに対してコメントアウトしすぎているようです。これは私のファイルがどのように見えるかです:

/ etc / nginx / sites-available / default

location ~ \.php$ {
# fastcgi_split_path_info ^(.+\.php)(/.+)$;
# # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
#
# # With php5-cgi alone:
# 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;
}

これが日曜日の午後にイライラしている一部の人々に役立つことを願っています(c:


2
server {
    listen 80 default_server;
    listen [::]:80 default_server ipv6only=on;

    root /var/www/html;
    index index.php index.html index.htm;

    location ~ \.php$ {
            include snippets/fastcgi-php.conf;
            fastcgi_pass unix:/run/php/php7.2-fpm.sock;
    }
}

上記のスニペットは、php7.2の場合は私のために働いた


1

PHP 7で同じ問題を抱えている人のために、これは私がnginxにphpファイルをCentOS 7で適切に実行させるために行ったものです。

  • Digital Oceanでこのドキュメントを段階的に実行してください。

  • を開き/etc/nginx/conf.d/default.confます(デフォルトでは、サイトは有効になっておらず、サイトも利用できません。適宜編集できます)。

  • location以下のようにパラメーターを編集します。

default.conf

location ~ \.php$ {
    try_files $uri =404;
    #fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;

    #instruct nginx execute php7 files instead download them :D
    fastcgi_pass unix:/var/run/php-fpm/www.sock;

    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
}
  • NginxとPHPサービスsudo systemctl restart php-fpmを再起動しますsudo systemctl restart nginx

  • 最後ですが最も重要なのは、ブラウザのキャッシュをクリアするincognito (Chrome)か、Private Browsing (Firefox)などで実行することです...

この有用で幸せなコーディングを願っています


1

私の解決策は追加することでした

    location ~ \.php$ {
    try_files $uri =404;
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    fastcgi_pass unix:/run/php/php7.0-fpm.sock;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;

たとえば、カスタム構成ファイルに etc/nginx/sites-available/example.com.conf

に追加しても/etc/nginx/sites-available/defaultうまくいきませんでした。


1

/etc/nginx/sites-available/defaultが使用していない私のケースでは、別のサーバーブロック構成ファイル(example.comなど)を使用しており、この問題を修正できる唯一の方法は、デフォルトのサーバーブロック構成ファイルのシンボリックリンクを削除することです。

$ rm /etc/nginx/sites-enabled/default

次にNginxをリロードします:

$ sudo systemctl reload nginx

1

私は今このコードで問題を解決しました(IPを変更してください):

location / {
access_log off;
    log_not_found  off;
    client_max_body_size    2000m;
    client_body_buffer_size 512k;
    proxy_buffering on;
    proxy_send_timeout 300s;
    proxy_read_timeout 300s;
    proxy_buffer_size 64k;
    proxy_buffers 32 64k;
    proxy_busy_buffers_size 128k;
    proxy_temp_file_write_size 128k;
    proxy_connect_timeout 300s;
    proxy_http_version 1.1;
    proxy_set_header Range "";
    proxy_pass   https://123.123.123.123:444;
    proxy_set_header   Host   $host;
    proxy_set_header   X-Real-IP  $remote_addr;
    proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header   X-Forwarded-Proto $scheme;
    proxy_redirect     off;
}

0

Ubuntu 16.04で私にとってうまくいったこと、そしてphp7がこの行を削除していた

fastcgi_split_path_info ^(.+\.php)(/.+)$;

その後、phpファイルのダウンロードを中止しました。


0

/ etc / nginx / sites-available / defaultの.phpの場所のコメントを外します

sudo vi / etc / nginx / sites-available / default:

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

            # With php5-cgi alone:
    #       fastcgi_pass 127.0.0.1:9000;
            # With php5-fpm:
            fastcgi_pass unix:/var/run/php5-fpm.sock;
    }

0

それ以外の場合は役に立ちません。そして、おそらく以前に、info.phpテストファイルを使用してapache2をインストールしました。ローカルホストのアプリデータ(キャッシュ、Cookie)をクリアするだけです。


0

nginx設定ファイルの拡張子が* .confであることを確認してください。
例:/etc/nginx/conf.d/myfoo.conf

私も同じ状況になりました。my configファイルの名前をmyfooからmyfoo.confに変更した後、修正されました。名前を変更した後は、nginxを再起動することを忘れないでください。


0

まずRemove cache、ブラウザで

次にターミナルを開き、次のコマンドを実行します。

sudo apt-get install php-gettext
sudo nano /etc/nginx/sites-available/default

次に、defaultファイルに次のコードを追加します。

server {
    listen 80 default_server;
    listen [::]:80 default_server ipv6only=on;

    root /usr/share/nginx/html;
    index index.php index.html index.htm;

    server_name localhost;

    location / {
        try_files $uri $uri/ =404;
    }

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

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

不一致がある場合は、修正して次のコマンドでターミナルからNginxを再起動します

sudo systemctl restart nginx

次に、ブラウザに移動してお楽しみください...


0

私にとってはそれは次の行でした:fastcgi_pass unix:/var/run/php5-fpm.sock;

これはちょうどでなければなりませんでした:fastcgi_pass unix:/run/php5-fpm.sock;


0

私はこれを修正しようと精神的に行きました、私にとっての問題は、Cloudflareがphpファイルをキャッシュし、私にそれをダウンロードさせ続けたことでした。

私の修正は、Cloudflareのキャッシュを削除することでした。


多分あなたは私たちにどのように教えたいですか?
Thorsten Staerk

0

私は同じ問題を抱えていましたが、CSSがロードの問題を抱えていない場合、このサーバーブロックが他のロケーションブロックの上にこのブロックを持っていることが解決しました。これをサイトで利用可能なconfファイルに追加しました。

location ~ [^/]\.php(/|$) {
fastcgi_split_path_info  ^(.+\.php)(/.+)$;
fastcgi_index            index.php;
fastcgi_pass             unix:/var/run/php/php7.3-fpm.sock;
include                  fastcgi_params;
fastcgi_param   PATH_INFO       $fastcgi_path_info;
fastcgi_param   SCRIPT_FILENAME $document_root$fastcgi_script_name;
}

0

したがって、これが私の場合、最終的には、書き換えルールとして機能したもので、犯人
がnginx書き換えルールを次のように変更しました。

   location /vendors { rewrite ^/vendors/?$ /vendors.php break; } 

になる...

  location /vendors { rewrite ^/vendors/?$ /vendors.php last; }

どうやら最後のキーワードがないと、リクエストは再開されなかったため、.phpロケーションセグメントにヒットすることはなく、単にダウンロードとして解釈されました–


0

記録のために、私は私のphp-fpmが実行されていないことを発見し、私はそれを修正しました service php7.2-fpm stop


0

もう1つ確認すること:PHPを設定する前に HTTPSアクセスを設定した場合-certbotを使用しました-/ etc / nginx / sites-available / defaultを2回変更する必要があるため、2つ変更する必要がありますサーバーブロック(1つはポート80でリッスンし、もう1つはポート443でリッスン)。

(私は主に電子メール用にこのサーバーをセットアップしており、certbotをより簡単に実行する方法として最初にnginxをインストールしたときは、PHPをまったく使用していませんでした。)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.