半農半エンジニアの記録

関西在住エンジニア。個人で勉強・開発したこと、その他趣味のことを書いてます。農業してます。

dockerのubuntuコンテナにnginxを設定

dockerのubuntuでnginxとphpを動かすことになったので、調べたことのメモ

今回はubuntuにnginxを設定します。

環境

  • ubuntu 18.04
  • nginx 1.14.0
  • php5.6(予定)

Dockerfile

Docker Hubのnginxがalpineかdebianだったので、ubuntuイメージをベースにします。

FROM ubuntu:18.04

LABEL maintainer=""

RUN apt-get update && \
    apt-get install -y -q curl gnupg2
RUN curl http://nginx.org/keys/nginx_signing.key | apt-key add -

RUN apt-get update && \
    apt-get install -y -q nginx

EXPOSE 80

CMD ["nginx", "-g", "daemon off;"]

イメージビルドしてコンテナ起動します。

docker build -t my-nginx .
docker run  --rm -p 443:443/tcp -p 80:80/tcp my-nginx:latest

--rmはコンテナ終了時に削除するオプションなので、不要なら削除してください。

いったんlocalhostにつないでnginxのindex.htmlが表示されることを確認。

(追記)

ちなみにnginxのインストール前に以下を入れるとvar.1.14.2になり、設定が変わります(nginxのrootが/usr/share/nginx/htmlになったり)。今回は無しで動かしてます。

RUN touch /etc/apt/sources.list.d/nginx.list && \
    echo "deb http://nginx.org/packages/ubuntu/ bionic nginx" >> /etc/apt/sources.list.d/nginx.list && \
    echo "deb-src http://nginx.org/packages/ubuntu/ bionic nginx" >> /etc/apt/sources.list.d/nginx.list

nginxの設定

以前nginxの設定したのはWindows Serverで、nginxもだいぶ前のバージョンだったのでデフォルトの設定を確認しました。

user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;

events {
        worker_connections 768;
        # multi_accept on;
}

http {

        ##
        # Basic Settings
        ##

        sendfile on;
        tcp_nopush on;
        tcp_nodelay on;
        keepalive_timeout 65;
        types_hash_max_size 2048;
        # server_tokens off;

        # server_names_hash_bucket_size 64;
        # server_name_in_redirect off;

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

        ##
        # SSL Settings
        ##

        ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
        ssl_prefer_server_ciphers on;

        ##
        # Logging Settings
        ##

        access_log /var/log/nginx/access.log;
        error_log /var/log/nginx/error.log;

        ##
        # Gzip Settings
        ##

        gzip on;

        # gzip_vary on;
        # gzip_proxied any;
        # gzip_comp_level 6;
        # gzip_buffers 16 8k;
        # gzip_http_version 1.1;
        # gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

        ##
        # Virtual Host Configs
        ##

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

どうやら仮想サーバーの設定は別のところでするらしい。

確認すると/etc/nginx/conf.dは何も入っておらず、 /etc/nginx/sites-enabledにデフォルト設定が入ってました。

server {
        root /var/www/html;
        index index.html index.htm index.nginx-debian.html;
}

rootの場所にindex.nginx-debian.htmlがあったので、これを変更してlocalhostで変更が反映されることが確認できました。

conf.dとsites-enabled

nginx.confでこれらをincludeしてますが、違いがわからなかったので調べました。

パッと見ですが公式のドキュメントを見つけられなかったので、以下の内容をざっくりまとめます。

linux - What is the different usages for sites-available vs the conf.d directory for nginx - Server Fault

共通

  • serverごとにファイル分けておく

conf.d

  • こっちがベストプラクティス
  • 外したい設定はファイルの拡張子変える
  • こっちの方が速度で有利?(ファイル直接だから?)

sites-enabled

  • sites-enabledはsites-availableへのシンボリックリンクを入れる
  • この構成はdebian系の名残
  • 外したい設定はシンボリックリンク外す

ということなので、conf.dにserver単位で設定ファイルを置いていくのが良さそうです。

phpの設定

これは次回やります。

nginxではapacheとはphpの動かし方が異なるらしい。

そもそもapacheでも設定したことないけど。