さくらVPS+CentOS7で、独自ドメインのウェブサイトを公開するまでの道のり
SakuraVPSで独自ドメイン運用しているwebサイト、CentOS6からCentOS7に再インストールしてからずっと放置していたので、作業したこと、詰まったことメモ。
やりたい事は、
- http://tomcha.net へのアクセスで、独自サイトを表示。
- 独自サイトはSinatra + Passenger で動かす。
- httpsも出来るように、証明書を設置。証明書はLet's Encryptを使う。
- ポートフォワード(前回はiptables,今回はfirewalledを使用)以外に、nginx にもちょっと手を出してみる。
やったこと手順
sinatra + passenger でwebアプリを実行
bundle exec passenger start -p 80 -d
な、なんといきなりエラーががが。どうもポート80で起動すると怒られる。
色々ググってみると、CentOS7では、1024より若いポートで何かするにはroot権限が必要みたい&&怒られる様。
ポート80が駄目だったので、任意のポート(記事の例は5000番)で実行して80番へのアクセスから飛ばす作戦。
bundle exec passenger start -p 5000 -d
80番ポートと443番ポートで外からアクセス出来るように設定。
# 開いてるPublicゾーンのポートの確認 firewall-cmd --list-ports --zone=public # ポートを開ける firewall-cmd --add-port=80/tcp --zone=public --permanent firewall-cmd --add-port=443/tcp --zone=public --permanent # 設定を有効化 firewall-cmd --reload
80番ポートへのアクセスを5000番ポートに投げる設定。CentOS7から使われているfirewalledを使った設定。
# public ゾーンのポートフォワードを確認 firewall-cmd --zone=public --list-forward-ports #public ゾーンで TCP80,443の通信をTCP:5000へ投げる設定 firewall-cmd --zone=public --add-forward-port=port=80:proto=tcp:toport=5000 firewall-cmd --zone=public --add-forward-port=port=443:proto=tcp:toport=5000
firewalledのポートフォワードでの転送ではなく、nginxのリバースプロキシで制御する方法
- nginxのステータス確認方法
sudo service nginx status
- nginxのリバースプロキシの設定
- /etc/nginx/nginx.conf をsudoで編集
server{ listen 80; server_name tomcha.net; location \ { proxy_set_header Host $http_host; proxy_pass http://localhost:5000; } }
- nginxのリスタート等コマンド
sudo service nginx start sudo service nginx stop sudo service nginx restart
nginxのリバースプロキシを使った場合、これで設定はOKなはずなのに、サイトにアクセスするとnginxのエラーページが表示される。
なので、nginxのログを調べてみた。
sudo ls -la /var/log/nginx/ # -> error.logってファイルが存在することがわかる。 sudo cat /var/log/nginx/error.log # -> connect() to 127.0.0.1:5000 failed (13: Permission denied)が出まくる。
どうもパーミッションの関係で5000番ポートへの接続ができていない。色々ググッてみたところ、SELinuxのセキュリティで引っ掛かってるみたい。
この辺から、かなり手に負えない感じなので、色々参考にさせてもらったサイトはこちら。
CentOS7.1 64bit SELinuxによるアクセス制御 | kakiro-web カキローウェブ
SELinuxが妨害してるのか、一度SELinuxを無効化して確認してみる。
getenforce # -> 現在有効か無効か確認 # 無効化してみる sudo setenforce Permissive
SELinuxを無効化すると、ちゃんとSinatraで作ったwebアプリが表示された。ということは、こいつが邪魔をしている模様。
ググッてみて、同じ状況の対策が書かれている記事を発見。同じようにやってみる。
# SELinuxをもう一度有効化。 sudo setenforce Enforcing # -> 予想通り繋がらなくなった。 # SELinuxの状態を表示するツールsesearchを実行したが、コマンドが見当たらず。ツールをインストール。 sudo yum install setools-console # SELinuxの状態を表示させる。オプションはコピペした sesearch -A -C -s httpd_t -t http_cache_port_t -c tcp_socket # httpd_can_network_relayのbool値を変更。(拒否DTをはずす) sudo setsebool -P httpd_can_network_relay=1 # -> 元に戻す時は httpd_can_network_relay=0 に。
繋がったーーーー