zuntan02のはてなブログ

備忘録的なものです

【AWS】東京リージョンで[t3.medium]を立てようとしたら制限数エラー

【概要】

東京リージョンでt3.mediumのEC2インスタンスを立てようとしたら以下の制限数エラーが出た。

作成失敗
You have requested more instances (1) than your current instance limit of 0 allows for the specified instance type. Please visit http://aws.amazon.com/contact-us/ec2-request to request an adjustment to this limit.

→参考
oreout.hatenablog.com
東京リージョンだと初期値0台とかひどい

【上限緩和申請】

サービス制限の緩和
http://aws.amazon.com/contact-us/ec2-request

f:id:zuntan02:20181019152032p:plain

→一時間くらいで以下のメールが返ってきた

ご依頼いただきましたとおり、 以下のように上限値を設定いたしました。

                      • -

サービス: EC2 インスタンス
リージョン: アジアパシフィック(東京)
プライマリインスタンスタイプ: t3.medium
制限の名前: インスタンス上限
申請する上限数: 5

                      • -

早い!

以上。

【AWS】EIPを付与しているのにパブリックDNSが出ない

【原因】

  • VPCの設定で有効にしてない
  • EIPかパブリックIPが割り当てられてない

VPCの設定】

EIPは割り当ててるのにパブリックDNSが出ない!っていう感じだったのでメモ。
[アクション]-[DNSホスト名の編集]-[DNSホスト名]が「いいえ」の場合は「はい」に。
f:id:zuntan02:20180831194316p:plain
f:id:zuntan02:20180831194322p:plain
以上

【AWS】AmazonLinux2のyumリポジトリにパッケージが少ない件

【概要】

AWSの新標準AMIと思われるAmazonLinux2について、yumのデフォルトリポジトリ(amzn2-core)
はなんかヤケにパッケージが少ない。
できるだけAWSが用意してくれるリポジトリに従っていきたいので、以下の2段構えで構築した。

1)Nginxなど主要なパッケージは「Extras Library」からインストールする
2)上記にない場合はEPELを追加する

【詳細】

1)Nginxなど主要なパッケージは「Extras Library」からインストールする

提供されているトピック(=ソフトウェア群)一覧を確認

# amazon-linux-extras

  0  ansible2                 available  [ =2.4.2 ]
  1  emacs                    available  [ =25.3 ]
  2  memcached1.5             available  [ =1.5.1 ]
  3  nginx1.12                available  [ =1.12.2 ]
  4  postgresql9.6            available  [ =9.6.6  =9.6.8 ]
  5  postgresql10             available  [ =10 ]
  6  python3                  available  [ =3.6.2 ]
  7  redis4.0                 available  [ =4.0.5  =4.0.10 ]
  8  R3.4                     available  [ =3.4.3 ]
  9  rust1                    available  \
        [ =1.22.1  =1.26.0  =1.26.1  =1.27.2 ]
 10  vim                      available  [ =8.0 ]
 11  golang1.9                available  [ =1.9.2 ]
 12  ruby2.4                  available  [ =2.4.2  =2.4.4 ]
 13  nano                     available  [ =2.9.1 ]
 14  php7.2=latest            enabled    [ =7.2.0  =7.2.4  =7.2.5 ]
 15  lamp-mariadb10.2-php7.2  available  \
        [ =10.2.10_7.2.0  =10.2.10_7.2.4  =10.2.10_7.2.5 ]
 16  libreoffice              available  [ =5.0.6.2_15 ]
 17  gimp                     available  [ =2.8.22 ]
 18  docker=latest            enabled    [ =17.12.1  =18.03.1 ]
 19  mate-desktop1.x          available  [ =1.19.0  =1.20.0 ]
 20  GraphicsMagick1.3        available  [ =1.3.29 ]
 21  tomcat8.5                available  [ =8.5.31 ]

インストール

amazon-linux-extras install nginx1.12
2)上記にない場合はEPELを追加する

ex.Rootkit Hunter

# EPELの有効化
yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

# RootkitHunberのインストール
yum install rkhunter

Nginxで拡張子指定で静的ファイルをキャッシュするときの注意

nginxの設定例で、以下のようにして静的ファイルをブラウザにキャッシュさせる記述を見かける

server {
  ~
        location ~ .*\.(jpg|jpeg|gif|png|css|js|ico|woff) {
          expires 1h;
        }
}

ただ、この正規表現だと、[.js*]がマッチしてしまうため
hoge.json.php
とか
fuga.js.php
といったようなphpファイルが静的ファイルとして扱われてしまい、実行されない(ダウンロードされてくる)。
具体的には、WebPushツールのOneSignalのWordpressプラグインにそういうのがあった
(参考:https://wordpress.org/plugins/onesignal-free-web-push-notifications/

明示的に拡張子であることを表現するため、末尾のメタ文字($)をつけて

server {
  ~
        location ~ .*\.(jpg|jpeg|gif|png|css|js|ico|woff)$ {
          expires 1h;
        }
}

とすると、hoge.json.phpはサーバサイドで動作(ダウンロードされない)します。


※念のため、変更後、jpgやjsなどについてはレスポンスヘッダの
Cache-Control: max-age=xxxx(expires 1hなら3600)を確認しておいてください

Webプッシュ通知解除(PCブラウザ)

【参考】

https://blog.izooto.jp/disable-web-push-notifications/

Chrome

1)Chromeで右上メニューボタン→[設定]→[詳細設定]→[コンテンツの設定](chrome://settings/contentへの接続でも可)を表示
2)[通知]で許可している通知を[削除]

FireFox

1)Firefoxで右上メニューボタン→[オプション]→[プライバシーとセキュリティ]→[通知]の[設定]で[通知の許可]を表示
2)ウェブサイトを選択して[ウェブサイトを削除]でクリア、変更を保存

■Edge

1)Edgeで右上メニューボタン→[設定]→[詳細設定を表示]→[Webサイトのアクセス許可]を表示
2)[通知]で許可している通知を[×]でクリア

【nginx】Basic認証したサイトでapple iOSアプリをOTA配布するときに何度もbasic認証出て辛いのでUA見てOFFにする

【前提】

https://hogehoge/install/以下に

  • index.html→ダウンロードページにplistへのリンクを設定してある
ex. <a href="itms-services://?action=download-manifest&url=https://hogehoge/install/hogehoge.plist">install app</a>
  • hogehoge.plist
  • hogehoge.ipa

が入っている。
Webサーバはnginx、かつ/install以下はBasic認証により保護される

【発生した問題】

単純に/install以下をbasic認証とした場合、
index.htmlでBasic認証→hogehoge.plistでBasic認証→hogehoge.ipaBasic認証、と3回もID/PWの入力が必要となる。
アクセスログを見ると以下のようになっている

"GET /install/index.html HTTP/1.1" 401 "-" "Mozilla/5.0 (iPhone; CPU iPhone OS(略)"
"GET /install/hogehoge.plist HTTP/1.1" 401 "-" "itunesstored/1.0 (略)"
"GET /install/hogehoge.ipa HTTP/1.1" 401 "-" "com.apple.appstored/1.0(略)"

最初(index.html)のbasic認証の後、そのままではplistとipaの取得時にそれぞれ別のクライアントからの接続があるため、Basic認証の承認状態が引き継がれずに都合3回ID/PWの入力が必要となる。

このため、UAを見て

  • itunesstored
  • com.apple.appstored

に前方一致なら許可とした。


【hogehoge.conf】

server {
    # port
    listen       443;
(中略)
     # for install pages
     set $auth "Restricted";
     if ($http_user_agent ~ (itunesstored|com.apple.appstored)) {
         set $auth off;
     }

     location ^~ /install {
          auth_basic $auth;
          auth_basic_user_file /etc/nginx/conf.d/.htpasswd;
          root /path/to/root/;
     }
(中略)
}

UAを偽装されてしまうとどうしようもないけど、まあこんなもんかな……