LoginSignup
5
5

More than 5 years have passed since last update.

さくらのVPS 標準OSの環境構築(3) Webサーバーの設定

Last updated at Posted at 2016-04-23

前回

さくらのVPS 標準OSの環境構築(2) ファイアウォールとシステムの設定

SFTPユーザーの作成

デプロイ時に使用するSFTPユーザーを作成します。
ユーザーグループにはwheelを指定します。
あわせてSFTPユーザーのパスワードを設定します。

useradd SFTP_USER -G wheel && \
passwd SFTP_USER

SFTP_USERの部分を任意のユーザー名に差し替えてください。
以降のログイン用ユーザーの表記はSFTP_USERに統一します。

実行結果
ユーザー SFTP_USER のパスワードを変更。
新しいパスワード: <- パスワードを入力
新しいパスワードを再入力してください: <- パスワードを再入力
passwd: 全ての認証トークンが正しく更新できました。

また、SFTPユーザー用の公開鍵を作成します。
通常は新しく作りますが、今回は手順簡略のためにLOGIN_USERの公開鍵authorized_keysSFTP_USERの方へコピーし権限を変更して使用します。

cp /home/LOGIN_USER/.ssh/authorized_keys /home/SFTP_USER/.ssh/authorized_keys && \
chmod 0600 /home/SFTP_USER/.ssh/authorized_keys && \
chown SFTP_USER:SFTP_USER /home/SFTP_USER/.ssh/authorized_keys

Nginxのインストールと設定

Nginxリバースプロキシサーバーとして動作させ、その背後でApacheを動作させます。
画像などの静的コンテンツをNginxで捌き、動的処理はApacheへ流すようにします。

リポジトリの追加とインストール

手動でyumリポジトリを追加します。

vim /etc/yum.repo.d/nginx.repo

/etc/yum.repo.d/nginx.repo
+ [nginx]
+ name=nginx repo
+ baseurl=http://nginx.org/packages/mainline/rhel/$releasever/$basearch/
+ gpgcheck=0
+ enabled=1

リポジトリが追加できたら、yumコマンドでNginxをインストールします。

yum install nginx

インストールできたらNginxの自動実行の登録をします。

chkconfig nginx on

ファイルのオープン数と同時接続数の上限の設定とgzipの有効化

ファイルのオープン数と同時接続数の上限を引き上げ、レスポンスヘッダーのバージョン番号を非表示にします。
また、gzipを有効化し高速化を図ります。

vi /etc/nginx/nginx.conf

/etc/nginx/nginx.conf
  :
+ worker_rlimit_nofile    10240;
  events {
-     worker_connections  1024;
+     worker_connections  10240;
  }

  http {
      :
-     #gzip                on;
+     gzip                on;
+     gzip_http_version   1.0;
+     gzip_types          text/xml
+                         text/css
+                         text/javascript
+                         application/xhtml+xml
+                         application/xml
+                         application/rss+xml
+                         application/atom_xml
+                         application/javascript
+                         application/json
+                         application/x-javascript
+                         application/x-httpd-php;
+     gzip_vary           on;
+     gzip_proxied        any;
+     gzip_comp_level     6;
+     gzip_disable        "MSIE [1-6]\.";
      :
+     server_tokens off;
  }

リバースプロキシとして動作させる設定

Nginxをリバースプロキシとして動作させる設定を行います。
今回、複数ドメインのテストとして、通常の(www.)example.comとサブドメインのsub.example.comが設定されている前提で進めます。

vi /etc/nginx/conf.d/default.conf

/etc/nginx/conf.d/default.conf
+ server {
+     listen      80;
+     server_name example.com www.example.com;
+ 
+     access_log  /var/log/nginx/example.com.access.log;
+     error_log   /var/log/nginx/example.com.error.log;
+ 
+     location ~ .*\.(jpg|JPG|gif|GIF|png|PNG|swf|SWF|css|CSS|js|JS|inc|INC|ico|ICO) {
+         root    /var/www/html/example.com/htdocs;
+         index   index.html;
+         ssi     on;
+     }
+ 
+     location / {
+         proxy_set_header Host               $host;
+         proxy_set_header X-Real-IP          $remote_addr;
+         proxy_set_header X-Forwarded-Host   $host;
+         proxy_set_header X-Forwarded-For    $proxy_add_x_forwarded_for;
+ 
+         proxy_pass  http://127.0.0.1:8080;
+         proxy_redirect off;
+ 
+         proxy_connect_timeout 120;
+         proxy_read_timeout    120;
+         proxy_send_timeout    120;
+ 
+         proxy_max_temp_file_size 0;
+     }
+ }
+ 
+ server {
+     listen      80;
+     server_name sub.example.com;
+ 
+     access_log  /var/log/nginx/sub.example.com.access.log;
+     error_log   /var/log/nginx/sub.example.com.error.log;
+ 
+     location ~ .*\.(jpg|JPG|gif|GIF|png|PNG|swf|SWF|css|CSS|js|JS|inc|INC|ico|ICO) {
+         root    /var/www/html/sub.example.com/htdocs;
+         index   index.html;
+         ssi     on;
+     }
+ 
+     location / {
+         proxy_set_header Host               $host;
+         proxy_set_header X-Real-IP          $remote_addr;
+         proxy_set_header X-Forwarded-Host   $host;
+         proxy_set_header X-Forwarded-For    $proxy_add_x_forwarded_for;
+ 
+         proxy_pass  http://127.0.0.1:8081;
+         proxy_redirect off;
+ 
+         proxy_connect_timeout 120;
+         proxy_read_timeout    120;
+         proxy_send_timeout    120;
+ 
+         proxy_max_temp_file_size 0;
+     }
+ }

保存したら、正常に起動出来るかどうか設定ファイルの構文チェックを行います。
successfulが表示されていれば大丈夫です。

service nginx configtest

実行結果
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Apacheのインストールと設定

動的処理を担当するApacheをインストールします。
今回はApache2.4をインストールします。

Software Collections(SCL)のインストール

CentOS6.xでは、標準のyumではApache2.4をインストールすることはできません。
SCLとは、Red Hatが提供する最新アプリケーションの安定版のパッケージを提供し、かつyumの旧パッケージと共存させてくれるパッケージです。

yum install centos-release-scl
yum-config-manager --enable rhel-server-rhscl-7-rpms

インストール

SCLを用いてApache2.4をインストールします。

yum install httpd24
scl enable httpd24 bash
chkconfig httpd24-httpd on

apxsを使えるようにするため、apr-devel.x86_64もインストールします。

yum install apr-devel.x86_64

シンボリックリンクの作成

Apache2.2と同じように操作出来るようにシンボリックリンクを張ります。

ln -s /opt/rh/httpd24/root/etc/httpd /etc/httpd && \
ln -s /opt/rh/httpd24/root/var/log/httpd /var/log/httpd && \
ln -s /opt/rh/httpd24/root/var/www /var/www && \
ln -s /opt/rh/httpd24/root/usr/bin/apxs /usr/bin/apxs && \
ln -s /opt/rh/httpd24/root/usr/lib64/httpd /usr/lib64/httpd

ドキュメントルートの作成と権限の変更

ドメイン毎のドキュメントルートを作成し、SFTPで扱えるように権限を変更しておきます。
ドキュメントルートより上の階層に設定ファイルを設置したい場合もあると思うので、ドキュメントルートはドメイン別の中にhtdocsで一階層下げてあります。

(www.)example.com

mkdir -p /var/www/html/example.com/htdocs && \
chmod 0755 /var/www/html/example.com && \
chmod 0755 /var/www/html/example.com/htdocs && \
chown SFTP_USER:SFTP_USER /var/www/html/example.com && \
chown SFTP_USER:SFTP_USER /var/www/html/example.com/htdocs

sub.example.com

mkdir -p /var/www/html/sub.example.com/htdocs && \
chmod 0755 /var/www/html/sub.example.com && \
chmod 0755 /var/www/html/sub.example.com/htdocs && \
chown SFTP_USER:SFTP_USER /var/www/html/sub.example.com && \
chown SFTP_USER:SFTP_USER /var/www/html/sub.example.com/htdocs

mod_rpafモジュールのインストール

リバースプロキシからのアクセスをApache側で受け取る際に、リバースプロキシのアドレスが記録される対策として、mod_rpafモジュールをインストールします。
GitHubからソースコードをクローンし、mod_rpaf.soを生成しインストールします。

git clone https://github.com/gnif/mod_rpaf ~/mod_rpaf && \
cd ~/mod_rpaf && \
make && \
make install

インストールが完了したらGitHubからクローンしたソースファイルは削除します。

cd ~ && \
rm -rf ~/mod_rpaf

基本設定とバーチャルホスト設定

Apacheの基本設定やバーチャルホストの設定を行います。

vi /etc/httpd/conf/httpd.conf

Apacheを実行するユーザーとグループをSFTP_USERに設定します。

/opt/rh/httpd24/root/etc/httpd/conf/httpd.conf
- User apache
- Group apache
+ User SFTP_USER
+ Group SFTP_USER

レスポンスヘッダーのバージョン番号とサーバー署名を非表示にします。
下記を追記します。

/opt/rh/httpd24/root/etc/httpd/conf/httpd.conf
+ ServerTokens Prod
+ ServerSignature Off

Nginxdefault.confで指定したポート番号を指定します。
複数ポートを利用する場合、1行ずつ記述します。

/opt/rh/httpd24/root/etc/httpd/conf/httpd.conf
+ Listen 8080
+ Listen 8081

サーバー管理者のメールアドレス設定をします。

/opt/rh/httpd24/root/etc/httpd/conf/httpd.conf
+ ServerAdmin test@example.com

サーバー名を設定します。
ここはメインのドメインになります。

/opt/rh/httpd24/root/etc/httpd/conf/httpd.conf
+ ServerName example.com:8080

ドキュメントルートの設定をします。
オプションとしてブラウザでファイル一覧を表示させないように設定します。
あわせて、.htaccessファイルでの設定の上書きが出来るように設定します。

/opt/rh/httpd24/root/etc/httpd/conf/httpd.conf
  :
- DocumentRoot "/opt/rh/httpd24/root/var/www/html"
+ DocumentRoot "/var/www/html"
  :
- <Directory "/opt/rh/httpd24/root/var/www/html">
+ <Directory "/var/www/html">
  :
/opt/rh/httpd24/root/etc/httpd/conf/httpd.conf
  :
  <Directory "/var/www/html">
      :
-     Options Indexes FollowSymLinks
+     Options FollowSymLinks SymLinksIfOwnerMatch
      :
-     AllowOverride None
+     AllowOverride All
      :
  </Directory>
  :

Indexファイルにindex.phpが使えるように設定します。
あわせて、index.phpが優先されるように設定します。

/opt/rh/httpd24/root/etc/httpd/conf/httpd.conf
  :
  <IfModule dir_module>
-     DirectoryIndex index.html
+     DirectoryIndex index.php index.html
  </IfModule>
  :

.phpファイルが実行出来るように、拡張子を追加します。
また、.shtmlは使用しないのでコメントアウトします。

/opt/rh/httpd24/root/etc/httpd/conf/httpd.conf
  :
  <IfModule mime_module>
      :
+     AddType application/x-httpd-php .php
      :
-     AddType text/html .shtml
-     AddOutputFilter INCLUDES .shtml
+     #AddType text/html .shtml
+     #AddOutputFilter INCLUDES .shtml
      :
  </IfModule>
  :

最後にバーチャルホストの設定を追記します。

/opt/rh/httpd24/root/etc/httpd/conf/httpd.conf
+ # Virtual Host
+ <VirtualHost 127.0.0.1:8080>
+     ServerName example.com
+     DocumentRoot /var/www/html/example.com/htdocs
+     ErrorLog /var/log/httpd/example.com.access.log
+ 
+     RPAF_Enable On
+     RPAF_SetHostName On
+     RPAF_ProxyIPs 127.0.0.1 10.0.0.1
+     RPAF_Header X-Forwarded-For
+     <Directory "/var/www/html/example.com/htdocs">
+         Require all granted
+     </Directory>
+ </VirtualHost>
+ 
+ <VirtualHost 127.0.0.1:8081>
+     ServerName sub.example.com
+     DocumentRoot /var/www/html/sub.example.com/htdocs
+     ErrorLog /var/log/httpd/sub.example.com.access.log
+ 
+     RPAF_Enable On
+     RPAF_SetHostName On
+     RPAF_ProxyIPs 127.0.0.1 10.0.0.1
+     RPAF_Header X-Forwarded-For
+     <Directory "/var/www/html/sub.example.com/htdocs">
+         Require all granted
+     </Directory>
+ </VirtualHost>

mod_rpafモジュールを読み込む設定

基本モジュール用設定ファイル00-base.confを編集します。

vi /etc/httpd/conf.modules.d/00-base.conf

下記を追記して、mod_rpaf.soが読み込まれるように設定します。

/opt/rh/httpd24/root/etc/httpd/conf.modules.d/00-base.conf
+ LoadModule rpaf_module modules/mod_rpaf.so

テストページの削除(バックアップ)

このままだと404 NotFoundなどになった際にApacheのテストページが表示されてしまうので、ファイルを削除するかファイル名を変えておきます。

cd /opt/rh/httpd24/root/usr/share/httpd/noindex/
mv index.html index.html.bak

設定の構文チェック

正常に起動出来るかどうか、設定の構文チェックを行います。

service httpd24-httpd configtest

実行結果
Syntax OK

Syntax OKが表示されていれば大丈夫です。

NginxとApacheの起動

全ての設定が完了したらNginxApacheを起動します。

service nginx start && \
service httpd24-httpd start

実行結果
nginx を起動中:                                            [  OK  ]
Starting httpd:                                            [  OK  ]

LogWatchの設定の修正

Apacheは標準で監視対象ですがNginxは監視されません。
Nginxのログが含まれるように設定を行います。

Apache用の設定ファイルをコピーして編集します。

cp /usr/share/logwatch/scripts/services/http /etc/logwatch/scripts/services/nginx && \
cp /usr/share/logwatch/default.conf/services/http.conf /etc/logwatch/conf/services/nginx.conf && \
cp /usr/share/logwatch/default.conf/logfiles/http.conf /etc/logwatch/conf/logfiles/nginx.conf

監視サービスの設定を行います。

vi /etc/logwatch/conf/services/nginx.conf

/etc/logwatch/conf/services/nginx.conf
  :
- Title = "httpd"
+ Title = "nginx"
  :
- LogFile = http
+ LogFile = nginx
  :

監視ログファイルの設定を行います。

vi /etc/logwatch/conf/logfiles/nginx.conf

/etc/logwatch/conf/logfiles/nginx.conf
  :
- #LogFile = httpd/*access_log
- #LogFile = apache/*access.log.1
- #LogFile = apache/*access.log
- #LogFile = apache2/*access.log.1
- #LogFile = apache2/*access.log
- #LogFile = apache2/*access_log
- #LogFile = apache-ssl/*access.log.1
- #LogFile = apache-ssl/*access.log
+ LogFile = nginx/*access.log
  :
- #Archive = archiv/httpd/*access_log.*
- #Archive = httpd/*access_log.*
- #Archive = apache/*access.log.*.gz
- #Archive = apache2/*access.log.*.gz
- #Archive = apache2/*access_log.*.gz
- #Archive = apache-ssl/*access.log.*.gz
+ Archive = nginx/*access.log.*.gz
  :

SSHの設定の修正

ドキュメントルートなども作られたため、SFTPを利用できるようにSSHの設定を修正します。

vi /etc/ssh/sshd_config

Subsystem sftpを指定します。

/etc/ssh/sshd_config
  # override default of no subsystems
- #Subsystem      sftp    /usr/libexec/openssh/sftp-server
+ Subsystem       sftp    internal-sftp

Match Userを指定します。
ChrootDirectoryは、Apacheのドキュメントルートを指定しておきます。

/etc/ssh/sshd_config
+ Match User SFTP_USER
+     ChrootDirectory /var/www/html
+     ForceCommand internal-sftp

設定を保存したら、sshdを再起動します。

service sshd restart

次回

さくらのVPS 標準OSの環境構築(4) MariaDBとPHPのセットアップ

5
5
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
5
5