特定のIPのみにアクセスできます.そうしないと、チェック中のページにリダイレクトされます.


TO-BE


導入後、チームメンバーのみがテスト中に許可されたIPにアクセスできるようにし、他のIPアクセスは「チェック中」ページに進みます.

Trouble Shooting


1. $remote_addr

  • $remote addrを$メンテナンスにマッピングします.
  • ロケーションプリファレンスでは、メンテナンスがオンの場合、エラーコード503(Service Unavailable)が返されます.
  • の下のerror pageから503コードを受信し、/メンテナンスする.htmlに応答します.
  • # nginx.conf
    http {
      ...
      
      map $remote_addr $maintenance {
          default		on;
          127.0.0.1		off;	# 원하는 IP 기입
      }
      
      server {
      	...
        proxy_intercept_errors on;
        
        location / {
        	...
            
            if ($maintenance = on) {
            	return 503;
            }
        }
        
        error_page 503 /maintenance.html;
        
        location = /maintenace.html {
        	root /home/ec2-user/web;
            internal;
        }
      }
    }

    結果

  • がうまく遮蔽されているかを確認するために、デフォルト設定でONしてテストを行いました.チェックでは、ページのリダイレクトがよく見えます.
  • 内でIPに入ると、正常に接続する必要があるので、ipconfigで撮ったIPv 4アドレスは閉じて再接続するように設定されます.ログイン・ページが表示されるはずですが、≪チェック中|Checking|emdw≫ページにリダイレクトされました.
  • =>結論:default設定がよく適用されています.私のipは書き間違えたようです.

    2. $http_x_forwarded_for


  • IPが見つかりました.
    西青をしていて、ipconfigのipとhttps://whatismyipaddress.com/のipが違います.後者のipはISPのip、すなわちルータのipのようです.ここで撮ったipをnginx設定に追加しましたが、まだ正常に動作していません.
    Netstatコマンドも撮って、あちこち探しましたが、正常に働かなかった.

  • access_log
    nginxで入ってきたログを撮ります!考えて、ログを作る方法を探しました.記録は以下のように設定できます.
  • # nginx.conf
    http {
        ...
        log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                          '$status $body_bytes_sent "$http_referer" '
                          '"$http_user_agent" "$http_x_forwarded_for"';
                          
        access_log  /var/log/nginx/access.log  main;
        ...
    }
    
  • $remote addrおよび$http x転送for、およびELB
    (ログ記録の方法を探して設定し始めたとき、nginx.confファイルでログ記録が有効になっていることに気づきました.)
    ログファイルに行って$remote addrを確認しましたが、IPリクエストは2つしかありません.実際のクライアントIPは$http x転送forに印刷され、ここで確認したhttps://whatismyipaddress.com/と同じです.リモートaddrは2種類に設定されており,アクセスはAWS設定に関係していると考えられるため,AWS環境でWebサーバフロントエンドを用いたELBに関係する書名が行われている.
    ロード・バランサはクライアントのipを自分のipに変更し、サーバを要求するため、nginxのaccess logでは$remote addrがロード・バランサのIPとして印刷される.したがって、ロードバランサまたはエージェントを使用すると、クライアントの元のIPアドレスを決定するには、X-Forward-DFOrヘッダを使用する必要があります.
  • 注意:クライアントIP($http x転送for)をNginxで検証する方法
    1) Proxyモード負荷バランサを使用してクライアントIPを記録する(TOASTサービス概要)
    2) ELBベースのWebサーバログからクライアントIPアドレスをキャプチャする方法

    n/a.結論


    nginxプロファイルで$remote addrを$http x転送forに変換すると、その実行状況が表示されます.

    最終解決コード

    # nginx.conf
    http {
      ...
      
      map $http_x_forwarded_for $maintenance {
          default		on;
          127.0.0.1		off;	# 원하는 IP 기입
      }
      
      server {
      	...
        proxy_intercept_errors on;
        
        location / {
        	...
            
            if ($maintenance = on) {
            	return 503;
            }
        }
        
        error_page 503 /maintenance.html;
        
        location = /maintenace.html {
        	root /home/ec2-user/web;
            internal;
        }
      }
    }
    残りの懸念
  • クライアントのIPアドレスはルータのIPアドレスに撮られて、設備によってIPを遮蔽することができませんか?
  • 自動化


    上のTO-BEのために、構築後に導入する前にnginx.マッピングをconf設定に挿入し、配置後にnginxをテストします.conf設定でマッピングを削除する必要があります.
    # 배포 전에는 이 부분을 넣고, 테스트 후에는 이 부분을 빼줘야 한다.
      map $http_x_forwarded_for $maintenance {
          default		on;
          127.0.0.1		off;	# 원하는 IP 기입
      }
    バージョン->特定のIPアクセスのみを許可するnginx.conf設定->導入->テスト->IP制限が欠けているデフォルトnginx.conf設定
    悩んでいる時はconfファイルを置き換えるshellスクリプトを作成し、jenkinsを使用して実行します.