【原因】
- VPCの設定で有効にしてない
- EIPかパブリックIPが割り当てられてない
【結論】
ELB(ALB)のアイドルタイムアウトを適度に伸ばすと解決した
https://aws.amazon.com/jp/amazon-linux-2/faqs/
https://aws.amazon.com/jp/premiumsupport/knowledge-center/ec2-enable-epel/
https://dev.classmethod.jp/cloud/aws/install-nginx-on-amazon-linux2-from-extras-repository/
AWSの新標準AMIと思われるAmazonLinux2について、yumのデフォルトリポジトリ(amzn2-core)
はなんかヤケにパッケージが少ない。
できるだけAWSが用意してくれるリポジトリに従っていきたいので、以下の2段構えで構築した。
提供されているトピック(=ソフトウェア群)一覧を確認
# 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
ex.Rootkit Hunter
# EPELの有効化 yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm # RootkitHunberのインストール yum install rkhunter
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)を確認しておいてください
https://blog.izooto.jp/disable-web-push-notifications/
1)Chromeで右上メニューボタン→[設定]→[詳細設定]→[コンテンツの設定](chrome://settings/contentへの接続でも可)を表示
2)[通知]で許可している通知を[削除]
1)Firefoxで右上メニューボタン→[オプション]→[プライバシーとセキュリティ]→[通知]の[設定]で[通知の許可]を表示
2)ウェブサイトを選択して[ウェブサイトを削除]でクリア、変更を保存
1)Edgeで右上メニューボタン→[設定]→[詳細設定を表示]→[Webサイトのアクセス許可]を表示
2)[通知]で許可している通知を[×]でクリア
ex. <a href="itms-services://?action=download-manifest&url=https://hogehoge/install/hogehoge.plist">install app</a>
が入っている。
Webサーバはnginx、かつ/install以下はBasic認証により保護される
単純に/install以下をbasic認証とした場合、
index.htmlでBasic認証→hogehoge.plistでBasic認証→hogehoge.ipaでBasic認証、と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を見て
に前方一致なら許可とした。
【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を偽装されてしまうとどうしようもないけど、まあこんなもんかな……
nginxにLet'sEncryptでSSLを設置したサーバーにiOSのSafariで接続すると
「ページを開けません。ネットワーク接続が切れました」
となった。勿論インターネットには接続している。
同じサイトに対して
などでは普通に表示できる。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; }