【mac】Laravel5.5+Nginx1.17.3


docker入れるまでもない時にnginxを使いたい場合。
決済を実装するにあたってLaravel Cashierを使おうと思った。
stripeサービスを使うのに開発用にローカルでhttpsを使いたかった。


#環境

```
brew install nginx
```

# ローカルでhttpでLaravelを動かす

rootの部分を絶対パスで自分のLaravelのpublicフォルダのパスに書き換えること。


```:/usr/local/etc/nginx/nginx.conf
worker_processes  1;

events {
    worker_connections  1024;
}

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

    sendfile        on;
    keepalive_timeout  65;

    server {
        listen       8080;
        server_name  localhost;
        # ここを変えること！
        root /Users/miyamoto/Projects/sample/shop_sample/laravel_shop_sample/src/public;

        index index.html index.htm index.php;

        charset utf-8;

        location / {
            try_files $uri $uri/ /index.php?$query_string;
        }

        location = /favicon.ico { access_log off; log_not_found off; }
        location = /robots.txt  { access_log off; log_not_found off; }

        access_log off;
        error_log  /var/log/nginx/myapp-error.log error;

        sendfile off;

        client_max_body_size 100m;

        location ~ \.php$ {
            fastcgi_split_path_info ^(.+\.php)(/.+)$;
            fastcgi_pass 127.0.0.1:9000;
            fastcgi_index index.php;
            include fastcgi_params;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            fastcgi_intercept_errors off;
            fastcgi_buffer_size 16k;
            fastcgi_buffers 4 16k;
        }

        location ~ /\.ht {
            deny all;
        }
    }

    include servers/*;
}
```



```
#nginxをスタートする
nginx
#nginxを止める
nginx -s stop
#再起動
nginx -s reload
```



アクセスできるはず。

http://localhost:8080/


# ローカルでhttpsでLaravelを動かす

証明書とプライベートキーを作る。
keyがプライベートキー。crtが証明書。
/etc/ssl/privateや/etc/ssl/certsのフォルダがなければ作成してから実行してね。
もちろん別のフォルダでも良い。

```
openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout /etc/ssl/private/my-nginx.key -out /etc/ssl/certs/my-nginx.crt
```

sslのところをまるっと増やした。


```:/usr/local/etc/nginx/nginx.conf
worker_processes  1;

events {
    worker_connections  1024;
}

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

    sendfile        on;
    keepalive_timeout  65;

    server {
        listen       8080;
        server_name  localhost;
        root /Users/miyamoto/Projects/sample/shop_sample/laravel_shop_sample/src/public;

        index index.html index.htm index.php;

        charset utf-8;

        location / {
            try_files $uri $uri/ /index.php?$query_string;
        }

        location = /favicon.ico { access_log off; log_not_found off; }
        location = /robots.txt  { access_log off; log_not_found off; }

        access_log off;
        error_log  /var/log/nginx/myapp-error.log error;

        sendfile off;

        client_max_body_size 100m;

        location ~ \.php$ {
            fastcgi_split_path_info ^(.+\.php)(/.+)$;
            fastcgi_pass 127.0.0.1:9000;
            fastcgi_index index.php;
            include fastcgi_params;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            fastcgi_intercept_errors off;
            fastcgi_buffer_size 16k;
            fastcgi_buffers 4 16k;
        }

        location ~ /\.ht {
            deny all;
        }
    }
    
    #ssl========
    server {
        listen       443 ssl;
	ssl_certificate /etc/ssl/certs/my-nginx.crt;
	ssl_certificate_key /etc/ssl/private/my-nginx.key;
        server_name  localhost;
        root /Users/miyamoto/Projects/sample/shop_sample/laravel_shop_sample/src/public;

        index index.html index.htm index.php;

        charset utf-8;

        location / {
            try_files $uri $uri/ /index.php?$query_string;
        }

        location = /favicon.ico { access_log off; log_not_found off; }
        location = /robots.txt  { access_log off; log_not_found off; }

        access_log off;
        error_log  /var/log/nginx/myapp-error.log error;

        sendfile off;

        client_max_body_size 100m;

        location ~ \.php$ {
            fastcgi_split_path_info ^(.+\.php)(/.+)$;
            fastcgi_pass 127.0.0.1:9000;
            fastcgi_index index.php;
            include fastcgi_params;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            fastcgi_intercept_errors off;
            fastcgi_buffer_size 16k;
            fastcgi_buffers 4 16k;
        }

        location ~ /\.ht {
            deny all;
        }
    }

    include servers/*;
}
```

プライバシーがなんとかってエラーが出るけど、詳細設定を押して見れば見れる。

ログインできた。

https://localhost/login


# トラブルシューティング

## 1.ポートが既に使われてる場合

自分の場合は昔入れたtomcatが動いてた。
出たエラー。

```
nginx: [emerg] bind() to 0.0.0.0:8080 failed (48: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:8080 failed (48: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:8080 failed (48: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:8080 failed (48: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:8080 failed (48: Address already in use)
```

プロセスID(PID)をlsofで取得してプロセスを消す。

```
sudo lsof -i:8080

sudo kill ポート番号
```


# 参考


公式
https://readouble.com/laravel/5.8/ja/deployment.html

nginx周りで参考にした
https://qiita.com/nooboolean/items/7deeb9bd9823a8b92e09
https://justrocketscience.com/post/osx-nginx-laravel

ポートエラーについて
https://qiita.com/ngron/items/55a84ef6abce903c4424
https://qiita.com/Yu-s/items/64c54def20e5fa64edd1