HTTP/2対応した筈なのにHTTP1.1になってしまう件
自宅の端末で、せっかく設定したHTTP/2が有効にならない。いろいろ検索すると、下記の情報にたどりついた。
対応しているはずなのに、なぜかHTTP/2で通信できない原因
ESETのファミリーセキュリティ等、いわゆるウィルス対策ソフトが原因の模様。
ウチでも使っているよ、ソレー!
Twitter等の大手サイトだと問題なくHTTP2になっているので、端末側原因というよりサーバ側の設定と思っていたが…。
一部のSSLサイト(「https://」で始まるWebページ)が表示できない
フィルタリングモードを対話モードにする事で、ブロック対象となった場合は許可するか聞いてくるようで、必要に応じて許可してほしいとのアナウンス。
ブロックではなくHTTP/2が無効化されているだけだったので、特にポップアップ等もあがることなく、対話モードにすることでHTTP/2が有効になった。
心当たりはないが、ここのサイトと同じRapidSSLの証明書がブロックされていたので、これが怪しい。証明書の発行元でブロックされるのか、それとも別の原因でブロックされたので同じ証明書の発行元も同じくブロックされたのか。
nginxでsslの設定評価をA+にするメモ
間違った中間CA証明書をバンドルして運用していた事に気づいたので、その修正とともにNginxのHTTPS設定について見直した。HTTPS運用する上で事前に実施していたのは、下記くらいか。
- RapidSSLで外部認証局の証明書を取得
- RapidSSLの場合は、中間CA証明書もサーバ証明書にバンドルしておく
- 取得した証明書はワイルドカード(マルチドメイン)対応でないため、バーチャルホストではなく証明書のドメインのサブディレクトリにコンテンツを変更する
- SSL等の古いプロトコルは禁止しTLSのみにする
SSLv1-v3の設定はかなりハイリスクのため、これらを不許可にするだけでA-からスタートできるようだ。実質変更したのは、CipherListの変更、HSTSの設定、dhparamの設定くらい。
証明書+SSL設定の確認方法
上記サイトで確認したいホスト名をいれて確認が可能。
何度か実行し、赤く表示されているWeekポイントを修正する事で、最終的にはA+と判定された。暗号強度をあげれば、CipherStrengthあたりはもう少しあがるハズだが、落とし所としてはこのあたりだろう。
赤字は修正が好ましい指摘事項、緑は推奨設定事項のようなので基本的には赤字を潰していくように設定を変更していけばよい。まともな証明書を使う限り、大きく改善とみなされるのは、SSL不許可とStrict-Transport-Securityの設定のようだが、強制的にhttpsにリダイレクトされるためコンテンツ側の対応が必要だったり、ブラウザ側での例外設定ができなかったり等の弊害もあるので注意したい。
設定内容を変更後、サイドSSL Server Testを実施したい場合は結果画面より、clear cacheを選ぶとよい。
ちなみにテストでは、CAAレコードの追加がしていないと指摘されたため対応してみたが、特に減点対処とも加点対象ともならないようである。
DNSはホスティングを利用しているので、さくらのコンパネから追加してみた。
登録する値は、証明書の発行元によって変わるので注意。rapidSSLの場合はsymantec.comを下記のように登録すればいいようだ。
0 issue "symantec.com"
テスト結果およびNginxの関連ドキュメントを参照し設定した最終的な、SSLのバーチャルホスト部の設定はこんな感じ。
/etc/conf.d/ssl.conf
Server { listen 443 ssl http2 default_server; listen [::]:443 ssl http2 default_server; server_name moooi.jp; root /www/html/; add_header Strict-Transport-Security 'max-age=31536000'; ssl_certificate /etc/nginx/cert/server.crt; ssl_certificate_key /etc/nginx/cert/server.key; ssl_dhparam /etc/nginx/dhparam.pem; ssl_session_cache shared:le_nginx_SSL:1m; ssl_session_timeout 1440m; ssl_protocols TLSv1.2; ssl_prefer_server_ciphers on; ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:!MD5; client_max_body_size 25M; }
参考にした記事
CentOS6.x系でmySQLの最新バージョンを使う方法
centOS 6.9のyumでインストールしたmysqlを5.7にあげる作業メモ
データベースのバックアップ。
$ sudo cp -aR /var/lib/mysql/ /work/db_bk/
dumpデータもとっておく。
$ mysqldump --single-transaction -u root -p -x --all-databases > dump_yyyymmdd.sql
Enter password: {root_password}
削除する前にパッケージ一覧を出力してから、現行の古いパッケージは一括削除する。
$ sudo rpm -qa | grep mysql $ sudo yum remove mysql*
公式ページよりRPMのURLを確認して、インストール。 ユーザ登録が求められるが急いでいるときは、"No thanks, just start my download."のリンクから落とせる。
$ sudo yum install https://dev.mysql.com/get/mysql57-community-release-el6-11.noarch.rpm
$ sudo yum install mysql-community-server
既存のDBがある場合は、DBのアップデートも必要。セーフモードで起動し、DBのアップデートをおこなう。
$ /usr/bin/mysqld_safe --skip-grant-tables &
$ mysql_upgrade -u root -p
[mysqlのrootパスワード]
Upgrade process completed successfully.
Checking if update is needed.
不足パッケージがあれば、個別に追加でインストールする。
CentOS6.XでHTTP/2のためにnginxを設定
centOS6.xはALPN対応パッケージがないので、自力でコンパイル&インストールする。
事前にやること
現在のパッケージインストールしたnginxのオプションを控えておく。
$sudo nginx -V nginx version: nginx/1.12.2 built by gcc 4.4.7 20120313 (Red Hat 4.4.7-18) (GCC) built with OpenSSL 1.0.1e-fips 11 Feb 2013 TLS SNI support enabled configure arguments: --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module
OpenSSL1.0.1系のためALPNに対応した1.0.2系の最新版に変える。
パッケージアンインストールすると、現在の設定ファイル等も削除されてしまう場合があるので、/etc/nginx配下、/etc/inid.dの起動スクリプトをバックアップする。
$ mkdir ~/backup $ cd ~/backup $ sudo cp -r /etc/nginx . $ sudo cp /etc/init.d init_nginx
コンパイル
作業ディレクトリでopensslの最新版とnginxの最新版をダウンロードし、展開する。
$ wget https://www.openssl.org/source/openssl-1.0.2m.tar.gz $ tar zxvf openssl-1.0.2m.tar.gz
$ wget https://nginx.org/download/nginx-1.13.7.tar.gz $ wget zxvf nginx-1.13.7.tar.gz
コンパイルオプションは、各種技術系サイトの情報をベースに、設定パスやユーザ名等は極力、パッケージ版のものを踏襲するようにして、設定ファイル等の変更が発生しないようにしている。
$ cd nginx-1.13.7 $ ./configure \ --prefix=/etc/nginx \ --sbin-path=/usr/sbin/nginx \ --conf-path=/etc/nginx/nginx.conf \ --error-log-path=/var/log/nginx/error.log \ --http-log-path=/var/log/nginx/access.log \ --pid-path=/var/run/nginx.pid \ --lock-path=/var/run/nginx.lock \ --http-client-body-temp-path=/var/cache/nginx/client_temp \ --http-proxy-temp-path=/var/cache/nginx/proxy_temp \ --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp \ --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp \ --http-scgi-temp-path=/var/cache/nginx/scgi_temp \ --user=nginx \ --group=nginx \ --with-http_ssl_module \ --with-http_realip_module \ --with-http_addition_module \ --with-http_sub_module \ --with-http_dav_module \ --with-http_flv_module \ --with-http_mp4_module \ --with-http_gunzip_module \ --with-http_gzip_static_module \ --with-http_random_index_module \ --with-http_secure_link_module \ --with-http_stub_status_module \ --with-http_auth_request_module \ --with-threads \ --with-stream \ --with-stream_ssl_module \ --with-http_slice_module \ --with-mail \ --with-mail_ssl_module \ --with-file-aio \ --with-http_v2_module \ --with-ipv6 \ --with-openssl=../openssl-1.0.2m/
--with-http_v2_module、--with-openssl=../openssl-1.0.2m/の指定必須。opensslは事前にコンパイル不要なので-with-opensslで指定するフォルダに展開しておけばよい。
足りないヘッダ等があれば、makeファイル作成時にエラーがでるのでxxx-devel等の該当パッケージをいれる。
$yum install pcre-devel
インストール、設定の戻し
$ make
ここまでエラーなく完了したら、nginxの既存パッケージをアンインストールして、コンパイルしたものをインストールする。
$ sudo yum remove nginx* $ sudo make install
設定ファイルの書き戻し、ownerをnginx:nginxに戻しておく等。
$ cd ~/backup $ sudo cp init_nginx /etc/inin.d/nginx $ sudo cp -R nginx /etc/ $ sudo chown -R nginx:nginx /etc/nginx
ちゃんと反映されているか確認。
$ sudo nginx -V nginx version: nginx/1.13.7 built by gcc 4.4.7 20120313 (Red Hat 4.4.7-18) (GCC) built with OpenSSL 1.0.2m 2 Nov 2017 TLS SNI support enabled configure arguments: --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-http_ssl_module --with-http_realip_module --with-http_addition_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_random_index_module --with-http_secure_link_module --with-http_stub_status_module --with-http_auth_request_module --with-threads --with-stream --with-stream_ssl_module --with-http_slice_module --with-mail --with-mail_ssl_module --with-file-aio --with-http_v2_module --with-openssl=../openssl-1.0.2m/
あとは、起動して今までのコンテンツが動作している事を確認して完了。
$ service nginx start
家計簿さな太郎のインストールメモ(nginx+サブディレクトリ)
Web家計簿を自宅サーバで運用するための作業メモ。サービスとしても利用できるが、OSSとして公開されているので自分のサーバにインストールし、運用することも可能。
基本的な手順等は下記を参考にさせていただいた。
適当なディレクトリで以下を実行。
$ git clone git://github.com/kaznum/sanataro.git $ sudo chowon -R nginx:nginx sanataro $ cd sanataro
事前にdatabaseを作成しておき、database名、ユーザ名、パスワードを設定しておく。 以下、mysql2を利用する場合の一例。
sanataro/config/database.yml
production: adapter: mysql2 database: sanataro username: sanataro password: xxxxxxxx encoding: utf8 socket: /var/lib/mysql/mysql.sock
さきほど作ったdataベース名、ユーザ名、パスワードを指定。これは、あくまでもDB接続用のパスワードのため、利用時のログインパスワードとは別である。利用時のログインパスワードは、このDB上に保管される。socketのファイルパスは、mysqlの設定とあわせること。
msqlのソケットファイルのパス確認
$ sudo ps auxf | grep mysql root 1274 0.0 0.0 11468 936 ? S 2017 0:00 /bin/sh /usr/bin/mysqld_safe --datadir=/var/lib/mysql --socket=/var/lib/mysql/mysql.sock --pid-file=/var/run/mysqld/mysqld.pid --basedir=/usr --user=mysql mysql 1493 0.2 11.8 2165900 243836 ? Sl 2017 153:54 \_ /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --user=mysql --log-error=/var/log/mysqld.log --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/lib/mysql/mysql.sock
--socketの後のパスがmysqlが使っているsocketのパスとなる。
sanataro/config.ru
# This file is used by Rack-based servers to start the application. RAILS_RELATIVE_URL_ROOT="/sanataro" require ::File.expand_path('../config/environment', __FILE__) run Sanataro::Application if RAILS_RELATIVE_URL_ROOT then map RAILS_RELATIVE_URL_ROOT do run Rails.application end else run Rails.application end
サブディレクトリで運用する為には、RAILS_RELATIVE_URL_ROOTが重要。
sanararo/Gemfile
group :production do gem 'unicorn' end
productionにunicornを追加し、bundle install時に追加するよう変更。
sanataro/confing/unicorn.rb
# Rails_root_path rails_root = "/www/html/sanataro" worker_processes 2 working_directory rails_root # Unicorn Socket listen "#{rails_root}/tmp/unicorn.sock" # Unicorn PID file location pid "#{rails_root}/tmp/unicorn.pid" # Path to logs stderr_path "#{rails_root}/log/unicorn_error.log" stdout_path "#{rails_root}/log/unicorn.log" # Time-out timeout 300
unicorn用設定ファイルを作成する。
$ gem install bundler $ bundle install --path vendor/bundle --without test development
利用するだけであれば、productionだけのgemでよい。 特にtestのみで使うgemのインストールでいくつかハマりポイントがあるので、回避。
$ bundle exec rake db:migrate RAILS_ENV=production
必要なテーブルの作成等。
/etc/nginx/conf.d/ssl.conf
#Sanataro(Rails) upstream unicorn { server unix:/www/html/sanataro/tmp/development_unicorn.sock fail_timeout=0; } location /sanataro { alias /www/html/sanataro; try_files $uri/index.html $uri.html $uri @unicorn; } location @unicorn { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded_For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_pass http://unicorn; }
nginxで動かす方の設定ファイル。nginxのserverディレクティブの中に書く。
$ sudo service nginx restasrt
nginxの再起動。
さな太郎(Rasils App)の起動
bundle exec unicorn_rails -c config/unicorn.rb -E production -D --path /sanataro
ここでも --path設定。
他にやること
・自分に不要な機能をテンプレート(/app)のファイル、または該当部分をテンプレートから削除する等して無効化(ユーザー追加等)しておく。
・別の家計簿アプリからデータのインポート(特にインポート機能はないので、適当にコンバートかけておく。集計は別テーブルがあるので、そこもコンバートしておく。)、詳細は割愛。
Firefox QuantumにTabMixの機能の一部を付加
新しいFirefoxでタブを多段表示するための設定メモ。(定番であるアドオンのTabmix Plusが使えないので)
①検索、bookmarkは常に新しいタブで開く
アドレス欄にabount:configでリターンをおし、下記の設定項目をtrueにする。
browser.tabs.loadBookmarksInTabs → Trueに変更 browser.search.openintab → Trueに変更
②タブを多段表示にする
プロファイルフォルダに、Firefoxカスタマイズ用のCSSを置く
メニュー→ヘルプ→トラブルシューティング情報→プロファイルフォルダ(フォルダを開く)
プロファイルフォルダ\chrome\userChrome.css
.tabbrowser-tab { flex-wrap:wrap; } .tabbrowser-tab,.tab-background { height:30px; } .tab-stack { width: 100%; } .tabbrowser-tabs .scrollbox-innerbox { display: flex; flex-wrap: wrap; } .tabbrowser-tabs .arrowscrollbox-scrollbox { overflow: visible; display: block; } .tabbrowser-tabs .scrollbutton-up,.tabbrowser-tabs .scrollbutton-down,#alltabs-button{ display: none; } #nav-bar { /* main toolbar */ -moz-box-ordinal-group: 1 !important; border-top-width: 0 !important; } #PersonalToolbar { /* bookmarks toolbar */ -moz-box-ordinal-group: 2 !important; } #TabsToolbar { /* tab bar */ -moz-box-ordinal-group: 3 !important; }
下記サイトのサンプルをくっつけただけ。ツールバーの順番は趣味もあるので、必要に応じて順番をいれかえればよいと思われ。
情報元
Yet another collection of add-ons to imitate Tab Mix Plus in WebExtentions environment
https://support.mozilla.org/ja/questions/1185426
tDiaryのログをファイルに書き出す
Webrickで動かしているtDiaryは、ログが標準出力に吐き出されて不便な事があるので、起動スクリプト側で/var/log配下に吐き出すようにした。 webrickからunicornにすれば、そもそも解決しそうだがとりあえず応急処置。
# chkconfig: - 60 1\5 # processname: tDiaryServer # pidfile: /www/html/tdiary/tdiary.pid # description: tDiary Server RBENV_ROOT=/opt/rbenv/ PATH=$RBENV_ROOT:/sbin:/usr/sbin:/bin:/usr/bin DESC="tDiary server" NAME=tdiary PIDFILE=$NAME.pid TDIARY_PATH="/www/html/tdiary" case "$1" in start) echo -n "Starting tDiary..." cd $TDIARY_PATH (/opt/rbenv/shims/bundle exec tdiary server -p 51980 >> /var/log/tdiary`date +%Y%m%d`.log 2>&1) & ;; stop) echo -n "Stopping tDiary..." kill -9 `cat /www/html/tdiary/tdiary.pid` ;; restart) $0 stop $0 start ;; status) status -p `cat /www/html/tdiary/tdiary.pid` tdiary ;; *) echo "Usage:$0 {start|stop|restart}" exit 1; ;; esac