Docker使ってるとWebサーバーにNginxを使う例が多いので単独のWebサーバーとしてどう言う設定が必要かちょっと調べてみた。
以下は自分の試行錯誤の形なので本来のNginxの使い方かどうか?は今後また調べる。
しかしこれでエンジンエックスとかどうやったら読むのよ、、んぎんくす?知るか!!ネギンクスでいいんよ
ubuntuイメージの取得と起動
docker pull ubuntu
docker images と打ってubuntuのdockerイメージが取得できているのを確認しコンテナを起動する
docker run -it -d -p 80:80 ubuntu
コンテナが起動しているか確認
コンテナ名がvigilant_greiderでSTATUSがUPなので無事、起動したみたいですね、vigilant_greiderさんこんにちは。名前を指定しない場合2つの単語の組み合わせでコンテナ名が決められるようです。以下、コンテナ名は上記のvigilant_greiderで書いていきます。
ここから先はこのコンテナに入って作業します。以下のコマンドで入ります。rootで入れます。
docker exec -it vigilant_greider bash root@ca0e2d677c4b:/#
コンテナ起動したらまずやること、パッケージ管理システムの更新です。
apt update
Nginx
パッケージが更新できたら待望のNginxをインストールします。途中地域を選択させられますが、適当に選択する。自分は6. Asia, 79. Tokyoを選択しました。
apt install nginx
インストールできたらバージョン確認してみます。1.17.10みたいです。2020.05.29時点で1.19.0が最新みたいです。僕はこれでいいです。
root@ca0e2d677c4b:/# nginx -v nginx version: nginx/1.17.10 (Ubuntu)
早速Nginxのステータス確認してを開始してみます。
root@ca0e2d677c4b:/# service nginx status * nginx is not running root@ca0e2d677c4b:/# service nginx start * Starting nginx nginx
これで開始されたのでブラウザからアクセスしてみます。ポートは先ほどのdocker ps -aを実行したときのPORTS欄をみるとこんな感じに書いてます。
これはローカルの80番ポートをコンテナの80番ポートにフォワードすると言う意味みたいです。
>|
0.0.0.0:80->80/tcp
とりあえずなんか変えてみます。 デフォルトのドキュメントルートは/var/www/htmlのようです。内部にはindex.nginx-debian.htmlがあるのでこれを編集してみます。
<!DOCTYPE html> <html> <head> <title>Welcome to nginx!</title> <style> body { width: 35em; margin: 0 auto; font-family: Tahoma, Verdana, Arial, sans-serif; } </style> </head> <body> <h1>Welcome to nginx!</h1> <p>If you see this page, the nginx web server is successfully installed and working. Further configuration is required.</p> <p> Hello My Nginx!! </p> <p>For online documentation and support please refer to <a href="http://nginx.org/">nginx.org</a>.<br/> Commercial support is available at <a href="http://nginx.com/">nginx.com</a>.</p> <p><em>Thank you for using nginx.</em></p> </body> </html>
上記のこの部分が変更された部分です。
<p> Hello My Nginx!! </p>
これでアクセスしてみます。
おおお!変わってる!すげぇ俺天才!ドンドコドコドコ┗(^o^)┛ドコドコ┏(^o^)┓ドンドコドコドコ┗(^o^)┛ドコドコ┏(^o^)┓ドンドコドコ
・・・
あ、、、失礼しました。
ところで何故デフォルトはindex.nginx-debian.htmlなのでしょうか?つかWelcomファイルがindex.nginx-debian.htmlに指定されているってこと?ドキュメントルートって/var/www/htmlって固定なのって疑問が湧きます。Nginxの設定ファイルはこのバージョンだと /etc/nginx/nginx.conf ですのでこれをみていきましょう。httpの中にこんな記述があります。
http{ ・・・省略 include /etc/nginx/conf.d/*.conf; include /etc/nginx/sites-enabled/*; }
ここで指定されたファイルがNginxが起動時に設定として読み込まれるようです。通常はconf.d/にサーバー設定のファイルを入れていくみたいでこの時点では何もありません。
root@ca0e2d677c4b:/# cd /etc/nginx/conf.d/ root@ca0e2d677c4b:/etc/nginx/conf.d#
なのでもう一方のファイルが怪しいですね。
root@ca0e2d677c4b:~# ls /etc/nginx/sites-enabled -l total 0 lrwxrwxrwx 1 root root 34 Jun 6 11:04 default -> /etc/nginx/sites-available/default
おっと、ここは単なるシンボリックリンクで実態は /etc/nginx/sites-available/default のようです。自分はLinux詳しくないのですがなんでこんな風にリンクにしているんざんしょ?これをみてみます。(不要な部分は・・・省略としてます)
server { listen 80 default_server; listen [::]:80 default_server; ・・・省略 root /var/www/html; # Add index.php to the list if you are using PHP index index.html index.htm index.nginx-debian.html; ・・・省略 }
ありました!これですね。ドキュメントルートの設定もウエルカムファイルの設定もここでしたね。しかも次のPHPの設定なんかも何気に書かれてます。
PHP
PHPをインストールします。実はここで地雷があります。ここで素直にapt install phpとかやってしまうとオマケにApache2がもれなくついてきます。
下記は別のコンテナでphpパッケージをインストールした場合ですが、Apache2がいます。
root@9195693c2758:/# service apache2 status * apache2 is not running
また、WebサーバーとPHPを連携する場合、PHPはモジュール版とCGI版のいずれかを使う必要があり、Nginxはモジュール版は提供されていません。なので自然、CGI版であるFPM ( FastCGI Process Manager )をインストールします。
apt install php-fpm
とりあえずバージョン確認します。7.4なんですね。
root@ca0e2d677c4b:/var/www/html# php -v PHP 7.4.3 (cli) (built: May 26 2020 12:24: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
確認用にこんなファイル作っておきます。
<?php echo 'Hello PHP world!!'; ?>
この時点では当たり前ですがPHPは連携されずです。試しにアクセスしてみるとこんな感じで403になります。
今回はPHPに連携したいってのを確認したかったのでconf.d/に設定ファイルを書くのではなく、先ほどみた/etc/nginx/sites-available/defaultの設定を変えることで実現してみます。Add index.php to the list if you are using PHP とあったので素直に追加します。また、pass PHP scripts to FastCGI serve とありこれが先ほどのFastCGI serverの設定であることがわかりますので適宜コメントをはずします。
server{ ・・・省略 # Add index.php to the list if you are using PHP index index.html index.htm index.nginx-debian.html index.php; ** 変更 ・・・省略 # pass PHP scripts to FastCGI server # location ~ \.php$ { ** コメント外した include snippets/fastcgi-php.conf; **コメント外した # # # With php-fpm (or other unix sockets): fastcgi_pass unix:/var/run/php/php7.4-fpm.sock; **コメント外した(先ほどのphp -vの値を参考にするのを忘れずに) # # With php-cgi (or other tcp sockets): # fastcgi_pass 127.0.0.1:9000; } ** コメント外した }
設定を変えたのでNginxが起動できるかテストしてみます。
root@ca0e2d677c4b:/var/www/html# nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
お、成功です。設定としては妥当なようです。これでPHPファイルが実行される!と思いきや、実はpfp-fpmが起動していないとダメみたいです。、色々とググっていると、php-fpmのサービスを起動(service php-fpm startとか)であったり /etc/init.d/php-fpm start で開始するのが見かけられますが、どうもそんなサービスもファイルもないみたいで、このケースでは以下に見つけられましたので開始します。あとNginxも再起動しておきます。
追記:php-fpmのサービスはPHPバージョンごとにあるみたいですね(php7.4-fpm みたいなサービス名)
root@ca0e2d677c4b:/var/www/html# /etc/init.d/php7.4-fpm start root@ca0e2d677c4b:/var/www/html# root@ca0e2d677c4b:/var/www/html# service nginx restart * Restarting nginx nginx
お”お”お”お”お”お”お”お”お”お”お”お”お”お”お”お”お”お”お”お”お”お”お”お”お”すげぇ俺天才!ドンドコドコドコ┗(^o^)┛ドコドコ┏(^o^)┓ドンドコドコドコ┗(^o^)┛ドコドコ┏(^o^)┓ドンドコドコ
しかしこの状態だとなぜか index.phpと指定しないとダメみたいです。Apache2のようなウエルカムファイルの設定とかはまた別のようですが、とりあえずNginxとPHPの連携ができたのでこれで終わります。
以下に続きます
arcanum.hatenablog.com