web-dev-qa-db-ja.com

Nginxは、.phpファイルを実行する代わりに、ダウンロードとして提供します。

Webサイトをドロップレット(Digital Ocean)にインストールしています。 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
            }

...その他の "location"についてのコメント(#)

118
Apeiron

これを試して:

  1. /etc/nginx/sites-available/defaultを編集

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

    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行にindex.phpを追加します

    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_pathinfo0に設定されていることを確認してください

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


私は1週間前にLinuxを使い始めたばかりなので、ぜひこの手助けをしたいと思います。私はナノテキストエディタを使ってファイルを編集しています。持っていなければapt-get install nanoを実行してください。 Googleはそれをもっと知りたいのです。

110
Jack M.

Nginx Serverで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;
    }
}
39
rootx

私はブラウザのキャッシュを空にすることで解決された同様の問題を抱えていました(また別のブラウザではうまく働きました)。

26
np8

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

詳細はこちら 詳細はこちら

11
M Arfan

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

私は走った:

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

それで私は設定ファイルに行き、最後の行にありました

#}

私はコメントを外して、再度testコマンドを実行しました、そしてそれはうまくいきました

これは私のために働いた。

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
6

私は上記の多くの解決策を見て、多くが私のために正しく働いていました、しかし、私は彼らがしていたことを理解しませんでした、そして、コードを単にコピーペーストすることを心配しました、特に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は必要ありません。

このDigital Oceanリンク は、FPMをインストールするための手順をうまく説明しています。Phpファイルの代わりにダウンロードされる問題を解決するために必要な手順を書いていません。他の答えは私見かなり良いので以来レンダリング。

5
coda

提案された答えのどれかがはたらかない場合、これを試みて下さい:

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

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

2. nginx.confをusr/local/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 service nginx restart

5.再開phpサービス

service php5-fpm restart

6.楽しむ

/ usr/share/nginx/htmlにphpファイルを作成し、 "server_name/file_name.php"で実行します(server_nameは設定によって異なります。通常はlocalhost、file_name.phpは/ usr/share/nginxに作成されたファイルの名前です。/html).

Ubuntu 14.04を使用しています

3
huuthang

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

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

上記の答えは、私が到達した解決策にはコメントしすぎたようです。これは私のファイルがどのように見えたかです:

/ 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

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

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

それからNginxをリロードします。

$ Sudo systemctl reload nginx
1
Waqleh

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

  • この文書を 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-fpmSudo systemctl restart nginxを再起動します。

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

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

1
SonDang

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

    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

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

fastcgi_pass unix:/run/php5-fpm.sockです。

0
Dongato

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

私はそれが問題をロードしていない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
Alex M

だから、これは私の場合最後に犯人が書き換え規則として働いたものです
nginxの書き換え規則を次のように変更しました。

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

〜になる.

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

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

0

他に何も助けにならない場合そしておそらく以前にinfo.phpテストファイルを使ってApache2をインストールしました。 localhostのApp Data(キャッシュ、cookie)をクリアするだけです。

0
Al Che

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

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

0
Ivan

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

私にとっての修正はCloudflareのキャッシュを一掃することでした。

0
KristinnVikarJ

このコードで問題を解決しました(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
André Bastos

まずブラウザで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
Sanaulla

記録のために、私のphp-fpmが実行されていないことがわかり、service php7.2-fpm stopで修正しました

0
IslamTaha

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

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

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

0
briankip