Laravelをnginx上で実行してみる


## 開発環境
- Windows 10 Pro(64bit)
- PHP 8.3.4 (cli) (built: Mar 13 2024 11:42:47) (NTS Visual C++ 2019 x64) Zend Engine v4.3.4
- Composer version 2.4.1 2022-08-20 11:44:50
- Laravel v10.0.0
- nginx version: nginx/1.24.0

## PHPの初期ページを表示させるまで
Laravelを実行する前に、まず、単純なindex.phpを表示させるまで行います。

#### ディレクトリ構成(初期段階)
Cドライブ直下に、以下の構成で、ディレクトリを作成
```
C:\
    - server
        - htdocs
            - public
```

続いて、index.phpをpublicディレクトリ内に保存します。
```php:index.php
<?php
  phpinfo();
```
#### ディレクトリ構成(現段階)
Cドライブ直下に、以下の構成で、ディレクトリを作成
```
C:\
    - server
        - htdocs
            - public
                - index.php
```

### nginxをダウンロードして実行するまで
1. [公式サイト](https://www.nginx.co.jp/)へアクセスする

2. **無料トライアル**ボタンをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2739418/3e45510d-1869-c266-3de9-5eddef4d965b.png)

3. **NGINX Open Source**の**無料ダウンロード**をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2739418/ee00e773-a860-6c7a-2ee1-29585393c4ed.png)

4. **Stable version**の**nginx/Windows-1.24.0**のリンクをクリックすると、ダウンロードが開始される

5. zipファイルを解凍し、中身のnginx-1.24.0をCドライブ内のserverに移動し、ディレクトリをリネームして、nginxとする

#### ディレクトリ構成(現時点)
```
C:\
    - server
        - htdocs
            - public
                - index.php
    - nginx
```

6.カレントディレクトリをnginxに移動し、以下のコマンドで、nginx.exeを実行
```powershell
start nginx.exe
```
ブラウザ上でlocalhostにアクセスすると、以下のように初期ページが表示されるか確認。(**html**ディレクトリ内の、**index.html**が表示される)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2739418/f34a07ea-eda5-0524-7f53-659ce4507e9e.png)

一旦、プログラムを止めるために、以下のコマンドで停止
```powershell
nginx.exe -s stop
```

7.**nginx.conf**を開き、以下の記事内の**conf/nginx.conf**の中身をコピー＆ペーストし、serverブロックのroot部分の絶対パスだけ、index.phpの入ったのディレクトリまでの絶対パスを設定する

https://qiita.com/suke/items/4936809289ffe0dc782b

### PHP
1. 現在のStableである[Current Stable PHP 8.3.4](https://www.php.net/downloads)の**Windows Downloads**のリンクをクリック

2. **VS16 x64 Non Thread Safe (2024-Mar-13 12:02:10)** の**Zip**をクリックしてダウンロードし、解凍したファイルをserverディレクトリ直下にコピー＆ペーストし、ディレクトリ名も、phpに変更する。
#### ディレクトリ構成(現時点)
```
C:\
    - server
        - htdocs
            - public
                - index.php
    - nginx
    - php
```

3.phpディレクトリ内の**php.ini-development**を、**php.ini**にリネーム。

4.nginx.exeとphp-cgi.exeを一斉起動、一斉停止するために、以下の記事からバッチファイルを2つ作成し、デスクトップに貼り付けておきます。

https://qiita.com/suke/items/4936809289ffe0dc782b

```bat:nginx-start.bat
@ECHO off

CD C:\server\nginx
START nginx.exe

CD C:\server\php
START php-cgi.exe -b 127.0.0.1:9000

EXIT
```

```bat:nginx-stop.bat
@ECHO off

CD C:\server\nginx
nginx.exe -s stop

Taskkill /im php-cgi.exe

EXIT
```
5.nginx-start.batを実行し、localhostへアクセスすると、以下のようにPHPの情報が表示されたらOKです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2739418/4cf6d919-91bf-2f88-63fd-71be18d49e0e.png)

6.nginx-stop.batを実行して、一旦、プログラムを止めます。

## Laravelの初期ページを表示するまで
1. カレントディレクトリを**c:/server/htdocs/public**に移動します。
```powershell
cd c:\server\htdocs\public
```

2.composerを用いて、Laravelをインストールします。
```powershell
composer create-project laravel/laravel:^10.0 laravel_on_nginx
```

3.プロジェクトが作成されると、ディレクトリ構成は以下のようになります。
#### ディレクトリ構成(現時点)
```
C:\
    - server
        - htdocs
            - public
                - index.php
                - laravel_on_nginx
    - nginx
    - php
```

4.nginx.confのserverブロック内のroot部分を以下のように書き換えます
```diff_nginx:nginx.conf
- root C:/server/htdocs/public;
+ root C:/server/htdocs/public/laravel_on_nginx/public;
```

5.php.ini内の以下の行のコメントを外し、保存します。
```diff_php:php.ini
- ;extension=fileinfo
+ extension=fileinfo

- ;extension=mbstring
+ extension=mbstring

// Laravel 10だと、これを追加しないと、プログラムが動きません
- ;extension=openssl
+ extension=openssl

// さっきダウンロードしたPHP内のモジュールを使用するために指定(Windowsの場合)
- ;extension_dir = "ext"
+ extension_dir = "ext"
```

5.nginx-start.batを実行して、localhostへアクセスすると、以下のように初期ページが表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2739418/6299ba18-7894-ba2d-4157-3c2ae81a285c.png)


## 参考リンク
- [Windows10にnginx+PHP環境の構築（初心者の復習用）](https://qiita.com/suke/items/4936809289ffe0dc782b)
- [Windows×nginx×PHP8×Laravel ローカル環境構築してみる](https://honey8823.hateblo.jp/entry/2022/02/10/203504)
- [PHP Warning: PHP Startup: ????????: Unable to initialize module](https://stackoverflow.com/questions/3130910/php-warning-php-startup-unable-to-initialize-module)