前回
さくらの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_keys
をSFTP_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
+ [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
:
+ 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
+ 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
をインストールします。
今回はApache
の2.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
に設定します。
- User apache
- Group apache
+ User SFTP_USER
+ Group SFTP_USER
レスポンスヘッダーのバージョン番号とサーバー署名を非表示にします。
下記を追記します。
+ ServerTokens Prod
+ ServerSignature Off
Nginx
のdefault.conf
で指定したポート番号を指定します。
複数ポートを利用する場合、1行ずつ記述します。
+ Listen 8080
+ Listen 8081
サーバー管理者のメールアドレス設定をします。
+ ServerAdmin test@example.com
サーバー名を設定します。
ここはメインのドメインになります。
+ ServerName example.com:8080
ドキュメントルートの設定をします。
オプションとしてブラウザでファイル一覧を表示させないように設定します。
あわせて、.htaccess
ファイルでの設定の上書きが出来るように設定します。
:
- DocumentRoot "/opt/rh/httpd24/root/var/www/html"
+ DocumentRoot "/var/www/html"
:
- <Directory "/opt/rh/httpd24/root/var/www/html">
+ <Directory "/var/www/html">
:
:
<Directory "/var/www/html">
:
- Options Indexes FollowSymLinks
+ Options FollowSymLinks SymLinksIfOwnerMatch
:
- AllowOverride None
+ AllowOverride All
:
</Directory>
:
Indexファイルにindex.php
が使えるように設定します。
あわせて、index.php
が優先されるように設定します。
:
<IfModule dir_module>
- DirectoryIndex index.html
+ DirectoryIndex index.php index.html
</IfModule>
:
.php
ファイルが実行出来るように、拡張子を追加します。
また、.shtml
は使用しないのでコメントアウトします。
:
<IfModule mime_module>
:
+ AddType application/x-httpd-php .php
:
- AddType text/html .shtml
- AddOutputFilter INCLUDES .shtml
+ #AddType text/html .shtml
+ #AddOutputFilter INCLUDES .shtml
:
</IfModule>
:
最後にバーチャルホストの設定を追記します。
+ # 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
が読み込まれるように設定します。
+ 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の起動
全ての設定が完了したらNginx
とApache
を起動します。
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
:
- Title = "httpd"
+ Title = "nginx"
:
- LogFile = http
+ LogFile = nginx
:
監視ログファイルの設定を行います。
vi /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
を指定します。
# override default of no subsystems
- #Subsystem sftp /usr/libexec/openssh/sftp-server
+ Subsystem sftp internal-sftp
Match User
を指定します。
ChrootDirectory
は、Apache
のドキュメントルートを指定しておきます。
+ Match User SFTP_USER
+ ChrootDirectory /var/www/html
+ ForceCommand internal-sftp
設定を保存したら、sshd
を再起動します。
service sshd restart