straightweeds.hatenablog.com

30代のシステムエンジニアが興味のあることだけ書くブログ

raspberry pi でWebサーバ(nginx)

Raspberry Piでnginxを使ってWebサーバを構築しています。

備忘録がてら記載します。 Let's Encriptを用いたhttps化basic認証、リバースプロキシ設定も。

f:id:straightweeds:20170415110501p:plain

インストール

1.お決まり

いつも通りお決まりのアップデートをします。

$ sudo apt-get update
$ sudo apt-get upgrade

2.インストール

で、以下1行でインストール完了です。

$ sudo apt-get install nginx

セキュリティ対策

まずはセキュリティ対策をします。 代表的なものだけ。

バージョン情報隠蔽

エラーページなどでバージョン情報が表示されないように設定します。

$ sudo nano /etc/nginx/nginx.conf
server_tokens off;

ログファイル詳細情報取得(全体)

アクセスやエラーログを取得する設定をします。

$ sudo nano /etc/nginx/nginx.conf
log_format common '$remote_addr\t-\t$remote_user\t[$time_local]\t'
        '"$ssl_client_s_dn"\t'
        '"$request"\t$status\t$body_bytes_sent\t'
        '"$http_referer"\t"$http_user_agent"\t$http_x_forwarded_for\t$request_time';

access_log /var/log/nginx/$server_name/access.log common;
error_log /var/log/nginx/error.log;

ログファイル詳細情報取得(個別)

各サイトでログを取得する設定を入れます。

$ sudo nano /etc/nginx/site-available/各サイト

サーバ設定

続いてサイト運用にあたっての設定を。

アップロード制限

アプリケーションなどを構築していてアップロード制限が必要、また制限を解除する必要がある場合に設定します。

$ sudo nano /etc/nginx/nginx.conf
http {
+ client_max_body_size 20M; #アップロード制限

リバースプロキシ設定

リバースプロキシで使用する場合に必要な代表的な設定です。

$ sudo nano /etc/nginx/site-available/各サイト
location / {
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-Proto https;
    proxy_set_header X-Forwarded-Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

    proxy_intercept_errors on;

    proxy_pass http://backend.example.com/;
    proxy_redirect http:// https://;
}

ssh設定(Let's Encript)

Let's Encriptを使用したSSH設定は以下の通り。 (Let's Encriptの設定はまた別の記事で)

$ sudo nano /etc/nginx/site-available/各サイト
# SSLKey
    # SSL Key Setting
    ssl_certificate     /etc/letsencrypt/live/ドメイン名/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/ドメイン名/privkey.pem;

    # SSL Protocol Setting
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers 'ECDHE+RSAGCM:ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:!aNULL!eNull:!EXPORT:!DES:!3DES:!MD5:!DSS';
    ssl_prefer_server_ciphers on;

basic認証

basic認証を使用する場合はまずモジュールのインストールから。

1.モジュールの追加

$ sudo apt-get install apache2-utils

2.ユーザ作成

$ sudo htpasswd -c /etc/nginx/.htpasswd <<User Name>>

追加する場合は

$ sudo htpasswd /etc/nginx/.htpasswd <<User Name>>

複数の認証パターンをかける場合は .htpasswd の後ろに - や _ をつけて分けましょう。

3.定義ファイルに追加

$ sudo nano /etc/nginx/site-available/各サイト
auth_basic "<認証時に表示されるメッセージ>";
auth_basic_user_file /etc/nginx/.htpasswd;