zuntan02のはてなブログ

備忘録的なものです。時々職場の技術者ブログにも転記してますが、メインはこちらで。

【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を偽装されてしまうとどうしようもないけど、まあこんなもんかな……

【iOSとSSL】iOSのsafariで特定のサイトを開こうとすると「ページが開けません」となる

【概要】

nginxにLet'sEncryptでSSLを設置したサーバーにiOSSafariで接続すると
「ページを開けません。ネットワーク接続が切れました」
f:id:zuntan02:20180523190217p:plain
となった。勿論インターネットには接続している。

同じサイトに対して

などでは普通に表示できる。iOSのみだめ。

【やったこと】

■表示できなかった

server {
    listen 443;
    server_name hogefuga.jp;
    ssl on;

    ssl_protocols  TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE

    # Let's Encrypt
    ssl_certificate     /etc/letsencrypt/live/hogefuga.jp/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/hogefuga.jp/privkey.pem;

    root /srv/www/hogefuga/;
    index  index.php index.html index.htm;
}


■表示できるようになった

server {
    listen 443;
    server_name hogefuga.jp;

    # SSL Settings
    ssl on;
    ssl_session_cache   shared:SSL:10m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
    ssl_prefer_server_ciphers on;
    ssl_ciphers  'ECDH !aNULL !eNULL !SSLv2 !SSLv3';

    #HTTP Strict Transport Security
    add_header Strict-Transport-Security 'max-age=31536000; includeSubDomains; preload';

    # Let's Encrypt
    ssl_certificate     /etc/letsencrypt/live/hogefuga.jp/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/hogefuga.jp/privkey.pem;

    root /srv/www/hogefuga/;
    index  index.php index.html index.htm;
}

iOSSSLに厳しい模様。