最近、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;
}
誰かがアドバイスしてください、問題は何でしょうか?
解決策を見つけました。問題はnginx.confファイルにありました。
次の行を置き換えました:
default_type application/octet-stream;
と:
default_type text/html;
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 ):
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;
}
PHPハンドラーを削除する必要はありません。コメント化するか、行を削除してください
#php_admin_value engine Off
うまくいくはずです。
最初の場合と同様に、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;
}