Raspberry Pi OSにNginx&PHPをインストールしてWebサーバーをたてる

# 制限事項
webサービス用ではなくて、httpプロトコル関係の実験用なので、データベスサーバーのインストールはしていないです。
PHPは要らないかもだけど、一応。
LAN内の独立したサーバーを想定しています。なので、セキュリティとか考えてないです。

# OS&HWバージョン確認
```console
$ lsb_release -a #OSのバージョンを確認
No LSB modules are available.
Distributor ID:	Raspbian
Description:	Raspbian GNU/Linux 10 (buster)
Release:	10
Codename:	buster
```
```console
$ uname -a #カーネルのバージョンを確認
Linux capybara 5.4.79-v7+ #1373 SMP Mon Nov 23 13:22:33 GMT 2020 armv7l GNU/Linux
```
```console
$ cat /proc/device-tree/model #ハードウェアのモデルを確認
Raspberry Pi 3 Model B Rev 1.2
```

# Nginxのインストール
```console
$ sudo apt update
$ sudo apt install nginx
```

ホスト名指定で `/var/www/html/index.html` が表示されるのを確認する。
![Screenshot from 2020-12-13 21-03-47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/356086/03260f08-7629-e37a-1c06-6a011e872122.png)


# Nginxの設定
### fastcgi_params
NginxでPHPを動かす為の設定を追加

```bash
$ sudo echo 'fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;' | sudo tee -a /etc/nginx/fastcgi_params
```
`tee` の `-a` オプション忘れると追記じゃなくて上書きになっちゃうから注意。

```console
$ sudo nginx -t #構文チェック
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
```

#PHPのインストール

```console
$ apt list | grep PHP | grep fpm #インストールできるバージョンの確認
php-fpm/stable,now 2:7.3+69 all
php7.1-fpm/stable 7.1.20-1+b2 armhf
php7.2-fpm/stable 7.2.9-1+b2 armhf
php7.3-fpm/stable,now 7.3.19-1~deb10u1 armhf
```
上の例だと、`php7.1` `php7.2` `php7.3` のいずれかをインストール可能なことが確認できる。`php-fpm`を指定すると、自動的に最新の`php7.3`がインストールされる。

```console
$ sudo apt-get install php-fpm #PHPをインストール
```

```console
$ apt list | grep php | grep fpm #確認
php-fpm/stable,now 2:7.3+69 all [インストール済み]
php7.1-fpm/stable 7.1.20-1+b2 armhf
php7.2-fpm/stable 7.2.9-1+b2 armhf
php7.3-fpm/stable,now 7.3.19-1~deb10u1 armhf [インストール済み、自動]
```

#NginxでPHPが走るようにする
`sudo vim /etc/nginx/sites-available/default`

修正前

```
# Add index.php to the list if you are using PHP
    index index.html index.htm index.nginx-debian.html;
```
修正後(index.phpを追加)

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

修正前

```
    # pass PHP scripts to FastCGI server
    #
    #location ~ \.php$ {
    #    include snippets/fastcgi-php.conf;
    #
    #    # With php-fpm (or other unix sockets):
    #    fastcgi_pass unix:/run/php/php7.3-fpm.sock;
    #    # With php-cgi (or other tcp sockets):
    #   fastcgi_pass 127.0.0.1:9000;
    }
```

修正後(コメントアウトを外す/`include fastcgi_params;`を追加)

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

        # With php-fpm (or other unix sockets):
        fastcgi_pass unix:/run/php/php7.3-fpm.sock;
        # With php-cgi (or other tcp sockets):
    #   fastcgi_pass 127.0.0.1:9000;
        include fastcgi_params;
    }
```

最終型

```
# Default server configuration
#
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.php 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 PHP scripts to FastCGI server
	#
	location ~ \.php$ {
		include snippets/fastcgi-php.conf;
	
		# With php-fpm (or other unix sockets):
		fastcgi_pass unix:/run/php/php7.3-fpm.sock;
		# With php-cgi (or other tcp sockets):
	#	fastcgi_pass 127.0.0.1:9000;
		include fastcgi_params;
	}

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

```

```console
sudo nginx -t #構文テスト
```

# 確認用のページ作成（index.php）

`sudo vim /var/www/html` に `index.php` を作成する。

```php
<?php
phpinfo();
```

# PHPページの表示テスト

```console
$ sudo systemctl restart nginx
```

ブラウザでホスト名を指定してアクセス。`index.html` ではなく `index.php` が表示されたのを確認。
![Screenshot from 2020-12-13 22-19-18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/356086/aa822498-6a72-2978-9806-0a2e0cdcd07f.png)

 − 以上 −