16
17

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

nginxでリバースプロキシ(SSLアクセラレータ)の設定

Posted at

実家にサーバ(HP ProLiant MicroServer)を設置している。
IPMIに対応していて、ブラウザからも電源管理ができるのだが、この管理コンソールを直接インターネットに公開するのはチョット怖い。
ということで、前段にリバースプロキシをかまして、証明書でクライアント認証をかけてみようと思う。
24時間起動させてても電気代が気にならないraspberry piで構築してみる。

#インストール

apt-get install nginxでは一部のモジュールが有効になっていないので、extrasを入れる

$ sudo apt-get install nginx-extras

#IP固定化

以下を追記

/etc/dhcpcd.conf
interface eth0
static ip_address=10.0.1.40/24
static routers=10.0.1.1
static domain_name_servers=10.0.1.1

#nginxの設定

##サーバ固有の情報をレスポンスに含めない設定

/etc/nginx/nginx.conf
server_tokens off;

##リバースプロキシの設定

/etc/nginx/sites-available/default
server {
        add_header Strict-Transport-Security "max-age=31536000; includeSubDomains";
        more_set_headers "Server: Apache";
        listen 443 ssl default_server;
        listen [::]:443 ssl default_server;

        ssl on;
        ssl_certificate サーバ証明書のパス;
        ssl_certificate_key サーバの秘密鍵のパス;

        ssl_verify_client on;
        ssl_client_certificate ルート証明書のパス;

        server_name _;
        proxy_set_header Host $http_host;


        location / {
                proxy_intercept_errors on;
                proxy_pass http://backend-url;
                proxy_redirect http:// https://;
        }

        error_page 400 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 495 496 497 500 501 502 503 504 505 = /404.html;

        location /404.html {
                return 404 "<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML 2.0//EN\">\n<html><head>\n<title>404 Not Found</title>\n</head><body>\n<h1>Not Found</h1>\n<p>The requested URL $request_uri was not found on this server.</p>\n<hr>\n<address>Apache/2.2.31 Server at $host Port $server_port</address>\n</body></html>";
        }
}

ここでも、nginxを使っていることを隠すために、httpエラー(400番代と500番代)のページを独自の物に変更している。
で、ここで面白いことをやってたのでマネしている。
(エラー画面をapache風にする)

ちょっとハマった点は、クライアント認証がエラーになった時に、レスポンス400となって、nginxの固有のエラーページが返されるが、error_page 400を設定してもlocation /404.htmlで設定している内容が反映されない。
ここによると、nginxは認証関連のエラーを内部的に495 496 497の3つのコードで扱っている為、それらのコード値で設定しないといけない。
ここを参考に3つのコードを独自エラー画面に飛ばしてみる。

401はクライアント認証時に一発目で返されるので除外している。

参考

16
17
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
16
17

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?