web-dev-qa-db-ja.com

PHPファイルをダウンロードするのではなく、実行する

最近、nginxとphp 7.0.16をマシンにインストールしましたが、なんらかの理由でnginxが実行するのではなく、phpファイルをダウンロードします。私はすでに数日を費やしており、オンラインで利用できるすべてのソリューションを実装しましたが、すべて無駄になっています。

私のnginx.confは:

worker_processes 4;
error_log /var/log/nginx/error.log;
pid /var/run/nginx.pid;

# Load dynamic modules. See /usr/share/nginx/README.Fedora.
include /usr/share/nginx/modules/*.conf;

events {
    worker_connections 1024;
}

http {
    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  /var/log/nginx/access.log  main;

    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 2048;

    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;

    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
}

Conf.dフォルダーにファイルはなく、sites-enabledには以下のようなデフォルトファイルのみがあります。

server {
    listen 80;
    server_name infrastructure;
    root /home/infra/index;
    index index.php index.html index.htm;
    #return 301 https://$server_name$request_uri;

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

    # pass the PHP scripts to FastCGI server listening on the php-fpm socket
    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;
        fastcgi_pass unix:/var/run/php-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

    error_page 500 502 503 504 /500.html;
    client_max_body_size 4G;
    keepalive_timeout 10;
}

誰かがアドバイスしてください、問題は何でしょうか?

8
Ravi Singh

解決策を見つけました。問題はnginx.confファイルにありました。

次の行を置き換えました:

default_type        application/octet-stream;

と:

default_type        text/html;
9
Ravi Singh

Nginxは、インストール可能なUbuntu 16.04のパッケージとして入手できます。

apt-get -y install nginx

その後nginxを起動します。

service nginx start

次に、localhostページを開いて、表示される内容を確認します。

インストールPHP 7

PHP PHP-FPMを介してnginxで機能させることができます(PHP-FPM(FastCGI Process Manager)は、代替のPHP FastCGI実装であり、次のようにインストールする、あらゆるサイズのサイト、特に使用頻度の高いサイト):

apt-get -y install php7.0-fpm

PHP-FPMは、/ init/php/php7.0-fpm.sockソケットでFastCGIサーバーを実行するデーモンプロセス(initスクリプトphp7.0-fpmを使用)です。

Nginxの設定は/etc/nginx/nginx.confにあり、ここで開いています:

nano /etc/nginx/nginx.conf

設定は簡単に理解できます(詳細はこちら: http://wiki.nginx.org/NginxFullExample そしてこちら: http://wiki.nginx.org/ NginxFullExample2

最初に(これはオプションです)、keepalive_timeoutを適切な値に調整します。

[...]
    keepalive_timeout   2;
[...]

仮想ホストはサーバー{}コンテナーで定義されます。デフォルトのvhostは/ etc/nginx/sites-available/defaultファイルで定義されています-次のように変更しましょう:

nano /etc/nginx/sites-available/default

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

 # SSL configuration
 #
 # listen 443 ssl default_server;
 # listen [::]:443 ssl default_server;
 #
 # Note: You should disable gzip for SSL traffic.
 # See: https://bugs.debian.org/773332
 #
 # Read up on ssl_ciphers to ensure a secure configuration.
 # See: https://bugs.debian.org/765782
 #
 # Self signed certs generated by the ssl-cert package
 # Don't use them in a production server!
 #
 # include snippets/snakeoil.conf;

 root /var/www/html;

 # Add index.php to the list if you are using PHP
 index index.html index.htm index.nginx-debian.html;

 server_name _;

 location / {
 # First attempt to serve request as file, then
 # as directory, then fall back to displaying a 404.
 try_files $uri $uri/ =404;
 }

 # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
 #
 location ~ \.php$ {
 include snippets/fastcgi-php.conf;

 # With php7.0-cgi alone:
 # fastcgi_pass 127.0.0.1:9000;
 # With php7.0-fpm:
 fastcgi_pass unix:/run/php/php7.0-fpm.sock;
 }

 # deny access to .htaccess files, if Apache's document root
 # concurs with nginx's one
 #
 location ~ /\.ht {
  deny all;
 }
}
[...]

サーバーの名前 _;これをデフォルトのキャッチオールvhostにします(もちろん、www.example.comのようにここでホスト名を指定することもできます)。

root/var/www/html;ドキュメントルートがディレクトリ/ var/www/htmlであることを意味します。

PHPの重要な部分は、場所〜.php $ {}スタンザです。コメント解除して有効にします。

次に、ファイルを保存してnginxをリロードします。

service nginx reload

次に/etc/php/7.0/fpm/php.iniを開きます...

nano /etc/php/7.0/fpm/php.ini

...およびset cgi.fix_pathinfo=0:

[...]
; cgi.fix_pathinfo provides *real* PATH_INFO/PATH_TRANSLATED support for CGI.  PHP's
; previous behaviour was to set PATH_TRANSLATED to SCRIPT_FILENAME, and to not grok
; what PATH_INFO is.  For more information on PATH_INFO, see the cgi specs.  Setting
; this to 1 will cause PHP CGI to fix its paths to conform to the spec.  A setting
; of zero causes PHP to behave as before.  Default is 1.  You should fix your scripts
; to use SCRIPT_FILENAME rather than PATH_TRANSLATED.
; http://php.net/cgi.fix-pathinfo
cgi.fix_pathinfo=0
[...]

PHP-FPMをリロードします。

service php7.0-fpm reload

次に、次のPHPファイルをドキュメントルート/ var/www/htmlに作成します。

nano /var/www/html/info.php

<?php
phpinfo();
?>

次に、ブラウザでそのファイルを呼び出します(例 http://localhost/info.php ):

4
Pradeep Sapkota

Php-fpmを使用するとき、/ etc/nginx/sites-available/defaultのこのブロックのコメントを外しました

 location ~ \.php$ {
            include snippets/fastcgi-php.conf;
    #
    #       # With php-fpm (or other unix sockets):
            fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
    #       # With php-cgi (or other tcp sockets):
            #fastcgi_pass 127.0.0.1:9000;
    }
0
Tarek Fellah

PHPハンドラーを削除する必要はありません。コメント化するか、行を削除してください

#php_admin_value engine Off

うまくいくはずです。

0
Cosmo Arun

最初の場合と同様に、PHPのロケーションブロックを設定する必要があります。

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