先日Oracle Cloudにubuntu minimalのVMを作成しました。
作ったばかりの環境にウェブサーバーのNGINXをインストールします。
最初はドメインをVM作成時に割り当てられたパブリックIPアドレスに割り当てます。
oracle cloudのネットワーキングにあるDNS管理から設定します。
DNS管理のページではゾーンをクリックします。
次にゾーンの作成ボタンをクリックし、ゾーン名にドメインを入力し作成します。
ゾーン情報にネームサーバーが4つあり、これらのアドレスを自分がドメインを取得したサイトのネームサーバーに入力しておきます。
さらに目的のゾーンにレコードを追加します。
レコード型をIPv4アドレスにして、VMのパブリックIPアドレスを入力してドメインとの紐づけをします。TTLは30にしました。
さて、ここからSSH接続をして設定をしていきます。
初めからインストール済みではないと思いますがコマンド入力で確認します。
「command not found」となり、無いのでインストールします。
nginx -v
sudo apt update
sudo apt install nginx
nginx -v
インストール後に状態を確認し、OS再起動後も起動するようにします。
sudo systemctl status nginx
sudo systemctl enable nginx
次はファイヤーウォールの設定をしていきます。サーバーは正常に起動したがこの設定をしないとブラウザで到達することができません。
他のサイトではUFWの設定が書かれていたが、oracle cloudではufwはインストールされていませんでした。
AWS、GCP、AZUREまたは自宅サーバーでは多少異なる可能性があります。
UFWとはUncomplicated Firewallのことで、デフォルトで導入されていると記載がありました。
UFWではなくiptables関連のツールがインストール済みでした。
最初はこれに気付かず、UFWをインストールしポート開放をしたが、ブラウザで観覧することができず悩みました。
iptablesがポートを開放してなかったのです。
この設定ファイルは「/etc/iptables」にあるのでエディタなどで編集します。
viエディタはインストールされていないのでインストールします。
「ubuntu minimal」は人が直接ログインしないクラウド向けの最小構成としたことで、イメージサイズが通常のUbuntuサーバーの50%となっており、起動時間も40%短くなっているとのことです。
sudo apt-get install vim
エディタをインストールして編集可能になったので「/etc/iptables」にあるファイル「rules.v4」に次の項目を追加します。
-A INPUT -p tcp -m state –state NEW -m tcp –dport 80 -j ACCEPT
-A INPUT -p tcp -m state –state NEW -m tcp –dport 443 -j ACCEPT
cd /etc/iptables
ls
sudo vi rules.v4
設定を反映するコマンドを入力して状態を確認します。
sudo netfilter-persistent reload
sudo iptables -L
ここまで完了し、あとはNGINXの設定さえミスが無ければうまくいくはずです。
それではNGINXの設定をします。
ルートがどこであるか確認します。
/var/www/htmlであることがわかりました。
grep "root" -r /etc/nginx/ | grep "html"
NGINXで重要なファイルであるnginx.confの中身を見てみます。次の内容が記載されておりこれを重視して設定を進めます。
user www-data;
include /etc/nginx/sites-enabled/*;
vi /etc/nginx/nginx.conf
記述内容のディレクトリに移動してファイルを確認してみます。
cd /etc/nginx/sites-enabled/
ls -l
total 0
lrwxrwxrwx 1 root root 34 Dec 10 12:32 default -> /etc/nginx/sites-available/default
このような結果となり、ここにあるファイルはショートカットと同様なふるまいをするみたいで、ファイル自体は記述されたディレクトリに存在します。
その該当するディレクトリに移動して確認します。
cd /etc/nginx/sites-available/
ls -l
vi default
設定の続きをおこなうため最初からあるこのdefaultというファイルを見てみます。
下のほうに、メッセージを見つけました。
You can move that to a different file under sites-available/ and symlink that
to sites-enabled/ to enable it.
この表記で先ほど示したショートカットの内容が理解できるわけです。
ショートカットと思っていたが、sysmlinkとなっており、日本語でシンボリックリンクと読むみたいです。
さらに下ほ方にあるサンプルの記述をそのまま利用して、メッセージのように別のファイルを作成することにしました。
コメント扱いをはずしてドメイン名を変更したものを記述します。
sudo vi minokamo.online
server {
listen 80;
listen [::]:80;
server_name minokamo.online;
root /var/www/minokamo.online;
index index.php index.html;
location / {
try_files $uri $uri/ =404;
}
}
このファイルにはPHPやSSLの内容も記述します。
設定ファイルを作成したときに、ルートとして設定したディレクトリに所有権、パーミッションの設定をします。
cd /var/www
ls -l
sudo mkdir minokamo.online
sudo chown -R www-data:www-data minokamo.online
sudo chmod -R 755 minokamo.online
先の説明通り、sites-availableにあるファイルに対してsites-enabledにシンボリックリンクを作成します。所有権も変更します。
sudo ln -s /etc/nginx/sites-available/minokamo.online /etc/nginx/sites-enabled/minokamo.online
sudo chown -h www-data:www-data /etc/nginx/sites-enabled/minokamo.online
ブラウザで観覧するテストページをエディタで作成して、ルートとして設定したディレクトリに保存します。
sudo vi /var/www/minokamo.online/index.html
<html>
<head>
<title>test page</title>
</head>
<body>
<h1>Hello</h1>
</body>
</html>
最後にNGINXを再起動してページが表示されるか確認します。
sudo nginx -t
sudo systemctl restart nginx
http://ipアドレスではNGINXのサンプルページが表示され、
http://ドメイン名では先ほど作成したテストページが表示されます。
このドメインに対してはIPアドレスの直打ちを禁止したりする設定となりました。
これはデフォルトファイルのサーバーネームがアンダーバーになっているからだと考えられます。
server_name _;
ページが表示されないときにはoracle cloudのセキュリティリストでもポート開放をしておく必要があります。
コメント