今からお前んちこいよ

多摩川沿いにて細々とお勉強。

【検索エンジン】Google vs DuckDuckGo の比較

f:id:hakopako03:20171210131840p:plain
鍵垢なので画像

ということで、 2017年9月21日のこのツイートを機にGoogle検索エンジンからDuckDuckGo検索エンジンに切り替えての生活をはじめました。そろそろ3ヶ月ほど経つのでその所感を書きます。*1

検索エンジンを切り替えたデバイスは以下の通り。

  • 個人用PC MacBook Pro (Sierra)
  • 個人用スマホ iPhone6 (iOS10)
  • 個人用タブレット iPad mini (iOS11)
  • 会社用PC Windows7

切り替え方についてはネット上に記事がごろごろあるので適当に調べてください。

サイト検索

DuckDuckGo の方が便利だった。

  • 検索範囲・優先度を 日本指定あり/なし の切り替えがすぐできる
  • 最有力サイトは内容まで表示してくれる(ことが多い)
  • faviconからぱっと見でどの結果が有力そうか判断できる
  • トラッキングされていないので気軽になんでも検索できる
  • 検索結果には満足している

f:id:hakopako03:20171210141018j:plain

画像検索

Googleの方が欲しい画像が出てくる(こともある

f:id:hakopako03:20171210150234j:plain
行きたくない犬
f:id:hakopako03:20171210150237j:plain
rails

翻訳

Googleの圧勝。
Google自身の自動翻訳サービスを直接呼べるので反則感ある

電卓

どちらも使いやすい

f:id:hakopako03:20171210143520p:plain

マップ・地図情報

Google優秀
Googleマップを直接呼べるので反則感ある

路線検索・乗り換え検索

Google優秀
Googleマップから自身のルート探索機能を直接呼べるので反則感ある

為替

どちらも使いやすい

f:id:hakopako03:20171210143713p:plain

他言っておきたいこと

  • D : !hogehoge で有名サイト内での検索を行えるのは便利
  • D : ノートラッキング快適。気軽に検索することができる

> Google広告は確実に静まった <

結論

項目 Google DuckDuckGo
サイト検索
画像検索
翻訳 ×
電卓
マップ ×
路線 ×
為替

私個人としてはサイト検索にはこれまで同様 DuckDuckGo を使っていきたい。
他のことをするにはGoogleにお世話になる。

 

以上。


追記: 2017/12/14
Google と DuckDuckGo でとても違った検索結果の例

f:id:hakopako03:20171214183226j:plain
svn git 移行

Qiita優勢すぎません?w

追記、以上


*1:私が普段遣いで使った所感なのですべての機能を比較したわけではない

SSL(443ポート)のはずなのに "Not secure" とされてしまう理由

参考)Check if a site's connection is secure - Google Chrome Help
ChromeではURLバーに3種類のセキュリティーレベルが表示される。

https://storage.googleapis.com/support-kms-prod/9IKkC4co6mWlM461wyAF94BiF9nMmvcfaqUl Secure
https://storage.googleapis.com/support-kms-prod/rzP3Kj6ct8WH1Ez2S5wV6HCXQVJZg4z0dppd Info or Not secure
https://storage.googleapis.com/support-kms-prod/IFnvUSEwUHO4ppdhra3qLp1qTqnrZduuMwft Not secure or Dangerous

もちろん https通信なのだから Secure にしたいわけだが、いくつかのポイントで Info レベルに落ちてしまっている可能性がある。今回は2つのポイントに触れていく。

ポイント1:TLS1.2 にしましょう

例えばNginxの設定で、

ssl_certificate     /etc/letsencrypt/live/XXXX/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/XXXX/privkey.pem;
ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers         HIGH:!aNULL:!MD5;

としてしまっている場合は

ssl_certificate     /etc/letsencrypt/live/XXXX/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/XXXX/privkey.pem;
ssl_protocols       TLSv1.2;
ssl_ciphers         HIGH:!aNULL:!MD5;

と、暗号方式を指定してあげる。

ポイント2:内部で http を呼んでませんか?

特定のタグにおいて、 http でのリクエストをしている箇所がある場合のこと(Mixed Content: Mixed content - Web security | MDN)を指します。

httpでリクエストしても良いタグ

・ <img> (src attribute)   
・ <audio> (src attribute)  
・ <video> (src attribute)  
・ <object>   

http でリクエストしてはダメなタグ

・ <script> (src attribute)  
・ <link> (href attribute) (this includes CSS stylesheets)  
・ <iframe> (src attribute)  
・ XMLHttpRequest  
・ CSS内全てのURL  
・ <object> (data attribute)  

例えば、
・ headerで css や js の外部リンクが http となっている場合
・ CSS内で、background-img() が http となっている場合

見つける方法

\ ブラウザのコンソール /
エラーやWarningなどで教えてくれるので便利。

【SSLサーバ構築】docker-compose + Let’s Encrypt + Nginxでの設定

SSL証明書の発行更新はホストOSで行い、docker-composeで起動したNginxコンテナにその証明書をマウントする方針。 Nginxでは、443(https)ポートを解放し、80(http)ポートへのアクセスは443にリダイレクトするように設定する。

参考)SSL with Docker Swarm, Let's Encrypt and Nginx

ステップ1: Let’s Encrypt 証明書の発行

ホストOS上で 

$ docker run --rm -p 443:443 -p 80:80 --name letsencrypt -v "/etc/letsencrypt:/etc/letsencrypt" -v "/var/lib/letsencrypt:/var/lib/letsencrypt" certbot/certbot certonly -n -m "メールアドレス" -d ドメイン・サブドメイン --standalone --agree-tos

見やすくすると。

docker run --rm -p 443:443 -p 80:80 
                   --name letsencrypt 
                   -v "/etc/letsencrypt:/etc/letsencrypt" 
                   -v "/var/lib/letsencrypt:/var/lib/letsencrypt" certbot/certbot certonly
                   -n -m "メールアドレス" 
                   -d sampledomain.com 
                   -d www.sampledomain.com 
                   -d sub1.sampledomain.com 
                   --standalone --agree-tos

実行すると、

[XXXX@XXXX ~]$ docker run --rm -p 443:443 -p 80:80 --name letsencrypt -v "/etc/letsencrypt:/etc/letsencrypt" -v "/var/lib/letsencrypt:/var/lib/letsencrypt" certbot/certbot certonly -n -m "メールアドレス" -d ドメイン・サブドメイン --standalone --agree-tos
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator standalone, Installer None
Obtaining a new certificate
Performing the following challenges:
tls-sni-01 challenge for ドメイン・サブドメイン
Waiting for verification...
Cleaning up challenges
IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/ドメイン・サブドメイン/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/ドメイン・サブドメイン/privkey.pem
   Your cert will expire on 2017-12-18. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot
   again. To non-interactively renew *all* of your certificates, run
   "certbot renew"
 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

キーが以下のようにホストOSに出来上がり、証明書が発行される。
・/etc/letsencrypt/live/ドメイン・サブドメイン/fullchain.pem
・/etc/letsencrypt/live/ドメイン・サブドメイン/privkey.pem

ステップ2: Dockerの設定

docker-compose.yaml

# nginx-image

〜〜〜 略 〜〜〜
        ports:
            - "80:80"
            - "443:443"    <-- 追記
        volumes:
            - "./log:/var/log"
            - "./html/app:/usr/share/nginx/html"
            - "/etc/letsencrypt:/etc/letsencrypt"    <-- 追記

default.conf

server {
    # redirect from http to https
    listen 80;
    server_name  _;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name ドメイン・サブドメイン;
    index index.php index.html;
    error_log  /var/log/nginx/error.log;
    access_log /var/log/nginx/access.log;
    root /usr/share/nginx/html/public/;

    ssl_certificate     /etc/letsencrypt/live/ドメイン・サブドメイン/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/ドメイン・サブドメイン/privkey.pem;
    ssl_protocols       TLSv1.2;
    ssl_ciphers         HIGH:!aNULL:!MD5;

    location / {
        try_files $uri $uri/ /index.php$is_args$args;
    }

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html/;
    }

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass php:9000;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
    }
    location ~ /\.ht {
        deny all;
    }
}
$ docker-compose up

ブラウザで確認。

・ https でアクセスできれば成功
・ http でのアクセスが https にリダイレクトしていれば成功

ステップ3:証明書更新スクリプトの設置

証明書は90日で期限が切れる。更新(正確には作り直し)するスクリプトをつくり、cronに設定しておく。 期限が迫ってきた場合は更新処理が走り、余裕がある場合はなにもなく処理が終わる。

certbot.sh

#! /bin/bash

docker run --rm --name letsencrypt \  
    -v "/etc/letsencrypt:/etc/letsencrypt" \
    -v "/var/lib/letsencrypt:/var/lib/letsencrypt" 
    certbot/certbot:latest \
    renew --quiet \
    -n -m "メールアドレス"        # 追記: 2017/12/09 - しばらく経つと再度認証が必要

crontabはこんな感じで、毎日 0:19 と 12:19 に更新チェックをする。

19 0,12 * * * /bin/sh ~/certbot.sh >> ~/certbot.log 2>&1