raspberry pi でWebサーバ(nginx)
Raspberry Piでnginxを使ってWebサーバを構築しています。
備忘録がてら記載します。 Let's Encriptを用いたhttps化、basic認証、リバースプロキシ設定も。
インストール
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;