Ubuntu16.04 – キーボードのキー割り当て(キーバインド)をxkbで変更する

ホームディレクトリに.xkbというのを作って、.xkb以下に設定ファイルを作成して、.bashrcとか、.zshrcとかでそれを読みこませることで細かいキーバインド設定が可能。

[xkb] Ubuntu 14.04 で Caps Lock を別のキーにする方法
Ubuntu 14.10でキー配置を変更してみた xkb編

上記を全部一通り読んだらできた。ちなみに下記は英語だけど色々詳しく書いてある。
An Unreliable Guide to XKB Configuration

以下はメモ。

下記で現在のキー設定を確認できる。

$ setxkbmap -print

下記でイベントリスナーが取得してる内容をみることができて、各ボタンをおしたときに、コードや反応しているアクション名などを確認することができる。

$xev

下記パス以下に、xkbの設定が入っている。

/usr/share/X11/xkb/

下記で、xkbの設定を反映することができる。mykbdは自分で命名した内容による。

$ xkbcomp -I$HOME/.xkb ~/.xkb/keymap/mykbd $DISPLAY 2> /dev/null

自分が設定してみた内容は下記です。

~/.xkb/keymap/myxkb

xkb_keymap {
    xkb_keycodes  { include "evdev+aliases(qwerty)" };
    xkb_types     { include "complete"  };
    xkb_compat    { include "complete"  };
    xkb_symbols   { include "pc+jp+us:2+inet(evdev)+myswap(swapkeys)"   };
    xkb_geometry  { include "pc(pc105)" };
};

~/.xkb/symbols/myswap

partial modifier_keys
xkb_symbols "swapkeys" {
  key <AB11> { [ underscore, backslash ] };
  key <MUHE>  { [ Escape, Escape ] };
  key <HENK>  { [ BackSpace, BackSpace] };
  key <HKTG>  { [ Return, Return] };
  key <LALT>  { [ Control_L, Control_L] };
  key <LCTL>  { [ Alt_L, Alt_L] };
};

windows10とubuntu16.04のデュアルブート

このubuntu16.04日本語版をデュアルブートさせました。このサイトを見ながらやりました。最初うまくいきませんでしたが、セキュアブート設定をオフにしていなかったためで、オフにしたらすんなりできました。ただ、パーティションの切り方が自分的によろしくないと思ったので、再設定・再インストールすることにしました。

やった手順は、完全に上記参考サイトと同じで、UbuntuのisoイメージをこのツールでUSBにコピーしました。メインPCとしてメールとかも送るのであれば、日本語版の方がいいのかなと思ってますが、フォルダ名が、「デスクトップ」とか、「ダウンロード」とか、そこは日本語じゃなくていいのにみたいのも多くて、英語版の17.04にしちゃおうかなとも思いました。まあでもとりあえず日本語版でいいか。

パーティションですが、Linuxの場合、SSDに起動プログラムやメインのプログラムを入れて、他のアプリケーションやファイルはHDに入れようと思ったものの、apt-getとかだと基本的にインストール先決まっているし、毎回インストール先を変更するというのは大変なので、/以下全てを小さい領域しかもたないSSDに作り、大きな領域を/media内にマウントさせるという方法はよろしくないのかもと思いました。起動プログラムとキャッシュみたいなやつだけSSDに入れて、あとの大部分のパスをHDにマウントさせられればよろしい感じになるのかなと思いました。

結局下記のような感じにしました。
・SSD 256MG -> /boot
・SSD 4GB -> swap
・SSD 45GB -> /
・HD 1TB -> /home

UbuntuにzshとvimとGoを設定する

zshはoh-my-zshというのを使います。vimはdeinでプラグインを入れます。Goはvim-goプラグインを入れます。

goのインストール

$ sudo -i
$ apt-get update
$ apt-get upgrade
$ apt-get install golang
$ which go
/usr/bin/go

zsh

zshのインストール

$ apt-get install zsh
$ which zsh
/usr/bin/zsh
$ chsh
Changing the login shell for hoge
Enter the new value, or press ENTER for the default
        Login Shell [/bin/bash]: /usr/bin/zsh

oh-my-zshをインストール

$ sh -c "$(wget https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh -O -)"

.zshrcの設定

$ vim .zshrc

.zshrcに下記を追加

export GOPATH=$HOME/go
export GOBIN=$HOME/go/bin
export PATH=$PATH:$HOME/go/bin
$ source .zshrc

Vimの設定

dein.vimをcloneする

$ cd
$ mkdir .vim
$ cd .vim
$ git clone https://github.com/Shougo/dein.vim.git

.vimrcを取得

$ cd
$ git clone https://github.com/endoyuta/vim_config.git
$ ln -s ~/vim_config/.vimrc

deinとプラグインのインストール

$ vim

vim-goプラグインの設定

vim内で、:GoInstallBinariesを実行。

:GoInstallBinaries

Windows10 – Git Bashでシンボリックリンクをつくれるようにする

参考:Git for Windowsでシンボリックリンクを扱えるようにする

なんかややこしそうなことが書いてある。でもできるようでうれしい。

現状

下記を実行すると、シンボリックリンクではなく、コピーが作成される。

$ ln -s /hoge/hoge

解決策

下記2点を実施したらできるようになった。ちなみに、コマンドプロンプトでmklinkというのを使えばいいかなと思ったけど、mklinkも管理者権限が必要だった。

  • .bashrcに下記を追加する。
export MSYS=winsymlinks:nativestrict
  • git bashを管理者権限で開く

GCPのUbuntuのハードディスクを増やす

Bitcoinのブロックがでかくて容量がなくなりました。さっきメモリ増やして容量もちょっと増やしたけど、もう容量が100%になりましたので、さらに増やしたいと思います。100%になったらBitcoindが動かなくなりました。今SSD永続ディスクというのを使っていますが、これをどんどん増やすとお金がかかりそうなので、調べたいと思います。

SSD Persistant Diskの50GBだと、1月$11くらい。普通のPersistant Diskの50GBだと、1月$2.6くらい。4倍位違う。普通のやつ50GBにしようと思ったら、200GB未満だと性能悪くなるかもといわれた。200GBにしといた。ここに永続ディスクを追加した後にUbuntuに反映させる方法がのってる。ディスクをつくって、インスタンスに紐づけた後で、フォーマットしてマウントすればいいらしい。

diskを見つける

インスタンスと紐づけたディスクは下記にあるらしい。

$ ll /dev/disk/by-id
scsi-0Google_PersistentDisk_disk-1

フォーマットする

$ mkfs.ext4 -F -E lazy_itable_init=0,lazy_journal_init=0,discard /dev/disk/by-id/scsi-0Google_PersistentDisk_disk-1

マウントする

$ mkdir /mnt/mydisk
$ mount -o discard,defaults /dev/disk/by-id/scsi-0Google_PersistentDisk_disk-1 /mnt/mydisk

再起動時の自動マウント設定

/etc/fstabに下記を追加する

/dev/disk/by-id/scsi-0Google_PersistentDisk_disk-1 /mnt/mydisk ext4 defaults 1 1

権限設定

デバイスの書き込みアクセスをすべてのユーザーに与えます。

chmod a+w /mnt/mydisk

これで出来たのかな?

認識されてるかチェック

$ df -h
/dev/sdb        196G   61M  186G   1% /mnt/mydisk

ちゃんといる。

再起動しても認識されるかチェック

いる。

Ubuntuの時間ずれの解消

Ubuntuの時間がずれてます。7時なのに前日の22時になります。9時間遅れています。

参考:Ubuntu インストールしたらやること:時刻を同期するNTPサーバーを変更する

systemd-timesyncdの状態確認

$ systemctl status systemd-timesyncd
$ systemctl status ntp

ntpが有効になっていました。

systemd-timesyncdを有効化

$ systemctl stop ntp
$ systemctl start systemd-timesyncd

timesyncd.confの設定

$ vim /etc/systemd/timesyncd.conf

timesyncd.confの中身

[Time]
NTP=ntp.ring.gr.jp

systemd-timesyncdを再起動

$ systemctl restart systemd-timesyncd

これで直った。

GCPのCompute EngineのUbuntuでvsftpdを使う

Ubuntu17.04にvsftpdを入れてみる。vsftpdはFTPサーバ。

インストール

$ apt-get install vsftpd

GCPのポートあける

参考:Google Compute Engineのファイヤーウォールを理解する #gcpja

vsftpd.confの設定

参考:
vsftpサーバ 設定ガイド
Ubuntu 12.04 サーバー再構築(10) FTPの導入

$ vim /etc/vsftpd.conf

設定ファイルの内容

listen=YES
#listen_ipv6=YES
anonymous_enable=NO
local_enable=YES
dirmessage_enable=YES
use_localtime=YES
xferlog_enable=YES
connect_from_port_20=YES
write_enable=YES

chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/vsftpd.chroot_list
allow_writeable_chroot=YES
#chown_uploads=YES

userlist_enable=YES
userlist_deny=NO
userlist_file=/etc/vsftpd/vsftpd.user_list

secure_chroot_dir=/var/run/vsftpd/empty
pam_service_name=vsftpd

FTP接続してみる

$ ftp localhost
$ ftp 123.123.123.123

Bearer Token

The OAuth 2.0 Authorization Framework: Bearer Token Usage(日本語)

Bearer Tokenというのは、署名なしトークンで、上記に書いてあるのは、アクセストークンが署名なしトークンの場合に、保護リソースを要求する方法。これがBearer認証スキームと呼ばれているらしい。推奨される送り方は、Authorizationリクエストヘッダフィールドを用いる方法で、下記のようにやる。

GET /resource HTTP/1.1
Host: server.example.com
Authorization: Bearer mF_9.B5f-4.1JqM

レスポンスは、WWW-Authenticate ヘッダフィールドを含めるとか色々書いてある。
なんか単純すけど、セキュリティ高めるために暗号化したり、https接続したり、クッキーに保存するなとか、TLS証明書チェインを検証しろとか、有効期間を短くしろとかが書いてある。

mixi PlatformがOAuth 2.0の最新仕様に対応しました
これ見ると、アクセストークンは署名つきだったけど、https使えば署名なくてもいいんじゃないか的な感じで、アクセストークンのbearer認証スキームが生まれたのかなと思った。

GCPでUbuntu16・Nginx・PHP7・cakePHP3環境をつくる

Google Cloud Platform(GCP)はAWSのgoogle版です。ここにサービスの説明があります。

Compute Engine

まずプロジェクトを作成する。次に、Compute Engineのコンソールで、VMインスタンスを作成する。ゾーンを日本、マシンタイプをf1-micro、OSをUbuntu16.10で作成してみた。数十秒程度でインスタンスが作成完了し、ブラウザ上でssh接続、ターミナル操作がすぐ可能になった。

マシンタイプの変更方法

参考:vm instanceのMachine type変更方法
IPをスタティックにして、ディスクを削除しないようにしながら、VMインスタンスを削除して、新しくインスタンスをつくるらしい。この間サーバは止まってしまう。でもいずれにしても結構簡単に切替は可能。

ローカル環境でssh接続できるようにする

google cloud SDKをインストールする。インストール完了したら初期設定が動き出すので、ログインしたりゾーン選択したりする。
Compute EngineのVMインスタンスの画面にある、ssh接続用のgcloudコマンドを実行する。これでssh接続できた。

PHPとかNginxとかをインストールする

$ sudo apt-get update
$ sudo apt-get install php
$ php -v
PHP 7.0.15-0ubuntu0.16.10.4 (cli) ( NTS )
$ sudo apt-get install nginx
$ nginx -v
nginx version: nginx/1.10.1 (Ubuntu)
$ sudo apt-get install git vim composer

デフォルトでapache2が入っていて起動されているようだ。
$ sudo systemctl stop apache2
$ sudo systemctl start nginx

Cloud DNS

https://cloud.google.com/dns/quickstart
上記に従って、DNS APIを有効にして、DNSコンソールからドメインを追加する。記載されているネームサーバに合わせて、ドメインのネームサーバを変更して、必要な設定をすると反映される。

Cloud SQL

Google Cloud SQL ドキュメント
Cloud DNSと同様にAPIを有効にしてインスタンスを作成する。Compute Engineから接続するには、ネットワークの承認が必要。下記にやり方が書いてあった。
MySQL クライアントを Compute Engine から接続する

Compute Engineを設定してCakephp3を動かす

$ sudo vim /etc/nginx/sites-available/default

server {
    listen 80;
    server_name hoge.com;
    root /var/www/html/hoge.com/webroot;
    index index.php;
    location / {
        try_files $uri $uri?$args $uri/ /index.php?$uri&$args /index.php?$args;
    }
    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php7.0-fpm.sock;
    }
}

$ sudo systemctl restart nginx
$ cd /var/www/html
$ sudo apt-get install php-fpm php-intl php-mbstring php-zip
$ sudo composer create-project –prefer-dist cakephp/app hoge.com

Compute EngineをCloud SQLにつなぐ

phpmyadminを使う

$ sudo apt-get install mysql-client
$ sudo apt-get install phpmyadmin
$ sudo vim /etc/phpmyadmin/config-db.php

config-db.php

$dbname='hoge';
$dbserver='<Cloud SQLのIPアドレス>';
$dbport='3306';
$dbtype='mysql';

$dbnameがないとエラーになるけど、内容は適当でも大丈夫だった。

$ sudo echo “hoge:$(openssl passwd -apr1 hogepassword)” > /path/to/hogepath
$ sudo chmod 604 /path/to/hogepath
$ sudo vim /etc/nginx/sites-available/default

#Phpmyadmin
server {
    listen 80;
    server_name hogehoge.com;
    auth_basic 'input';
    auth_basic_user_file /path/to/hogepath;
    root /usr/share/phpmyadmin;
    location / {
        index index.php;
    }
    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php7.0-fpm.sock;
    }
}

コマンドラインでmysqlにつなぐ

$ mysql –host=[INSTANCE_IP_ADDR] –user=root -p

cakephp3でmysqlにつなぐ

$ sudo vim /var/www/html/hoge.com/config/app.php
hostをCloud SQLにする。

Let’s EncryptでSSL取得・設定

hoge.comとphpmyadminをhttps接続のみ可能にする。hoge.comにhttpアクセスした場合はhttpsにリダイレクトさせる。

$ sudo apt-get install letsencrypt
$ sudo systemctl stop nginx
$ sudo letsencrypt certonly –standalone -d hoge.com
$ sudo letsencrypt certonly –standalone -d hogehoge.com
$ sudo systemctl start nginx
$ sudo vim /etc/nginx/sites-available/default

#hoge.com cakephp3
server {
    listen 80;
    server_name hoge.com;
    return 301 https://$host$request_uri;
}
server {
    listen 443;
    ssl on;
    ssl_certificate /etc/letsencrypt/live/hoge.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/hoge.com/privkey.pem;
    server_name hoge.com;
    root /var/www/html/hoge.com/webroot;
    index index.php;
    location / {
        try_files $uri $uri?$args $uri/ /index.php?$uri&$args /index.php?$args;
    }
    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php7.0-fpm.sock;
    }
}
#Phpmyadmin
server {
    listen 443;
    ssl on;
    ssl_certificate /etc/letsencrypt/live/hogehoge.com/cert.pem;
    ssl_certificate_key /etc/letsencrypt/live/hogehoge.com/privkey.pem;
    server_name hogehoge.com;
    auth_basic 'input';
    auth_basic_user_file /path/to/hogepath;
    root /usr/share/phpmyadmin;
    location / {
        index index.php;
    }
    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php7.0-fpm.sock;
    }
}

$ sudo systemctl restart nginx

Let’s Encryptの更新方法と更新の自動化

この投稿でLet’s Encryptで無料でSSL証明書を作りましたが有効期限が切れそうなので更新します。
環境は、サーバはさくらのVPS、OSはUbuntu16.04、webサーバはnginxです。

更新方法

参考:https://certbot.eff.org/#ubuntuxenial-nginx

Automating renewal

有効期限が切れる前に自動的に証明書を更新するようにCertbotを設定することができます。 Let’s Encrypt Encryptは90日間使用できるので、この機能を利用することをお勧めします。このコマンドを実行すると、証明書の自動更新をテストできます。

$ letsencrypt renew --dry-run --agree-tos

Ubuntu Xenial上のCertbotのバージョンに「電子メールなしで登録する!」という警告が表示されるバグがあります。以前にCertbotに電子メールを送っていたとしても。これが起こっても心配しないでください。更新には影響しません。それが正しく動作していると思われる場合は、以下を実行するcronまたはsystemdジョブを追加して自動更新を手配できます

$ letsencrypt renew

更新する

更新はNginxをとめないといけません。止めずにrenewコマンドを実行すると、エラーがでます。

The program nginx (process ID 22394) is already listening on TCP port 80. This
will prevent us from binding to that port. Please stop the nginx program
temporarily and then try again. For automated renewal, you may want to use a
script that stops and starts your webserver. You can find an example at
https://letsencrypt.org/howitworks/#writing-your-own-renewal-script.
Alternatively you can use the webroot plugin to renew without needing to stop
and start your webserver.

手動で更新する

Nginxを停止したのちに、renewコマンドを実行して、Nginxを再開するか、webrootプラグインを利用して、renewコマンドを実行する必要があります。webrootプラグインを利用する場合、80ポートにアクセスしてNot Foundとかにならないようにする必要があるようです。私の場合、httpsでしか接続できない(httpの場合強制的にhttpsにリダイレクトさせる)ようにしてあるので、webrootは使えませんでした。Nginx停止&再開をrenewコマンドの前後でやってみます。

$ sudo systemctl stop nginx.service
$ letsencrypt renew
$ sudo systemctl start nginx.service

自動更新させる

自動更新はcronを使います。

$ cd 
$ vim .crontab

.crontabの中身を下記のようにします。

0 3 15 * * systemctl stop nginx.service; letsencrypt renew; systemctl start nginx.service

あるいは、ログを残しておく場合は下記のようにします。

0 3 15 * * systemctl stop nginx.service; letsencrypt renew > /var/log/cron.log 2>&1; systemctl start nginx.service

crontabに反映させます。

$ crontab .crontab
$ crontab -l
0 3 15 * * systemctl stop nginx.service; letsencrypt renew; systemctl start nginx.service

設定がうまく反映できているかの確認をしたい場合、一旦上記cronの実行頻度を変更してすぐに実行させるようにしつつ、下記のような感じでログ出力したらいいと思います。

* * * * * systemctl stop nginx.service; letsencrypt renew >> /var/log/cron.log 2>&1; systemctl start nginx.service

Ubuntu – cron

Ubuntu16.04です。

cronを使うには、crontabコマンドを使います。
crontab -e とやるとcronの編集ができますが、cron -rとやるとcronの設定内容が消えるので、危ないので気を付けるようにとネットでよく書いてあります。紹介されているのは、crontab -eで直接編集するのではなく、別ファイルでcron内容を作成・編集してcrontabで読み込むことです。

$vim .crontab
$crontab .crontab

これで.crontabに書いた設定が反映されます。
ubuntu16.04の場合、cronの実行ログはデフォルトでは表示されないぽいです。またログの表示設定をしても、デフォルトでは、/var/log/cron.logは出力されず、/var/log/syslogに出力されるようです。実行ログのみでエラー内容や標準出力はログには残りません。/var/log/syslogにcronログを出力させるには、下記ファイルのcron関連のコメントを外してrsyslogを再起動します。

$vim /etc/rsyslog.d/50-default.conf
$systemctl restart rsyslog.service

cronで実行結果をログに出力させるには、下記のようにします。
.crontab

* * * * * echo 123 >> /var/log/cron.log 2>&1

2>&1の2は標準エラー出力、1は標準出力です。2を標準出力にリダイレクトさせることによって、エラーも出力されます。

複数コマンドを実行する場合、;か&&でつなげます。;は、前のコマンドがエラーでも次を実行します。&&はエラーだったら次を実行しません。複数コマンドを1行でつなげた場合、例えば下記のようにやっても最後のコマンドの出力以外は受け取れません。

$ echo 123 && echo 456 >> hoge.log
$ cat hoge.log
456

下記のようにすると、最初のコマンドのエラーも含めた出力がファイルに保存されます。

$ echo 123 >> hoge.log 2>&1 && echo 456 >> hoge.log 2>&1

下記なら、最初のechoに誤字があるので、その時点でエラーで終了し、エラー内容がファイルに出力されます。

$ echoo 123 >> hoge.log 2>&1 && echoo 456 >> hoge.log 2>&1

さくらVPSでcakephp3を動かす

環境

Ubuntu 16.04
PHP 7.0
Nginx 1.10

composerインストール+git clone

$ apt-get install composer
$ php -v
PHP 7.0.8-0ubuntu0.16.04.3 (cli) ( NTS )
Copyright (c) 1997-2016 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2016 Zend Technologies
    with Zend OPcache v7.0.8-0ubuntu0.16.04.3, Copyright (c) 1999-2016, by Zend Technologies
$ apt-get update
$ apt-get install php7.0-intl
$ cd hoge.com
$ git clone hoge.git .
$ composer install

Nginx設定

$ vim /etc/nginx/sites-available/default

server {
        listen 443;
        ssl on;
        ssl_certificate /etc/letsencrypt/live/hoge.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/hoge.com/privkey.pem;
        server_name ~^c(?<no>\d+?)\.hoge\.com$;
        root /var/www/c/$no/webroot;
        index index.php;
        location / {
                try_files $uri $uri?$args $uri/ /index.php?$uri&$args /index.php?$args;
        }
        location ~ \.php$ {
                include snippets/fastcgi-php.conf;
                fastcgi_pass unix:/run/php/php7.0-fpm.sock;
        }
}

さくらレンタルサーバでcakephp3を動かす

すでにさくらサーバでgitが使えるようになっています。たしかデフォルトだと使えなかった気がする。マルチドメインで使います。
さくらサーバの管理画面の設定は抜かします。

composer installしたらエラーになりました。

$ curl -sS https://getcomposer.org/installer | php
$ php composer.phar install
Loading composer repositories with package information
Installing dependencies (including require-dev) from lock file
Your requirements could not be resolved to an installable set of packages.

  Problem 1
    - Installation request for cakephp/cakephp 3.3.11 -> satisfiable by cakephp/cakephp[3.3.11].
    - cakephp/cakephp 3.3.11 requires ext-intl * -> the requested PHP extension intl is missing from your system.
  Problem 2
    - cakephp/cakephp 3.3.11 requires ext-intl * -> the requested PHP extension intl is missing from your system.
    - cakephp/debug_kit 3.5.0 requires cakephp/cakephp >=3.1.0 <4.0 -> satisfiable by cakephp/cakephp[3.3.11].
    - Installation request for cakephp/debug_kit 3.5.0 -> satisfiable by cakephp/debug_kit[3.5.0].

  To enable extensions, verify that they are enabled in your .ini files:
    - /usr/local/php/5.6/etc/php.ini
    - /usr/local/php/5.6/etc/conf.d/opcache.ini
  You can also run `php --ini` inside terminal to see which files are used by PHP in CLI mode.

デフォルトではintlがないらしい。

この参考記事のようにするとできるらしいけど、別のサーバ使うことにした。
参考:さくらのレンタルサーバでCakePHP3を使うためにintl extensionを導入する方法

さくらレンタルサーバのSIN SSL利用してると、Facebook APIがエラーになる

エラーは下記です。

An active access token must be used to query information about the current user.

恐らくさくらのレンタルサーバのSSL使うと、httpsアクセスだと認識されないことが原因なのではないかと思った。facebookのSDKみたらやはり、$_SERVER[‘HTTPS’]を見てたので、下記のようにしたらできた。

if(isset($_SERVER['HTTP_X_SAKURA_FORWARDED_FOR'])){
    $_SERVER['HTTPS'] = 'on';
}

ちなみに、このプログラムはcakePHP2を使っているのですが、twitterやfacebookなどのコールバックURLをRouter::url()を使って動的に取得させていて、これまたhttpsアクセスしてるのにhttpsと勘違いされて、http://***というアドレスにされてしまっていた。これについては、core.phpのConfigure::write(‘App.fullBaseUrl’, ‘http://example.com’);に、httpsアドレスをベタ打ちしたら大丈夫になった。

さくらサーバでhttpsアクセスしてもhttpsアクセスしたことにならない

お客さんがさくらサーバでSSL設定されたのですが、httpsアクセスしてもhttpsアクセスしたことにならない。httpsアクセスすると$_SERVER[‘HTTPS’]がセットされるはずですがない。これがセットされてない場合、httpsのURLにリダイレクトするような設定をしてたのでリダイレクトループになりました。

参考:サクラのレンタルサーバーで共有SSLを使うとHTTPSを認識しない問題

if (!isset($_SERVER['HTTP_X_SAKURA_FORWARDED_FOR'])) {}

$_SERVER[‘HTTP_X_SAKURA_FORWARDED_FOR’]がセットされてなければhttpsじゃないと判断できるらしい。

下記のような感じでやったらできた。

private function _chk_https()
{
    if(empty($_SERVER['HTTPS']) && !isset($_SERVER['HTTP_X_SAKURA_FORWARDED_FOR'])){
        $this->_forceSSL();
    }
}

private function _forceSSL()
{
    return $this->redirect('https://'.env('SERVER_NAME').$this->here);
}