ubuntu NGiNX uwsgi php-fpm 連携


[・準備](#準備)
[・phpfpmのインストール](#php-fpmのインストール)
[・NGiNXの設定](#NGiNXの設定)
[・php-fpmの設定](#php-fpmの設定)
[・起動](#起動)

# 準備
・以下の記事を参考にさせていただいた都合上、uWSGIとnginxの設定はこの記事のとおりであるという前提になってしまいますが、 ご了承ください。

https://qiita.com/Ningensei848/items/e91fbeef5f03685a7a0b



# php-fpmのインストール
まず、以下の二つのコマンドで
リポジトリをインストールします
```
 sudo apt install software-properties-common
 sudo add-apt-repository ppa：ondrej / php
```
php-fpmをインストールします
```
$ sudo apt install php7.4-fpm
```
追加モジュールインストールします。
```
$ sudo apt install php7.4-common php7.4-mysql php7.4-xml php7.4-xmlrpc php7.4-curl php7.4-gd php7.4-imagick php7.4-cli php7.4-dev php7.4-imap php7.4-mbstring php7.4-opcache php7.4-soap php7.4-zip php7.4-intl -y
```
最後に確認します
```
:~$php-fpm7.4 -v
PHP 7.4.3 (cli) (built: Mar 14 2020 23:16:22) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
    with Zend OPcache v7.4.3, Copyright (c), by Zend Technologies
```
上のようになるか確認してください

# NGiNXの設定
phpの処理が必要なリクエストが来た時に、nginxはそのリクエストをphpのAPサーバに送る必要があります。
そのために、nginxにphpのAPサーバのアドレスを伝えておきます。

`/etc/nginx/nginx.conf`を見ると


```shymky@shymky:/etc/nginx/nginx.conf

  GNU nano 4.8                                   nginx.conf                                              

user  nginx;
worker_processes  auto;

error_log  /var/log/nginx/error.log notice;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


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

    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;

    keepalive_timeout  65;

    #gzip  on;

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

```
最後の
` include /etc/nginx/conf.d/*.conf;`
` include /etc/nginx/sites-enabled/*;`
はnginxが参照するファイルの保存場所を表しています

`/etc/nginx/sites-enabled/`に移動し、
defaultとは別のconfファイルに以下を追加します

```
location ~ \.php$ {
    root           /usr/share/nginx/html;
    fastcgi_pass   192.168.11.8:9000;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    include        fastcgi_params;
}
```
つまり
```shymky@shymky:/etc/nginx/sites-enabled/(自分でつけた名前).conf

GNU nano 4.8                                                                             python_Django_practice_nginx.conf                                                                                       
upstream django {
    server unix:///home/shymky/Desktop/server/srv/python_Django_practice/python_Django_practice.sock;
    # server 127.0.0.1:8001;
}

server {
    listen      8000;
    server_name 192.168.11.8;

    charset     utf-8;
    client_max_body_size 75M;
    location /media  {
        alias /path/to/your/mysite/media;
    }

    location /static {
        alias /home/shymky/Desktop/server/srv/python_Django_practice/staticfiles;
    }
    location / {
        uwsgi_pass  django;
        include     /home/shymky/Desktop/server/srv/python_Django_practice/uwsgi_params;
    }

##これを追加
    location ~ \.php$ {
        root           /usr/share/nginx/html;
        fastcgi_pass   192.168.11.8:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }
}

```
・`root`はphpファイルのある場所
・`fastcgi_pass`はphpのAPサーバのアドレス

・＄document_rootはrootと同じ
`＄document_root＝/usr/share/nginx/html)`

・＄fastcgi_script_nameのパラメータは、urlのドメインの後ろ
例えばhttp：//192.168.11.8:8000/bord/index.phpというリクエストの場合
`＄fastcgi_script_nameは/bord/index.php`

# php-fpmの設定
ｗｗｗ.confを変更します。パスは
`/etc/php-fpm.d/www.conf`
`/etc/php/7.4/fpm/pool.d/www.conf`
のいずれかだと思います
中身はこんな感じです
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1637183/ae0a1057-b541-5090-b709-6f926ac6c164.png)

userとgroupを
Apacheからnginxに変更します。

そして、`listen=/run/php/php7.4-fpm.sock`をコメントアウト(先頭に「;」をつける)し
下に`listen=(fastcgi_passと同じ)`を追加します
fastcgi_passは先ほど/etc/nginx/sites-enabled/〇〇〇.confに追加したアドレスと同じです。

ちなみに、`listen=/run/php/php7.4-fpm.sock`はソケット通信の際に必要になります。
ソケット通信をする場合には`/etc/nginx/sites-enabled/〇〇〇.conf`のfastcgi_passのところを、`unix:/run/php/php7.4-fpm.sock;`として、www.conf内のlisten=/run/php/php7.4-fpm.sockのコメントアウトを解除してください。
今回はhttp通信で行います。

# 起動
`sudo /etc/init.d/nginx restart`
`sudo systemctl start php7.4-fpm`
として、phpのページが表示できれば成功です。