Table of Contents
ビルトインサーバ 便利ですよね
業務ではAWSとPHP(LaravelやCakePHP)を主に触っています。
がっつりとした環境があったほうがいい時はdockerを各状況に合わせて作ったりするのですが、 ちょこっとしたWEBアプリを作る時はビルトインサーバをよく使っちゃいます。
Laravelの場合、 php artisan serve
でお手軽に起動します。
ビルトインサーバをHTTPSで使いたい
ある時、開発中のWEBアプリにHTTPS、ドメインがあたった状態でアクセスする必要がありました。
ドメインのほうは手元のhostsをいじればいいのですが、HTTPS化はどうしよう?
- ローカル環境のWEBサーバのドキュメントルートに置いちゃう
- nginx-proxyとか使ったdockerをがっつり組む
など、色々ありますが、ビルトインサーバのままHTTPS化してみたいなーと思いました。
で、色々試してみたのですが、結果としてローカル環境のnginxでプロキシするのが一番お手軽でした。
結局WEBサーバ使っちゃってるという...w
あまり需要はないと思いますが、世界のどこかに同じことを思った人がいるのであれば、
届けばいいなってことで以下にやり方メモを載せます。
やり方
Laravelでやること
Laravelで必要な設定は、よくあるSSLオフロードを行うロードバランサーの裏にいる場合と同様です。
app/Http/Middleware/TrustProxies.php
の信頼するプロキシに *
を設定します。
<?php
namespace App\Http\Middleware;
use Fideloper\Proxy\TrustProxies as Middleware;
use Illuminate\Http\Request;
class TrustProxies extends Middleware
{
/**
* The trusted proxies for this application.
*
* @var array|string
*/
protected $proxies = "*";
/**
* The headers that should be used to detect proxies.
*
* @var int
*/
protected $headers = Request::HEADER_X_FORWARDED_ALL;
}
あとは、ビルトインサーバを立ててプロキシからのアクセスを待ち受けましょう
❯ php artisan serve
Laravel development server started: http://127.0.0.1:8000
[Mon Dec 21 11:33:02 2020] PHP 7.4.3 Development Server (http://127.0.0.1:8000) started
Nginxでやること
Nginxでは、アクセスしたいドメインからのリクエストをhttpで動いているビルトインサーバに対してプロキシしてあげます。
/etc/nginx/sites-available
にビルトインサーバ用の設定を追加します
sudo vim /etc/nginx/sites-available/laravel
server {
listen 80;
server_name $DOMAIN;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name $DOMAIN;
ssl_certificate /etc/nginx/certs/server.crt;
ssl_certificate_key /etc/nginx/certs/server.key;
location / {
proxy_pass http://127.0.0.1:8000;
proxy_redirect default;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-Forwarded-Port 443;
proxy_set_header X-Forwarded-Host $host:$server_port;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
- 上記の設定ファイルでは、HTTPをHTTPSにリダイレクトする設定も入れてます。
$DOMAIN
は利用したいドメインに置き換え、手元のhosts
も併せて変更しておきます。- 証明書は自己証明書でももちろん問題ありません。
proxy_pass
はビルトインサーバが起動しているIPとポートに合わせてください。
proxy_set_header X-Forwarded-Server $host
を入れておかないと、Laravel側でのasset()
やroute()
系の処理の時に元のドメインを利用してくれないので注意です。
設定を書き終えたら sites-enabled
にシンボリックリンクを置いて、再起動
sudo ln -s /etc/nginx/sites-available/laravel /etc/nginx/sites-enabled/laravel
sudo systemctl restart nginx
うまくいけば、ブラウザでHTTPSでビルトインサーバの内容が見えていると思います。
終わり
php-pfmの設定もしなくていいので、手元でサクッと確認したいときに利用しています。
結局WEBサーバを使ってはいますが、ドキュメントルートに色々置いたり、dockerを用意するもの面倒な人がいれば参考にしてみてください。
uchida
福岡でWebエンジニアやってます。PHP, クラウド, インフラあたりが好き。
Related Posts
Daiki Urata
2023/01/05
sarah
2022/04/20