16
25

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

さくらVPSでWebサーバを稼働させる

Last updated at Posted at 2018-01-05

#はじめに
Webサーバを構築してみたので備忘録。

VPSを用いてサイトを公開するまでに行った作業は以下の通り。

  1. HTMLやCSS, JavaScript, PHPなどでコンテンツを作成する。
  2. VPSの契約、ドメインの取得を行う。
  3. VPS上でWebサーバを構築し、設定を行い、コンテンツを公開する。

ここでは、"3"の作業について、行ったことをざっくり説明する。
VPS提供サービスにはさくらインターネット、ドメイン取得サービスにはお名前.comを利用した。

#ネームサーバの設定
お名前.comで取得したドメインをさくらインターネットのVPSで使用するために、ネームサーバ(=DNSサーバ)の設定を行う必要がある。さくらインターネットでは、VPSの契約を行うと無料でネームサーバにドメインを登録できる(契約の種類によって無料で登録できる個数の上限はある)。今回はさくらインターネットのネームサーバを使用する。

###1. さくらインターネットのネームサーバを調べる
さくらインターネットにログイン。契約情報 -> 契約ドメインの確認 -> ドメインメニュー -> ネームサーバ新規登録
ここでお名前.comで取得したドメインを追加する。その後、ドメイン一覧からゾーン情報を確認すると、各レコードの内容が確認できる。NSレコードにプライマリDNSサーバとセカンダリDNSサーバのドメインが載っている。

###2. ネームサーバを指定する
お名前.comのドメインNaviにログイン。ドメイン設定 -> ネームサーバーの変更 -> 他のネームサーバーを利用
ここに、先ほど確認したさくらインターネットのプライマリ及びセカンダリDNSサーバのドメインを入力する。

これで、VPSのIPアドレスと取得したドメイン名がネームサーバによって関連付けられた。

#VPSの事前準備
さくらVPSはデフォルトでCentOS 6がインストールされている。
しかし、今後のことを考えて、様々な機能が追加されているCentOS 7をインストールしておく。
VPSの管理画面において、各種設定 -> OSインストール。CentOS 7のカスタムOSインストールを選択することで、インストーラが開き、パーティションの設定やrootユーザ、一般ユーザの設定が行える。

インストールが終わったら、VNCコンソールを開き、rootでログインしてvisudoコマンドを実行。(viで設定ファイルが開く)
一番下の行に以下の設定を追加する。

一般ユーザ名 ALL=(ALL) ALL

これで、一般ユーザに全コマンドの管理者実行(sudoを付けて)が許可された。

#SSHの設定

さくらVPSの管理画面からVPSを操作することもできるが、セキュリティの観点から、SSHによる遠隔ログインでVPSを操作したい。

SSHの設定を行うために、エディタで設定ファイルを開く。
(エディタは使いやすいものを適宜インストールしておく)

$ emacs /etc/ssh/sshd_config

SSHはデフォルトでは22番ポートに設定されているが、このままだとログイン試行の攻撃を受けやすいので変更する。また、SSH経由のrootログインが出来ないようにも設定する。

#Port 22
.
.
.
#PermitRootLogin yes

このようになっているので、

Port 任意のポート番号
.
.
.
PermitRootLogin no

このように変更する。ポート番号は、ウェルノウンポート番号(0-1023番)以外で、他のアプリケーションが使用していない番号を指定する。ポート番号は16ビットで表されるので、1024-65535番の中から指定すればよい。ただ、1024-49151番はIANAによって特定のアプリケーションに登録されている可能性があるため、49152番以降を指定するとよい。

次にセキュリティに関する設定を行う。
Linuxディストリビューションには、不正ログインを受けた際の被害を抑えるための機構として、SELinuxが用意されている。この設定を変更するためコマンドとしてpolicycoreutils-pythonをインストールし、指定したSSHのポート番号を許可させる。

$ yum -y install policycoreutils-python
$ semanage port -a -t ssh_port_t -p tcp 指定したSSHのポート番号

次にfirewallの設定を行う。firewallを正しく設定することで、特定のポートによる通信のみを通過させることが出来る(もちろんIPアドレスによる制御なども出来るがここではしない)。SSHのポート番号を指定するために、SSH設定用のテンプレートをコピーして、それを編集する。

$ cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/
$ emacs /etc/firewalld/services/ssh.xml

ssh.xmlの下の方に、

<port protocol="tcp" port="22">

と、ポートを指定している行があるので、これを変更する。
firewallの設定を反映させて、SSHサーバを再起動する。

$ firewall-cmd --reload
$ systemctl restart sshd.service

以上で設定は完了したので、今後の作業はSSH経由で行う。
(WindowsであればTeraTermなどを用いる)

#Webサーバの導入

SSHで一般ユーザとしてログインしたら、WebサーバとしてApacheをインストールし、起動する。
Apacheはhttpdというパッケージとして提供されている。

$ sudo yum install httpd
$ sudo systemctl start httpd.service

HTTP通信は80番ポートが使用される。外部からWebサーバにアクセス出来るようにfirewallを設定する。

$ sudo firewall-cmd --permanent --add-service=http
$ sudo firewall-cmd reload

これで80番ポートへの外部からのアクセスが許可された。
デフォルトのDocumentRoot(Webページとして公開されるファイルを置くディレクトリ。/etc/httpd/conf/httpd.confから変更可)は/var/www/html/となっており、作成したWebページのファイル群をここに置くことで、外部からWebページを閲覧できる。

ここで、手元のPC(win)からVPSへWebページのファイルをまとめたフォルダを転送したい。
これにはSCP(SSHによるファイル転送プロトコル)を用いた。Windowsであれば、SCPクライアントとしてWinSCPが使いやすい。これでフォルダを転送した後、下位のファイルをDocumentRootに置く。

ここで、フォルダを転送したディレクトリにおいて、

$ sudo mv SCPで転送したフォルダ名/* /var/www/html/

としてから、Webページを閲覧すると、httpのエラーである"403 Forbidden"が表示された。
これはどうやらSELinuxの問題らしい。
-> ApacheでSELinuxが原因で403 Forbiddenエラー

mvコマンドでファイルを移動させた場合は、

$ sudo restorecon -R /var/www/html/*

としてラベルを更新する。
もしくはmvコマンドを使わずに、

$ sudo cp -R SCPで転送したフォルダ名/* /var/www/html/

とすれば問題ない。

以上で、Webサーバを稼働させてサイトを公開することが出来た。

#参考
【さくらのVPS】サーバの初期設定ガイド
【さくらのVPS】カスタムOSインストールガイド - CentOS7 / ScientificLinux7 / Fedora 24
ゼロからはじめるLinuxサーバー構築・運用ガイド 中島 能和 (著)
ApacheでSELinuxが原因で403 Forbiddenエラー

16
25
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
25

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?