Apache HTTP ServerとApache Tomcatを連携させる
はじめに
前回、VirtualBox上のLinux環境でTomcatを動かすことができたので、今回はApache HTTP ServerとApache Tomcatを連携したいと思います。
連携した後の処理としては、ユーザーからのリクエストはApacheで受けとり、そのリクエストの内容が動的な処理が必要であればTomcatに処理を流すといったものになります。
目次
- はじめに
- 目次
- 本記事のゴール
- 環境
- 事前知識
- 環境構築手順
- おわりに
- 参考サイト
本記事のゴール
なお、本記事はApache httpd と Tomcat を連携させる方法 |を参考にさせていただきました。
環境
- Windows 10 64bit
- VirtualBox 6.1.12
- Centos 8.2
- openjdk 1.8.0_262
- Tomcat 9.0.37
- AJP 1.3
事前知識
Apache(Webサーバ)とTomcat(Webコンテナ)を併用するメリット
- TomcatにもApacheと同様にWebサーバとしての機能を持っている。
- しかし、Webサーバの専門家のApacheに比べると機能が劣ってしまう。
- なので、Tomcatが苦手な部分はApacheに任せるために併用する感じ!
AJP(Apache JServ Protocol)
環境構築手順
Apacheの設定
モジュールの読み込み確認
事前知識で記載したようにAJPを有効にするにはmod_proxy_ajp
モジュールが読み込んでいる必要があるので確認していきます。
なお、本設定はApacheのバージョン?によっては、デフォルト設定が違う場合があるので注意してください。
モジュールの読み込み設定が行われているのは、/etc/httpd/conf.modules.d
配下の00-proxy.conf
に記載があるので確認します。
[root@localhost ashitaka]# cat /etc/httpd/conf.modules.d/00-proxy.conf # This file configures all the proxy modules: # ※一部のみ記載 LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
ファイルの中身を見ると、mod_proxy_ajp
が読み込まれているので、00-proxy.conf
さえ読み込まれれば問題なさそう。
なお、mod_proxy_ajp
は mod_proxy
モジュールに依存しているのでこちらも読み込まれているとことを確認しておく。
次に00-proxy.conf
が読み込まれているかをhttpd.conf
から確認する。
[root@localhost ashitaka]# cat /etc/httpd/conf/httpd.conf # ※一部のみ記載 Include conf.modules.d/*.conf
conf.modules.dディレクトリ内の拡張子が.confのファイルを全て読み込んでくれてるみたいなので、こちらも問題なさそう。
ProxyPassの設定
必要となるモジュールは読み込まれていることは確認できたので、クライアントからApacheにリクエストが投げられた場合に、どんなものがきたらTomcatに流すのかを設定します。
設定方法としては、httpd.confに直書きするのではなくconf.dディレクトリ内に新たにconfファイルを作成し、それを読み込ませます。
なお、conf.dディレクトリはApacheの追加設定をする際に使われるみたい。
[root@localhost ashitaka]# vi /etc/httpd/conf.d/proxy-ajp.conf # 以下の内容をコピペする。 ProxyPass / ajp://localhost:8009/
一旦、すべてのリクエスト(/)をTomcatのポート番号8089に流すように設定しています。(8089番ポートについては後述)
これにてApache側の設定は完了したので、続いてTomcatの設定を行います。
Tomcatの設定
Apache側の設定で、ユーザーからのリクエストは8089番ポートに流すぞーっていう設定はできたので、次はTomcat側で8089受け取るぞーっていう設定を行います。
[root@localhost conf]# cat /opt/apache-tomcat-9.0.37/conf/server.xml
一部抜粋したものが以下になります。
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> <!-- <Connector protocol="AJP/1.3" address="::1" port="8009" redirectPort="8443" /> -->
内容としては、上側はHTTP1.1の8080番ポートの通信は受け付けるとなっています。なので、前回Tomcatのテストページを表示した際に8080番ポートを指定していたのはこれが理由になります。
下側は、デフォルトではコメントアウトされてますが、AJP1.3の8009番ポートの通信を受け付けるといった内容になっています。ここで8009番ポートとなっているので、先ほどApache側の設定ではProxyPass / ajp://localhost:8009/
と指定しています。
ここからが本題ですが、今後はApache経由のAJP通信のみ必要で直のHTTP通信は必要ないので修正します。また、この記事のはまったこと1とはまったこと2が見事にはまったので、こちらもこのタイミングで修正しておきます。
<!-- <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> --> <Connector protocol="AJP/1.3" address="0.0.0.0" ←★はまったこと1 port="8009" redirectPort="8443" secretRequired="false" /> ←★はまったこと2
再起動
設定変更したので再読み込みのために各サービスを再起動します。 これらの再起動は順番があるっぽいのでそれに沿って停止と起動を行っています。
[root@localhost conf]# systemctl stop httpd [root@localhost conf]# systemctl stop tomcat [root@localhost conf]# systemctl start tomcat [root@localhost conf]# systemctl start httpd
接続確認
これまでの設定で、AJPの設定は完了しているので、すべてのApacheへのアクセスはTomcatに流される。 それ即ち、Apacheのテストページを開こうとすればtomcatのテストページが開かれるはず!!
なので、ゲストOSから80番ポートにアクセスしてみます。
[root@localhost conf]# curl http://localhost/ <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <title>Apache Tomcat/9.0.37</title> <link href="favicon.ico" rel="icon" type="image/x-icon" /> <link href="favicon.ico" rel="shortcut icon" type="image/x-icon" /> <link href="tomcat.css" rel="stylesheet" type="text/css" /> </head> <body> # 長いので割愛。 </body> </html>
今までApacheのテストページが表示されていたものが、無事にtomcatのテストページが表示されています。
念のため、8080番ポートへのHTTPアクセスがつながらないことも確認しておきます。
[root@localhost conf]# curl http://localhost:8080 curl: (7) Failed to connect to localhost port 8080: 接続を拒否されました
こっちも想定していた通り閉じられてますね!
おわりに
以上で本記事のゴールとしていたApacheとTomcatの連携は完了です。 今回はすべてのリクエストをTomcat側に流してしまっているので、この辺りも今後の修正対象になります。
次回は、ホスト側でwarファイルを作成して、Tomcatにデプロイしてアクセスできるようにしたいと思います。
参考サイト
続きを読むVirtualBox上のLinux環境でTomcatを動かしてみる。
はじめに
前回、VirtualBox上のLinux環境をApatch HTTP Severを使用してWebサーバ化できたので、今回はTomcatを用いてアプリケーションサーバを構築してみる。
目次
- はじめに
- 目次
- 本記事のゴール
- 環境
- 事前知識
- 環境構築手順
- おわりに
- 参考サイト
本記事のゴール
なお、本記事はApache Tomcat 9 を CentOS 7 にインストールする手順 |を参考にさせていただきました。
環境
- Windows 10 64bit
- VirtualBox 6.1.12
- Centos 8.2
- openjdk 1.8.0_262
- Tomcat 9.0.37
事前知識
Tomcatとは
- Java Servletを動かすためのソフトウェアで、サーブレットコンテナとも呼ばれる
- 正式名称は
Apache Tomcat
なので、Apache HTTP Server
とごっちゃにならないようにする。 - Apache HTTP Serverと連係して使われることが多い。
Java Servletとは
- サーバー上で実行されるJavaプログラムのこと
- 動的なページ生成が可能
環境構築手順
Java8(OpenJDK)のインストール
今回はJavaアプリケーションの開発はホスト側で行うでのサーバ側はJavaランタイムのみインストールします。
[root@localhost ~]# yum install java-1.8.0-openjdk -y
インストール出来たことを確認します。
[root@localhost ~]# java -version openjdk version "1.8.0_262" OpenJDK Runtime Environment (build 1.8.0_262-b10) OpenJDK 64-Bit Server VM (build 25.262-b10, mixed mode)
バージョンが1.8.0で表示されているのでJavaのインストール完了です。
Javaランタイムとは
Tomcatのダウンロード
まず、サーバ側でTomcatを動かすための専用ユーザーtomcat
を追加します。
# -s /sbin/nologinをつけることでログインできなユーザーを作成できる。 useradd -s /sbin/nologin tomcat
次にcurlコマンドを使用して、Tomcatをダウンロードします。
curlコマンドで指定しているtomcatのバージョンについては、2020年8月時点で最新バージョンの9.0.37
をダウンロードしています。
最新バージョンに置き換えたい場合はTomcatダウンロードページにアクセスし、Core内のtar.gzの上で右クリック⇒リンクアドレスのコピーで取得したURLに置き換えてください。
※以降、Tomcatのバージョンが記載されている箇所についてはダウンロードしたバージョンに置き換える。
# rootユーザーのホームディレクトリに移動する。 [root@localhost ~]# cd ~ # ホームディレクトリ配下にtomcatをダウンロードする。 [root@localhost ~]# curl -O https://ftp.kddi-research.jp/infosystems/apache/tomcat/tomcat-9/v9.0.37/bin/apache-tomcat-9.0.37.tar.gz
ダウンロードしたファイルをtarコマンドで解凍し、/opt配下に配置します。 また、解凍したファイルの所有者も変更します。
# ファイルの解凍 [root@localhost ~]# tar -xzvf apache-tomcat-9.0.37.tar.gz # /opt配下に移動 [root@localhost ~]# mv apache-tomcat-9.0.37 /opt # 所有者の変更 [root@localhost ~]# chown -R tomcat:tomcat /opt/apache-tomcat-9.0.37
サービスの作成と登録
ダウンロードしたTomcatをサービスとして登録します。
以下、コマンドを入力してサービス定義ファイルであるtomcat.service
を作成します。
[root@localhost ~]# vi /etc/systemd/system/tomcat.service
tomcat.service
以下の内容をコピペする。ただし、バージョン記載部分についてはダウンロードした物に置き換える。
[Unit] Description=Apache Tomcat 9 After=network.target [Service] User=tomcat Group=tomcat Type=oneshot PIDFile=/opt/apache-tomcat-9.0.37/tomcat.pid RemainAfterExit=yes ExecStart=/opt/apache-tomcat-9.0.37/bin/startup.sh ExecStop=/opt/apache-tomcat-9.0.37/bin/shutdown.sh ExecReStart=/opt/apache-tomcat-9.0.37/bin/shutdown.sh;/opt/apache-tomcat-9.0.37/bin/startup.sh [Install] WantedBy=multi-user.target
保存できたら次のコマンドでファイルの権限を変更します。
[root@localhost ~]# chmod 755 /etc/systemd/system/tomcat.service
サービス定義ファイルの作成が完了したのでApacheの時と同様に有効にして、再起動します。
[root@localhost ~]# systemctl enable tomcat Created symlink /etc/systemd/system/multi-user.target.wants/tomcat.service → /etc/systemd/system/tomcat.service. # 再起動 [root@localhost ~]# reboot
実行確認
tomcatが起動されているかステータス確認してみると、エラーが発生しているので対応していく。
[root@localhost ~]# systemctl status tomcat ● tomcat.service - Apache Tomcat 9 Loaded: loaded (/etc/systemd/system/tomcat.service; enabled; vendor preset: disabled) Active: failed (Result: exit-code) since Fri 2020-08-14 04:17:07 EDT; 1min 43s ago Main PID: 902 (code=exited, status=203/EXEC) 8月 14 04:17:07 localhost.localdomain systemd[1]: Starting Apache Tomcat 9... 8月 14 04:17:07 localhost.localdomain systemd[1]: tomcat.service: Main process exited, code=exited, status=203/EXEC 8月 14 04:17:07 localhost.localdomain systemd[1]: tomcat.service: Failed with result 'exit-code'. 8月 14 04:17:07 localhost.localdomain systemd[1]: Failed to start Apache Tomcat 9. 8月 14 04:18:41 localhost.localdomain systemd[1]: /etc/systemd/system/tomcat.service:14: Unknown lvalue 'ExecReStart' in section 'Service' 8月 14 04:18:46 localhost.localdomain systemd[1]: /etc/systemd/system/tomcat.service:14: Unknown lvalue 'ExecReStart' in section 'Service'
サービスを開始してみるとやっぱり落ちてしまってるみたい。。
[root@localhost ~]# systemctl start tomcat Job for tomcat.service failed because the control process exited with error code. See "systemctl status tomcat.service" and "journalctl -xe" for details.
出力されたログの通りコマンドを入力してログを見てみる。
[root@localhost ~]# journalctl -xe # 赤文字部分を一部抜粋 8月 14 04:20:56 localhost.localdomain setroubleshoot[2266]: SELinux is preventing (artup.sh) from execute access on the file startup.sh. For complete SELinux messages run: sealert -l 99b91766-a265-4d33-8>
ログを見てみる限りSELinuxが原因っぽいので、一旦無効化してみる。 今回は手探りでPermissiveにしているが本当にこれでよいかどうかは今後勉強してみようと思う。
# SELinuxの動作モードを恒久的に`Permissive`に変更 [root@localhost ~]# vi /etc/selinux/config # This file controls the state of SELinux on the system. # SELINUX= can take one of these three values: # enforcing - SELinux security policy is enforced. # permissive - SELinux prints warnings instead of enforcing. # disabled - No SELinux policy is loaded. SELINUX=enforcing ← ★ここを`permissive`に変更する。 # SELINUXTYPE= can take one of these three values: # targeted - Targeted processes are protected, # minimum - Modification of targeted policy. Only selected processes are protected. # mls - Multi Level Security protection. SELINUXTYPE=targeted
もっかいサービス起動してみて状態を確認してみると正常に起動している。
# tomcatサービスのステータス確認(Active: activeなので正常に起動している。) [root@localhost ~]# systemctl status tomcat ● tomcat.service - Apache Tomcat 9 Loaded: loaded (/etc/systemd/system/tomcat.service; enabled; vendor preset: disabled) Active: active (exited) since Fri 2020-08-14 04:25:15 EDT; 7s ago Process: 2322 ExecStart=/opt/apache-tomcat-9.0.37/bin/startup.sh (code=exited, status=0/SUCCESS) Main PID: 2322 (code=exited, status=0/SUCCESS) Tasks: 14 (limit: 11324) Memory: 158.4M CGroup: /system.slice/tomcat.service └─2336 /usr/bin/java -Djava.util.logging.config.file=/opt/apache-tomcat-9.0.37/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKey> 8月 14 04:25:15 localhost.localdomain systemd[1]: Starting Apache Tomcat 9... 8月 14 04:25:15 localhost.localdomain systemd[1]: Started Apache Tomcat 9.
ゲストOSからTomcatのテストページを表示する
無事に起動できてるっぽいので、ゲストOSからTomcatのテストページを開いてみると表示されることを確認できた!
# Tomcatのデフォルトのポート番号は8080 [root@localhost ~]# curl http://localhost:8080 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <title>Apache Tomcat/9.0.37</title> <link href="favicon.ico" rel="icon" type="image/x-icon" /> <link href="favicon.ico" rel="shortcut icon" type="image/x-icon" /> <link href="tomcat.css" rel="stylesheet" type="text/css" /> </head> <body> # 長いので割愛。 </body> </html>
ホストOSからゲストOSのTomcatのテストページを表示する
まず初めにApacheのとき同じようにVirtualBoxのポートフォワーディングの設定を行う。 (Apacheが8080を設定していてややこしかったので、そこらへんも併せて修正しています。)
次にホストOSからの8080番ポートへのアクセスはファイアウォールにより遮断されてしまうので、設定を行います。
まず、firewallに読み込ませるtomcat用の設定ファイルを作成します。
vi /etc/firewalld/services/tomcat.xml
中身は以下の内容をコピペする
<?xml version="1.0" encoding="utf-8"?> <service> <short>Apache Tomcat</short> <description>Apache Tomcat</description> <port protocol="tcp" port="8080"/> </service>
先ほど作成したtomcatファイルをfirewalldに読み込ませる。
# --permanent : 恒久設定(これを指定しないと再起動時のこの設定が消えてしまう。) # --zone=public : ゾーン設定(要確認) # --add-service : 追加するサービスを指定 [root@localhost ~]# firewall-cmd --zone=public --permanent --add-service=tomcat success # サービスの再起動(設定ファイルを読み込む。) [root@localhost ~]# systemctl restart firewalld
ホストOSのブラウザからhttp://localhost:8080/にアクセスしてみて以下のページが表示されたら完了。
おわりに
SELinuxの設定当たりで一度躓きましたが、無事にゴールとしていたところまで無事に辿り着けました。
次回は、今回飛ばしたSELinuxの設定やApache HTTP Serverとの連携部分をやっていきたいと思います。
参考サイト
- Tomcatとは?使い方を分かりやすく解説!初心者向けのインストール手順も確認。Apacheと連携するメリットも紹介 | A-STAR(エースター)
- 【社内勉強会】ApacheとTomcat(2017/03/09) - Qiita
- Linux(CentOS)にApacheとTomcatをインストールしてJavaアプリをデプロイするまで - Qiita
- Apache Tomcat 9 を CentOS 7 にインストールする手順 |
Apacheの設定ファイルを確認する
はじめに
前回、Apacheのインストールが完了したので今回はApacheの設定ファイルであるhttp.confの中身を確認したいと思います。
目次
- はじめに
- 目次
- 本記事のゴール
- 環境
- httpd.conf
- 設定ファイルの場所
- 34行目:ServerRootディレクティブ
- 45行目:Listenディレクティブ
- 59行目:Includeディレクティブ
- 69,70行目:User,Groupディレクティブ
- 89行目:ServerAdminディレクティブ
- 105行目:Directoryディレクティブ
- 106行目:AllowOverrideディレクティブ
- 107行目:Requireディレクティブ
- ★122行目:DocumentRootディレクティブ
- 147行目:Optionsディレクティブ
- 166行目:IfModuleディレクティブ
- ★167行目:DirectoryIndexディレクティブ
- 174行目:Filesディレクティブ
- ★185行目:ErrorLogディレクティブ
- ★192行目:LogLevelディレクティブ
- ★220行目:CustomLogディレクティブ
- おわりに
- 参考
本記事のゴール
Apacheの設定ファイル(http.conf)のコマンドであるディレクティブについてやる気が出る限り確認する。
環境
- Apaceh 2.4.37
httpd.conf
設定ファイルの場所
Apacheの設定ファイルは、/etc/httpd/conf
配下のhttpd.conf
に記載されています。
34行目:ServerRootディレクティブ
ServerRoot "/etc/httpd"
45行目:Listenディレクティブ
Listen 80
- Apacheで使用するポート番号を指定する。
- 80番ポートを他で使っていないならデフォルト80のままでよさそう。
59行目:Includeディレクティブ
Include conf.modules.d/*.conf
- サーバ設定ファイルから他の設定ファイルを読み込む。
- /etc/httpd/conf.modules.d内のconfファイルをすべて読み込んでいる。
69,70行目:User,Groupディレクティブ
User apache Group apache
89行目:ServerAdminディレクティブ
ServerAdmin root@localhost
- サーバがクライアントに送るエラーメッセージに含める電子メールアドレス
- メール機能が使わないなら特にいじらなくてよさそう。
105行目:Directoryディレクティブ
<Directory /> ・・・ </Directory>
- 指定のファイルシステムのディレクトリとサブディレクトリのみに 適用されるディレクティブを囲む
- 上記だと
ルートディレクトリ(/)
以下のすべてに適用されるディレクティブを内部に記載する。 - なお、Directory ディレクティブは下位のディレクトリに対する設定によって上書きされる。
- なので、全体としては拒否しておいて、あるディレクトリにおいては許可するといった記載になる。
106行目:AllowOverrideディレクティブ
AllowOverride none
107行目:Requireディレクティブ
Require all denied
- アクセス制御に関する設定を行う。
all denied
なので、全てのアクセスを拒否している。all granted
が設定されていれば、全てのアクセスが許可される。
★122行目:DocumentRootディレクティブ
DocumentRoot "/var/www/html"
- Webから見えるメインのドキュメントツリーになるディレクトリ
- クライアントからコンテンツリクエスト(httpリクエスト)した場合に、レスポンスとして返すファイルを配置する場所。
- 絶対パスでない場合は、ServerRootからの相対パスとなる。
例えば/var/www/html/HelloWorld.html
といったファイルを配置すれば、クライアント側からはhttp://localhost/HelloWorld.html
でコンテンツを取得することができる。
147行目:Optionsディレクティブ
Options Indexes FollowSymLinks
166行目:IfModuleディレクティブ
<IfModule dir_module> ・・・ </IfModule>
- IFがついてるからわかるように、指定したモジュールが存在する場合に処理されるディレクティブを設定することができる。
★167行目:DirectoryIndexディレクティブ
DirectoryIndex index.html
- クライアントがファイル名を指定せずにサーバにリクエストを送った場合に、返されるデフォルトのファイルを設定する。
- この設定だと、
http://localhost/
でリクエストを送った場合にindex.html
が返される。
174行目:Filesディレクティブ
<Files ".ht*"> ・・・ </Files>
- Directoryディレクティブと似たようなもので、マッチするファイル名に適用されるディレクティブを設定する。
.htから始まる
ファイルが対象になる。
★185行目:ErrorLogディレクティブ
ErrorLog "logs/error_log"
- エラーログを出力する場所を設定する。
logs
は/var/log/httpd
へのシンボリックリンクなので、/var/log/httpd
配下に出力される。
★192行目:LogLevelディレクティブ
LogLevel warn
- 名前の通り、ログレベルを設定する。
★220行目:CustomLogディレクティブ
CustomLog "logs/access_log" combined
- アクセスログを出力する場所を設定する。
logs
は/var/log/httpd
へのシンボリックリンクなので、/var/log/httpd
配下に出力される。combined
はログのフォーマットを示す。
おわりに
一旦、やる気もなくなってきたので今回はここまでにしたいと思います。
★がついてるのは個人的に重要そうor今後確認するであろう項目につけています。
今回の調査で、なんでファイル名指定してないのに、index.htmlが呼ばれるんだ~とか、なんでhtmlファイルは/var/www/html
に置くんだー
っていうのは、納得することが出来てよかった!
だけど、全部の項目を確認するのは、時間的にも厳しいと思うので必要なものを都度確認してまとめる方針に変えようかな~と考え中。(だれてしまうので。。。)
参考
- Apache HTTP サーバ バージョン 2.4 ドキュメント - Apache HTTP サーバ バージョン 2.4
- ディレクティブ一覧 - Apache HTTP サーバ バージョン 2.4
- ◇Apacheの構成と設定の準備◇初心者のためのLinuxサーバー構築講座(CentOS 自宅サーバー対応)☆お便利サーバー.com☆
- Apache入門 ~ローカル環境へのインストール方法や、Apacheを利用したWebサーバの公開方法など~
VirtualBox上のLinux環境をWebサーバ化してみる
はじめに
前回で環境構築およびホストOSからSSH接続ができるにようになったので当初の目的であって、好きに使って壊せる環境で遊んでいきたいと思います。
まず手始めに今回はApacheをインストールして、Webサーバ化してみたいと思います。
目次
- はじめに
- 目次
- 本記事のゴール
- 環境
- 事前知識
- Apacheとは
- Webサーバ化構築手順
- CentOS 8.0にApacheをインストールする
- Apacheの起動設定
- VirtualBoxのポートフォワーディング設定(NATの場合)
- ホストOSからゲストOSにHTTPアクセスする
- おわりに
- 参考サイト
本記事のゴール
- CentOS 8.0にApacheをインストールする。
- VirtualBoxにポートフォワーディング設定を行う。
- ホストOSからアクセスする。
なお、本記事は VirtualBox + CentOS7 でApacheをインストール - HRR Co., Ltd.を参考にさせていただきました。
環境
- Windows 10 64bit
- VirtualBox 6.1.12
- Centos 8.2
- Apache 2.4.37
事前知識
Apacheとは
以下、Wikipediaからの参照
Apache HTTP Server(アパッチ エイチティーティーピー サーバ)は、Apache License2.0の条件でリリースさ>れるフリーでオープンソースのクロスプラットフォームのWebサーバソフトウェアである。Apache はApacheソフトウェア財団の支援のもと、開発者のオープンコミュニティによって開発・保守されている。
簡単にまとめると
同様のソフトウェアとして、以下があるので名前を聞いたときにはApacheと似たようなものね。ってふんわり紐づけしておく。
- IIS(Internet Information Services)
- nginx(エンジンエックスと読むみたい。初見では読めね~)
- GoogleWebServer
Webサーバ化構築手順
CentOS 8.0にApacheをインストールする
RLoginでホストOSからゲストOSにSSH接続し、root権限に昇格します。
[ashitaka@localhost ~]$sudo su -
パッケージ管理システムであるyumを使用してインストールします。
全てyesで回答で良いのでオプション-y
を付けています。
なお、apacheじゃなくてhttpdインストールしてない?って感じになりそうですが、Linuxでインストールする際の名称はhttpdみたい。
[root@localhost ~]# yum install httpd -y
完了しました!と表示されたらインストールは完了です。
念のためバージョンを確認するコマンドを実行してみます。
[root@localhost ~]# httpd -version Server version: Apache/2.4.37 (centos) Server built: Jun 8 2020 20:14:33
Apacheのバージョン2.4.37でインストールされていることが確認できます。
Apacheの起動設定
インストールした直後のApacheは起動されていません。
systemctl
はサービスの起動や停止などを出来るコマンドでstatus
は状態を確認するコマンドです。
[root@localhost ~]# systemctl status httpd ● httpd.service - The Apache HTTP Server Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled) Active: inactive (dead) Docs: man:httpd.service(8)
なので、まずサービスを起動して状態を確認してみます。
[root@localhost ~]# systemctl start httpd [root@localhost ~]# systemctl status httpd ● httpd.service - The Apache HTTP Server Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled) Active: active (running) since Sun 2020-08-09 21:58:21 EDT; 19s ago Docs: man:httpd.service(8) Main PID: 30954 (httpd) Status: "Running, listening on: port 80" Tasks: 213 (limit: 11324) Memory: 25.0M CGroup: /system.slice/httpd.service ├─30954 /usr/sbin/httpd -DFOREGROUND ├─30955 /usr/sbin/httpd -DFOREGROUND ├─30956 /usr/sbin/httpd -DFOREGROUND ├─30957 /usr/sbin/httpd -DFOREGROUND └─30960 /usr/sbin/httpd -DFOREGROUND 8月 09 21:58:21 localhost.localdomain systemd[1]: Starting The Apache HTTP Server... 8月 09 21:58:21 localhost.localdomain httpd[30954]: AH00558: httpd: Could not reliably determine the server's fu> 8月 09 21:58:21 localhost.localdomain systemd[1]: Started The Apache HTTP Server. 8月 09 21:58:21 localhost.localdomain httpd[30954]: Server configured, listening on: port 80
Activeの項目がactiveとなっていれば、起動完了です。
試しにゲストOS側で自身の80番ポートにcurlコマンドを使用してアクセスできるか試してみます。
[root@localhost ~]# curl http://localhost <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE HTML> <html lang="en"> <head> <title>CentOS 提供的 Apache HTTP 服务器测试页</title> <meta charset="utf-8"/> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"/> <link rel="shortcut icon" href="http://www.centos.org/favicon.ico"/> <link rel="stylesheet" media="all" href="noindex/common/css/bootstrap.min.css"/> <link rel="stylesheet" media="all" href="noindex/common/css/styles.css"/> </head> <body> # 省略 </body> </html>
文字化けしている部分もありますが、無事にレスポンスがあることが確認できます。
一応、apche起動していなければ以下のような返答が返ってきます。
[root@localhost ~]# curl http://localhost curl: (7) Failed to connect to localhost port 80: 接続を拒否されました
VirtualBoxのポートフォワーディング設定(NATの場合)
続いて、ホストOS側からゲストOSの80番ポートにアクセスしてみます。
SSH接続のときと同様に、ホストOS側からゲスト側のHTTP接続用の80番ポートにアクセスするには、ポートフォワーディングの設定が必要になります。
- Oracle VM VirtualBoxマネージャーを開く。
- 仮想マシン上で右クリックをして、【設定】を開く。
- 【ネットワーク】→【高度(D)】→【ポートフォワーディング】をクリックする。
- 右上の+ボタンをクリックして、以下を設定する。
- 名前
- 任意の名前(今回はHTTP接続用とわかるようにするためにHTTPとする)
- プロトコル
- ホストIP
- (空白)
- ホストポート
- 任意の数字(今回は8080)
- ゲストIP
- (空白)
- ホストポート
- 80(sshのポート番号)
以上の設定を有効にするために、仮想マシンの再起動を行う。
ホストOSからゲストOSにHTTPアクセスする
よし、これでapcheの起動も完了して、ポートフォワーディングの設定も有効にしたし、ブラウザからhttp://localhost:8080/にアクセスしてみる。 ポートはポートフォワーディングで設定した8080を指定する。
が、いつまでたっても返答が返ってこない。。。。
まあ、こうなることは想定済みで、原因は2つあるので次で説明していきます。
原因その1:Apacheの自動起動設定
結論から言うと、Apacheが起動されていないことが1つめの原因です。 というのも、ポートフォワーディングの設定を行った際に再起動もしたため、Apacheが停止されている状態になっています。
解決策として、毎回systemctl start httpd
をコマンドで叩いてもいいけどそれはさすがに面倒くさいので、自動起動設定を行う。
[root@localhost ~]# systemctl enable httpd
これをしておくだけで、Linuxの起動時にApacheも自動起動されるようになる。
原因その2:ファイアウォールの設定
ファイアウォールのサービスであるfirewalldがデフォルトで起動されており、それが原因でホストOSから80番ポートへのアクセスがブロックされてしまっている。
なので、以下コマンドで80番ポートへのアクセスを許可します。
# ポートの追加 # --permanent : 恒久設定(これを指定しないと再起動時のこの設定が消えてしまう。) # --zone=public : ゾーン設定(要確認) # --add-port=80/tcp : tcp接続による80番ポート接続を許可 [root@localhost ~]# firewall-cmd --zone=public --add-port=80/tcp --permanent success # 設定の反映 [root@localhost ~]# firewall-cmd --reload success
再挑戦
再び、ホストOSのブラウザからhttp://localhost:8080/にアクセスしてみる。
この画面が表示されれば無事にHTTP接続することが完了!!
念のためVirtualBoxからスナップショットを取っておくことをオススメします。
おわりに
今回も無事にゴールとしていたところまで完了です!
今回の手順通りにやっていれば恒久的な設定となっているので、VirtualBoxを再起動したとしてもブラウザからアクセスできるようになっています。
ただし、Webサーバ自体が停止している(VirtualBox上のLinuxが起動されていない)状態では、アクセスできないので注意してください。
次回はテストページ以外も表示されるようにしていきたいと思います。
参考サイト
続きを読む【Windows】VirtualBox上のCentOSにSSH接続する
はじめに
前回、VirtualBox上にLinux環境を構築できたので、ホストOSのWindowsからSSH接続してみたいと思います。
目次
- はじめに
- 目次
- 本記事のゴール
- 環境
- 事前準備
- RLoginのインストール
- VirtualBoxのポートフォワーディング設定(NATの場合)
- パスワード認証方式でSSH接続する
- RLogin
- コマンドプロンプト
- 公開鍵認証方式でSSH接続する
- おわりに
- 参考サイト
本記事のゴール
SSHの認証方式には2種類あるので両方試します。
環境
- Windows 10 64bit
- VirtualBox 6.1.12
- Centos 8.2
- RLogin 2.25.3
事前準備
RLoginのインストール
今回はターミナルソフトとして、RLoginを使用しますがTeratermなど使い慣れているものでOK。
RLoginはこちらからダウンロードできます。
VirtualBoxのポートフォワーディング設定(NATの場合)
Virtualbox内のゲストOSにアクセスする場合、ポートフォワーディングの設定が必要になります。
ホストOSからゲストOSにSSH接続するというのは、ホストOSからホストOS内のゲストOSに接続するということで、ホストOSからすると自分の中のゲストOSに接続するようなもの。
このような接続を実現するのがポートフォワーディングと呼ばれるもので、ホストOSのこのポートにアクセスしたら、仮想マシン内の特定のポートへ接続するといったことができる。
- Oracle VM VirtualBoxマネージャーを開く。
- 仮想マシン上で右クリックをして、【設定】を開く。
- 【ネットワーク】→【高度(D)】→【ポートフォワーディング】をクリックする。
- 右上の+ボタンをクリックして、以下を設定する。
以上の設定を有効にするには、仮想マシンの再起動が必要になる。
パスワード認証方式でSSH接続する
事前準備が完了したので、パスワード認証方式でSSH接続します。
RLogin
- RLogin.exeを実行する。
- 【新規(N)】をクリックして、以下の内容を入力する。
- 【OK】をクリックして、設定した接続情報を選択して、再度【OK】をクリックする。
- 無事にログインできたらパスワード認証によるログインは完了!!
- エントリー(上)
- 任意の名前
- プロトコル
- ホスト名
- localhsot
- TCPポート
- 2222(ポートフォワーディング設定のホストポートで設定したもの)
- ログインユーザー
- ashitaka(身で作成したユーザー名)
- パスワード
- 自身で設定したパスワード
コマンドプロンプト
コマンドプロンプトだと以下のコマンドを入力した後に、パスワードを入力することでログインできる。
# ssh ユーザー名@ホスト名 -p ポート番号 ssh ashitaka@localhost -p 2222
公開鍵認証方式でSSH接続する
続いて、よりセキュアな認証方式である公開鍵認証方式でSSH接続してみる。
公開鍵認証方式についてはこちらを参考にさせていただきました。
秘密鍵・公開鍵の作成
今回はホストOS側で鍵を作成し、ゲストOS側に鍵を転送します。
鍵を保存するためのフォルダを任意のパスに作成する。
mkdir .ssh
次のコマンドを実行して、鍵を作成する。
# -t : 署名アルゴリズム # -f : 作成するキー名 # -C : コメント ssh-keygen -t ed25519 -f .ssh/id_ed25519_localhost_key -C " "
そうするとパスフレーズが聞かれるので、パスワードを入力します。 パスフレーズを設定しない場合は、Enter連打でOK!
処理が完了すると、指定したフォルダ内に-fで指定したファイル名の秘密鍵と拡張子.pubが付与された公開鍵が作成されます。
ゲストOSに公開鍵を渡す
WinSCPやRLoginの機能を用いて、ホストOSからゲストOSの/home/ashitakaに公開鍵ファイルを転送します。(ashitaka部分は自身が作成したユーザー名に置き換える。)
以下のコマンドを順に実行し、公開鍵の設定を行います。
# ディレクトリ.sshを作成 mkdir .ssh # ディレクトリ.sshのパーミッションを700変更(オーナーのみ読み込み、書き込み、実行が可能) chmod 700 .ssh # 公開鍵を.sshディレクトリのauthorized_keysというファイル名でコピーする。 cat id_ed25519_localhost_key.pub >> .ssh/authorized_keys # ファイルauthorized_keysのパーミッションを600変更(オーナーのみ読み込み、書き込みのみ可能) chmod 600 .ssh/authorized_keys # 転送した鍵ファイルを削除する。 rm -f id_ed25519_localhost_key.pub
RLoginでのSSH認証鍵による接続
RLoginを起動して、新規(N)をクリックする。
入力内容は基本的にパスワード認証方式と同じでパスワードのところだけ空白にする。 そして、画面右下の【SSH認証鍵】をクリックして、先ほど作成した秘密鍵を選択し、【OK】をクリックする。
接続すると設定したパスフレーズを聞かれるので入力して、ログインできれば完了!!
おわりに
本記事のゴールとしていた、パスワード認証方式と公開鍵認証方式によるSSH接続ができました。
ただし、今の設定のままですとパスワード認証と公開鍵認証方式のどちらでも接続できる状態になっておりセキュアな状態とは言えません。
本来ならば鍵認証できるようになったらパスワード認証は無効化するのが常套手段と思いますが、長くなりそうなので今回はここまでにしておきます。
参考サイト
- 【Linux】(初心者向け)VirtualBoxにCentOS7環境を構築する - SEワンタンの独学備忘録
- [OpenSSH] SSHの2つの認証方式の違い - Life with IT
- Windows10で公開鍵認証の鍵ペアを生成してサーバーにSSH接続する | 己で解決!泣かぬなら己で鳴こうホトトギス
- パーミッションを変更するには - とほほのWWW入門
Rloginでコピペ(Ctrl + C, Ctrl + V)する
はじめに
RLoginの初期設定では、コピー(Ctrl + C)やペースト(Ctrl + V)のショートカットが有効ではないので、ショートカットでコピペできるようにする。
環境
- RLogin 2.25.3
手順
RLoginを起動して、【編集】ボタンをクリックする。
左側のメニューから【キーボード】をクリックし、キーコード設定画面で【新規】をクリックする。
コピーの設定
Assign Key String画面で以下の内容を入力して、【OK】をクリックする。
- Key Code
- C
- Ctrl
- チェック
- Assign String
- $EDIT_COPY
ペーストの設定
同様に新規で以下を入力する。
- Key Code
- V
- Ctrl
- チェック
- Assign String
- $EDIT_PASTE
接続確認
設定したサーバにアクセスして、ショートカットキーが動作することを確認できればOK!
標準の設定にする
上記の手順で、コピペがショートカットでできるようになるがあくまで設定が適応されるのは設定した接続先だけにある。 しかし、毎回新規接続先を作るごとにこの設定を行うのは面倒なため、デフォルトの設定として登録する。
設定方法としては、先ほどコピペの設定を行ったサーバで右クリックして、【標準の設定にする】をクリックするだけ。
ただし、注意しないといけないのは、コピペの設定だけでなく、ポートフォワードの設定などもしているとそれもデフォルトの設定にされてしまう。 なので、デフォルト設定用の接続先を作り、それを【標準の設定にする】のが良いと思う。
参考サイト
続きを読む【Windows】VirtualBoxにLinux環境を構築する
はじめに
好きに使って壊せる環境を作りたくなったので、Virtualboxでその環境を構築したいと思います。 (今の時代、コンテナだろ。。。って感じですがまあ備忘録として残す。)
目次
- はじめに
- 目次
- 本記事のゴール
- 環境
- 事前準備
- VirtualBoxのインストール
- CentOSのISOファイルのダウンロード
- 環境構築手順
- おわりに
- 参考サイト
本記事のゴール
- Windows環境(ホストOS)にVirtualboxをインストールする
- VirtualboxでLinux環境(ゲストOS)を作成する
- スナップショットを作成する。
時間がかかるので基本的に画面スクショは少なめです。。。
なお、本記事は 【Linux】(初心者向け)VirtualBoxにCentOS7環境を構築する - SEワンタンの独学備忘録を参考にさせていただきました。
環境
- Windows 10 64bit
- VirtualBox 6.1.12
- Centos 8.2
事前準備
VirtualBoxのインストール
- Downloads – Oracle VM VirtualBoxから、[windows hosts]版をダウンロードをする。
- ダウンロードしたファイルをダブルクリックして、インストーラーを起動する。
- 特にこだわりがなければ基本的に[Next]をクリックする
- [Install] > [Finish]で完了
CentOSのISOファイルのダウンロード
- The CentOS Projectにアクセスして、[CentOS Linux]をクリックする。
- タブから[8(2004)]をクリックして、[x86_64]をクリックする。
- ダウンロード用ミラーサイトの一覧が表示されるので、とりあえず1番上のリンクをクリック。
- [CentOS-8.2.2004-x86_64-dvd1.iso]をクリックして、ダウンロードする。
環境構築手順
仮想マシンの作成
VirtualBoxのインストールが完了したので、仮想マシンを新規作成します。
- インストールしたVirtualBoxを起動する。
- [新規(N)]をクリックする。
- 名前:任意、オペレーティングシステム:Linux、バージョン:Red Hat(64-bit)を選択して、[次へ]をクリックする。
- メモリーサイズは、デフォルト(1024MB)で[次へ]をクリックする。
- ハードディスクもデフォルト(仮想ハードディスクを作成する)で[次へ]をクリックする。
- ハードディスクのファイルタイプもデフォルト(VDI(VirtualBox Disk Image))で[次へ]をクリックする。
- 物理ハードディスクにあるストレージもデフォルト(可変サイズ)で[次へ]をクリックする。
- ファイルの場所とサイズについては、デフォルト8GBのままで足りないので16GBに変更して[作成]をクリックする。
以上で仮想マシンの作成が完了となります。 ただし、枠組みのようなものができただけになりますので、次から中身の部分を作ります。
仮想マシンの起動
それでは作成した仮想マシンを起動して、OSの設定などを行います。
- 作成した仮想マシンを選択して、[起動]をクリックする。
- 起動ハードディスクを選択画面で、エクスプローラーの選択アイコンをクリックする。
- 光学ディスク画面にて、[追加]をクリックする。
- 事前準備でダウンロードしたisoファイル選択して、[開く]をクリックする。
- 光学ディスク画面に戻るので、追加したものを選択して、[選択]をクリックする。
- 起動ハードディスクを選択で、[起動]をクリックする。
- Install CentOS Linux8を選択して、[Enter]をクリックする。
以上の手順を完了するとコンソール画面に処理が表示され、 その後、WELOCME TO CENTOS LINUX 8.と書かれた言語を設定する画面が表示されます。
CentOSのインストール設定
それでは、CentOSの設定を行っていきます。
- 日本語を選択して、[続行]をクリックする。
- インストール概要画面が表示されるので、[インストール先]をクリックする。
- ディスクが設定されていることを確認して、[完了]をクリックする。
- インストール概要画面が表示されるので、[ネットワークとホスト名]をクリックする。
- Ethernetを[オン]にして、[完了]をクリックする。
- [インストールの開始]をクリックする。
- 設定画面が表示されるので、[rootパスワード]をクリックする。
- 任意のパスワードを入力して、[完了]をクリックする。
- [ユーザーの作成]から任意のユーザーを作成する。
- しばらく待っていると完了しました!と表示されるので、[再起動]をクリックする。
- 再起動すると、再び Install CentOS Linux8が再び表示されてしまう問題が発生したのでCentOSのインストールが上手くいかないを参考に解決する。
- 解決手順を実施した後に、再起動すると今度は初期セットアップが表示されるのでラインセンスに同意する。
- ログイン画面が表示されるので、作成したユーザーでログインする。
以上でVirtualBoxにLinux環境を構築できました!
スナップショットの取得
最後にある時点のセーブデータのようなものであるスナップショットを取得します。
これにより今後OSインストールした直後の状態に戻したいときにこのスナップショットを使うことでこの状態に簡単に戻すことができます。
- Oracle VM VirtualBoxマネージャーにて、作成した仮想マシンを選択してメニューのスナップショットの[作成]をクリックする。
- 仮想マシンのスナップショット作成画面で任意の名前と説明を入力する。
おわりに
本記事のゴールとしてた、スナップショットの作成まで完了できました。 次回以降はこの環境をつかっていろんなことを試していきたいと思います!