さくらVPSにいれたNginxでベーシック認証をやってみた
パッケージのインストール
sudo yum install -y httpd-tools
.htpasswdファイルの作成
- 作成したいユーザの名前を入れてる
sudo htpasswd -c /etc/nginx/.htpasswd username
- 作成したユーザのパスワードを入れる
New password: password Re-type new password: password Adding password for user username
Nginxの設定ファイルを変更する
- 対象のconfファイルを開く
vim /etc/nginx/conf.d/対象のファイル.conf
- locationの中にベーシック認証の設定を入れる
location / { auth_basic "認証時に表示されるメッセージ"; # .htpasswdファイルのパス auth_basic_user_file /etc/nginx/.htpasswd; }
サーバの再起動を行う
sudo systemctl restart nginx
最後に
- 簡単にベーシック認証できるのでオススメ
参考元
僕の理想とするNginxの導入方法ができた
はじめに
- ソースビルドもやったしパッケージもやった
- でも、本当にこれでいいのかなぁ・・・ってもやもやがあった
- 今回は考えたもやもやと出した結論と解決した方法をまとめておく
- いい方法があればぜひ知りたい・・・
ソースビルとパッケージのメリット・デメリット
ソースビルドのメリット(すぐおもいついたもの)
- 拡張性と柔軟性がある
ソースビルドのデメリット(すぐおもいついたもの)
- 必要な設定はすべて自分で行う必要があるのでめんどくさい
- RPM等のパッケージマネージャで管理できない
パッケージのメリット(すぐおもいついたもの)
- インストールした瞬間から設定済みなので即時利用可能
- RPM等のパッケージマネージャで管理できている
パッケージのデメリット(すぐおもいついたもの)
- 拡張性と柔軟性にかける
思ったこと
- 拡張性を常に意識した作りにしたい
- パッケージマネージャーで管理したい
- めんどくさい設定はやりたくない
結論
いいとこどりしたやつ作ればええやんってなりました
僕が目指す理想形
- めんどくさい設定は全部終わっててほしい
- 設定系はデファクトスタンダートがいい
- 拡張性はソースビルド並にほしい
- パッケージマネージャーで管理したい
- インストールもアンインストールもコマンド1発がいい
ないならつくるしかないので作ります
RPMのコンパイルオプションを指定して拡張性の高いNginxを導入する
- 利用するパッケージをインストールしておく
sudo yum install -y pcre pcre-devel zlib zlib-devel openssl openssl-devel wget ncurses-devel perl-devel perl-ExtUtils-Embed GeoIP-devel libxslt-devel gd-devel rpm-build yum-utils
- rpmbuild 実行用の「builder」ユーザを作成
sudo useradd builder
- sudo権限を付与する
sudo usermod -G wheel builder
- builderのパスワードを設定する
sudo passwd builder
- builderユーザに切り替える
sudo su builder
- NginxのSRPMSを取得する
curl -O http://nginx.org/packages/centos/6/SRPMS/nginx-1.10.0-1.el6.ngx.src.rpm
- RPMパッケージのインストールの進行状況と詳細を出しながらインストールする
rpm -ivh nginx-1.10.0-1.el6.ngx.src.rpm
- ./configureオプションが記述されているファイルを開く
vim ~/rpmbuild/SPECS/nginx.spec
- ./configureオプションは以下になります
- デフォルトでいれたいものが全て入ってました
82 %define COMMON_CONFIGURE_ARGS $(echo "\ 83 --prefix=%{_sysconfdir}/nginx \ 84 --sbin-path=%{_sbindir}/nginx \ 85 --modules-path=%{_libdir}/nginx/modules \ 86 --conf-path=%{_sysconfdir}/nginx/nginx.conf \ 87 --error-log-path=%{_localstatedir}/log/nginx/error.log \ 88 --http-log-path=%{_localstatedir}/log/nginx/access.log \ 89 --pid-path=%{_localstatedir}/run/nginx.pid \ 90 --lock-path=%{_localstatedir}/run/nginx.lock \ 91 --http-client-body-temp-path=%{_localstatedir}/cache/nginx/client_temp \ 92 --http-proxy-temp-path=%{_localstatedir}/cache/nginx/proxy_temp \ 93 --http-fastcgi-temp-path=%{_localstatedir}/cache/nginx/fastcgi_temp \ 94 --http-uwsgi-temp-path=%{_localstatedir}/cache/nginx/uwsgi_temp \ 95 --http-scgi-temp-path=%{_localstatedir}/cache/nginx/scgi_temp \ 96 --user=%{nginx_user} \ 97 --group=%{nginx_group} \ 98 --with-http_ssl_module \ 99 --with-http_realip_module \ 100 --with-http_addition_module \ 101 --with-http_sub_module \ 102 --with-http_dav_module \ 103 --with-http_flv_module \ 104 --with-http_mp4_module \ 105 --with-http_gunzip_module \ 106 --with-http_gzip_static_module \ 107 --with-http_random_index_module \ 108 --with-http_secure_link_module \ 109 --with-http_stub_status_module \ 110 --with-http_auth_request_module \ 111 --with-http_xslt_module=dynamic \ 112 --with-http_image_filter_module=dynamic \ 113 --with-http_geoip_module=dynamic \ 114 --with-http_perl_module=dynamic \ 115 --add-dynamic-module=njs-%{module_njs_shaid}/nginx \ 116 --with-threads \ 117 --with-stream \ 118 --with-stream_ssl_module \ 119 --with-http_slice_module \ 120 --with-mail \ 121 --with-mail_ssl_module \ 122 --with-file-aio \ 123 --with-ipv6 \ 124 %{?with_http2:--with-http_v2_module}")
- RPMを再構築
rpmbuild -ba ~/rpmbuild/SPECS/nginx.spec
- 再構築したRPMをインストール
sudo rpm -ivh ~/rpmbuild/RPMS/x86_64/nginx-1.10.0-1.el7.centos.ngx.x86_64.rpm
最後に
- 一旦これで僕が求めてた理想形を手にすることはできた
- ひとまず、これで使ってみて改善点があればまたいじってみようとおもう
さくらVPSにソースビルドでいれたNginxをアンインストールする
ソースビルドで入れたNginxをアンインストールする
- 一旦Nginxを止める
sudo service nginx stop
- nginxのソースファイル以外の場所を確認する
sudo find / -name "nginx".*
- prefixがデフォルトの状態だと全て
/usr/local/nginx/
配下にいるため消す
sudo rm -rf /usr/local/nginx/
nginxユーザを削除する
sudo userdel nginx
ユーザが存在しないことを確認する
cat /etc/passwd | grep nginx
起動スクリプトを削除する
sudo rm /etc/init.d/nginx
最後に
- ソースファイルを消して終わり
さくらVPSの初期設定後にまっさきにいれたツール
パッケージツールの更新
- 更新コマンド
sudo yum update -y
利用するツールを入れる
- 今回導入するツール
入れるもの | 用途 |
---|---|
git | バージョン管理 |
tmux | ターミナルの多重化ソフト |
vim | エディタ |
- インストールコマンド
sudo yum install -y git tmux vim
gitのバージョンを確認する
- 確認コマンド
git --version git version 1.8.3.1
githubに疎通確認する
- 上記のようにさくらVPSにログインした場合はすでにMacで設定した鍵でgithubと疎通が取れます。
- 疎通確認コマンド
ssh -T git@github.com
- アカウント名が返ってきたら成功
gitで疎通テスト時に警告が出る時の対処
ssh -T git@github.com
で疎通テストを行うと以下のエラーが出る
added the RSA host key for IP address 'IPアドレス' to the list of known hosts.
- 以下のコマンドで警告を消す
ssh-keygen -R IPアドレス
tmuxのバージョンを確認する
- 確認コマンド
tmux -V tmux 1.8
tigを入れる
必要なもの | 用途 |
---|---|
wget | HTTPやFTP経由のファイル取得を行えるツール |
ncurses-devel | インストール・コンパイルの為 |
- インストールコマンド
sudo yum install -y wget ncurses-devel wget http://jonas.nitro.dk/tig/releases/tig-2.1.tar.gz tar -zxvf tig-2.1.tar.gz cd tig-2.1 ./configure make sudo make install
tigのバージョンを確認する
- 確認コマンド
tig -v tig version 2.1
さくらVPSでPHPのバージョンを管理する
phpenv + php-buildでphpのバージョンを管理する環境を作る
- EPELリポジトリを追加
sudo yum install -y epel-release.noarch
- phpenvとphp-buildを入れる
curl -L https://raw.github.com/CHH/phpenv/master/bin/phpenv-install.sh | bash git clone git://github.com/CHH/php-build.git ~/.phpenv/plugins/php-build cd .phpenv/plugins/php-build/ sudo sh install.sh
- 必要なパッケージを入れる
sudo yum install -y libxml2-devel bison bison-devel openssl-devel curl-devel libjpeg-devel libpng-devel libmcrypt-devel readline-devel libtidy-devel libxslt-devel
- re2cを入れる
sudo wget -P /usr/share/ https://sourceforge.net/projects/re2c/files/0.16/re2c-0.16.tar.gz cd /usr/share sudo tar zxvf re2c-0.16.tar.gz -C /usr/share/ cd re2c-0.16 ./configure sudo make install
好きなPHPのバージョンをインストールする
- PHP7を入れる
php-build --definitions php-build 7.0.7 ~/.phpenv/versions/7.0.7
- パスを通す
echo 'export PATH="$HOME/.phpenv/bin:$HOME/.phpenv/versions/7.0.7/sbin:$PATH"' >> ~/.bashrc echo 'eval "$(phpenv init -)"' >> ~/.bashrc exec $SHELL -l
- インストールしたことがあるphpのバージョンを確認する
phpenv versions 7.0.7
- phpenvで入れたphpを適用するディレクトリを作成する
mkdir -p workspace/php/7.0.7 && cd workspace/php/7.0.7
- 適用させるディレクトリに設定を反映させる
phpenv local 7.0.7 phpenv rehash
- phpのバージョンを確認する
php -v PHP 7.0.7 (cli) (built: Jun 2 2016 23:25:42) ( NTS ) Copyright (c) 1997-2016 The PHP Group Zend Engine v3.0.0, Copyright (c) 1998-2016 Zend Technologies with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2016, by Zend Technologies with Xdebug v2.4.0, Copyright (c) 2002-2016, by Derick Rethans
最後に
※ globalのphpのバージョンの設定方法とかありますが、今回省略しました
globalにphpのバージョンを設定したい場合は以下でいけます
phpenv global 7.0.7 phpenv rehash
- 別にこれいれたからどうってわけじゃないんだけど色々試すためにはやっぱり必要だった
さくらVPSにMacからポートフォワーディングで接続する
もう鍵をサーバごと作りたくない理由
- セキュリティ的に複数の鍵を管理するのが怖い
- githubの鍵が増えすぎて気が狂いそう
- 漏洩時どこから漏洩したのか分からなさそうで怖い
ポートフォワーディングをすることで何が嬉しいの?
- 鍵を複数管理しなくていい
- セキュリティ的によさそう
- githubの鍵がシンプルになりそう
MacからさくらVPSにポートフォワーディングする
- 鍵を登録しているか確認する
$ ssh-add -l
- Macの鍵を登録しておく
$ ssh-add ~/.ssh/id_rsa
- さくらVPSに接続してみる
ssh -A -p ポート番号 ユーザ名@IPアドレス
感想
- 参考資料@sota1235あざっす!
さくらVPSにNginxをソースビルドで入れた
ソースビルドでnginxを入れる
- 必要なライブラリ
必要なライブラリ | 役割 |
---|---|
pcre pcre-devel | perl互換の正規表現用 |
zlib zlib-devel | gzip圧縮用 |
openssl openssl-devel | SSLツール |
wget | HTTPやFTP経由のファイル取得を行えるツール |
ncurses-devel | インストール・コンパイルの為 |
- パッケージインストールコマンド
sudo yum install -y pcre pcre-devel zlib zlib-devel openssl openssl-devel wget ncurses-devel
- ※ 依存ライブラリの取り込み方は2種類有ります。
- 今回はnginxのビルド時に依存ライブラリを静的に取り込みます
- 動的にとりこむ場合は以下のオプションをconfigureを実行時に追加する
ライブラリ名 | オプション名 |
---|---|
PCRE | --with-pcre=ディレクトリパス |
zlib | --with-zlib=ディレクトリパス |
OpenSSL | --with-openssl=ディレクトリパス |
- Nginx用ユーザとグループ作成
sudo groupadd nginx sudo useradd -g nginx nginx
- nginxユーザでのログインを禁止
sudo usermod -s /bin/false nginx
- nginxの圧縮ファイルをダウンロード
wget http://nginx.org/download/nginx-1.11.0.tar.gz
- nginxの圧縮ファイルを解凍
tar xvzf nginx-1.11.0.tar.gz
- configureを実行(利用したいモジュールを追加)
./configure --user=nginx --group=nginx --with-http_ssl_module --with-http_realip_module --with-http_v2_module
- コンパイルしインストール
make sudo make install
- インストールできたか確認する
sudo /usr/local/nginx/sbin/nginx -V
- Nginxのバージョン
nginx version: nginx/1.11.0 built by gcc 4.8.5 20150623 (Red Hat 4.8.5-4) (GCC) built with OpenSSL 1.0.1e-fips 11 Feb 2013 TLS SNI support enabled configure arguments: --user=nginx --group=nginx --with-http_ssl_module --with-http_realip_module --with-http_v2_module
- userディレクティブを設定するために設定ファイルを開く
sudo vim /usr/local/nginx/conf/nginx.conf
- 2行目のuserディレクティブを以下に変更
user nginx nginx;
起動スクリプトの作成
- Nginxをソースからインストールした場合は起動スクリプトが作成されないため自作が必要
- 今回はNginx入門から起動スクリプトを拝借した
起動スクリプトを作成コマンド
sudo vim /etc/init.d/nginx
- 起動スクリプトファイルの中身
#! /bin/sh # chkconfig: 345 98 20 # Author: Ryan Norbauer http://norbauerinc.com # Modified: Geoffrey Grosenbach http://topfunky.com # Modified: Clement NEDELCU set -e PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin DESC="nginx daemon" NAME=nginx DAEMON=/usr/local/nginx/sbin/$NAME SCRIPTNAME=/etc/init.d/$NAME # デーモンファイルが見つからなければ、スクリプトを終了する test -x $DAEMON || exit 0 d_start() { $DAEMON || echo -n " already running" } d_stop() { $DAEMON -s quit || echo -n " not running" } d_reload() { $DAEMON -s reload || echo -n " could not reload" } case "$1" in start) echo -n "Starting $DESC: $NAME" d_start echo "." ;; stop) echo -n "Stopping $DESC: $NAME" d_stop echo "." ;; reload) echo -n "Reloading $DESC: configuration..." d_reload echo "reloaded." ;; restart) echo -n "Restarting $DESC: $NAME" d_stop # 再起動の前に2秒スリープする。Nginxデーモンが穏便に終了するための時間を与えるのである。 sleep 2 d_start echo "." ;; *) echo "Usage: $SCRIPTNAME {start|stop|restart|reload}" >&2 exit 3 ;; esac exit 0
- 起動スクリプト実行権限を付与する
sudo chmod +x /etc/init.d/nginx
- Nginxのコマンド
コマンド | できること |
---|---|
sudo service nginx start | 起動 |
sudo service nginx restart | 再起動 |
sudo service nginx stop | 停止 |
sudo chkconfig nginx on | 自動起動 |
個人的におもったこと
- ソースビルドでnginxの自動起動がうまく行かなかった
- 解決策は起動スクリプト内にchkconfigを記述してランレベルの指定いるとか初耳
- あとはディレクトリ構造の意味とか復習するいい機会になった(ほとんどわすれてた
- 仮想サーバと違ってちゃんとやらなきゃって気持ちになるのはやっぱいい
- これからも愛情いっぱいにこのサーバ育てる