2020年2月の記事一覧
Shirasagiの扱いが難しい
まぁRubyやらRailsやらからっきしなのでアレですが。
今回のはRuby関係ないですが。
Shirasagiの常時SSL化をNginxのリバースプロキシ下でやろうとしてハマった話。
インターネット(SSL)⇒Nginx ⇒(ここから先http)(別Serverの)Nginx ⇒ Shirasagi(Unicorn?)
という構成で、公開サイトをsslで表示するのはすぐにできたんですが、管理画面ログインがうまくいかなくて困った。
フロント側のNginxのプロキシ(ヘッダー)設定を
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Ssl on;
proxy_set_header X-Forwarded-Proto https;
バックエンド側のNginxはShirasagiインストール時に生成されてるんだけど、
#proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
を
proxy_set_header X-Forwarded-For "$http_x_forwarded_for, $realip_remote_addr";
に書き換えてみた。
ようはフロントで
proxy_set_header X-Forwarded-Ssl on;
proxy_set_header X-Forwarded-Proto https;
して、バックエンドで
proxy_set_header X-Forwarded-Proto $scheme;
することでうまくいくらしい。
なおバックエンド側に追記したのは
フロント側で
proxy_set_header X-Forwarded-For $remote_addr;
しておいてバックエンド側で書き換えた
proxy_set_header X-Forwarded-For "$http_x_forwarded_for, $realip_remote_addr";
でアクセス元のIPを取ろうという記述、、、のはず。
Nginx触り始めて1週間でググりまくった結果なのでまたこつこつ調べないといけませんね。
F-Revo CRM patch適用とPHP7.2化
雑ですが忘れないようメモ
・F-Revo CRMをインストール
無印?版はphp5.6でしか動かないのでオフィシャルなどにある手順通りインストール
https://f-revocrm.jp/2018/08/8273
パッチ3の適用まで書いてありますが、さらに今はパッチ4、5、6、6_1までリリースされていますので、すべて適用します。
基本的にアーカイブを展開してディレクトリごと上書きするだけです。
また、前の記事で書いた includes/main/WebUI.php
がパッチ6で上書きされるので、修正しなおしを忘れないようにしましょう。
パッチ6がphp7対応バージョンとのことなので、合わせてphpを7.2に更新します。
一応apacheとか止めておいたほうが無難なのかな?当方は仮想マシンで丸ごとバックアップしていたのであんまり考えずに実行してしまいましたが。
yum install --disablerepo=base --enablerepo=epel,remi,remi-safe,remi-php72 php php-gd php-mysqlnd php-imap php-mbstring php-devel php-mcrypt php-xml php-opcache
用心でphp.iniとかもバックアップしてましたが、特に何も変更せずとも大丈夫でした。
これでphp7.2環境になりました。
時間が取れそうならもう少し丁寧に書きます。。。
F-revo CRM リバースプロキシ関連のTips
F-revo CRMをNginxのリバースプロキシの背後に置くとRefererを見られてうまく動いてくれない。
本来ならgetコマンドでRefererを取って反映、とかやるのが正しいのだろうけど、とりいそぎコード変更してみた。
どうなんだろ、一応開発元に質問したりしてみてもいいもんなんだろうか。
なお前提としてNginxでのリバースプロキシは構築済みで、nginx側でのSSL化も済んでる前提です。
■事前:
crm/config.inc.phpの「$site_URL」を以下のように設定
$site_URL = 'http://【サーバのIPアドレス】/crm/';
■以下のように変更
# vi crm/config.inc.php
$site_URL = 'https://【SSL証明書を取得したドメイン名】/crm/';
# vi crm/includes/main/WebUI.php
// if ($site_URL && stripos($request_URL, $site_URL) !== 0){
// header("Location: $site_URL",TRUE,301);
// exit;
// }
ただ、これRequest URLとSite URLが正しくないと接続を許可しないってセキュリティ面を担保する設定のような気がするので、そもそもOFFにするのがいいのかといわれるとちょっと。。という感じ。
一応ログ等見ながら様子見。
。。。あれ、パッチどこまで適用してたっけ。。ちょっと確認しないと。
Nginx リバースプロキシ&SSL設定のTIPS
基本的なインストールやら導入は(暇があったら書きますが)、とりあえずたくさん記事があるので放置して、ハマリかけたとこだけ
SSL設定で
dhparam.pem
がないと怒られる。
# nginx -t
nginx: [emerg] BIO_new_file("/etc/ssl/certs/dhparam.pem") failed (SSL: error:02001002:system library:fopen:No such file or directory:fopen('/etc/ssl/certs/dhparam.pem','r') error:2006D080:BIO routines:BIO_new_file:no such file)
まぁネット上のConfigパクってて設定もしてないほうが悪いんですが、Nginxは今のVersionだとdhparam.pemがないといけないらしいので注意。
んで
# openssl dhparam 2048 -out /etc/ssl/certs/dhparam.pem
Generating DH parameters, 2048 bit long safe prime, generator 2
完了まで時間がかかる。
そのあと
# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
正常にとりあえずはなったのでメモ
NextCloudとリバースプロキシ
他に書く場所も確保していないのと、せっかくの構築関連のTIPS的なやつなのでここにメモがてら。
自宅で古めのサーバにNextCloudを構築して使っているが、自宅にいくつもサーバを立てていると、外部から接続させるときのポートフォワーディング設定などが煩わしい
うっかり開けた穴を閉じ忘れてるなどもあるかもしれないので、思い切ってやり方を変えることにした。
基本的に自宅で構築するものはWeb系のものが多い。なのでいっそ全部リバースプロキシで受けて増やしたり減らしたりする際にはリバースプロキシ側で制御すればいいんじゃん?と考えたわけである。
。。。が、本編のリバースプロキシ構築に入る前に、NextCloudを現在Let's Encryptを使ってhttpsで外部からつながるように設定しているのだが、ローカル側は常にhttpで構築するように変更しようと考えたところなぜかNextCloudにhttp経由の場合ログインができない状態に陥った。
色々調べてみると、どうもphpのセッションが格納されるディレクトリの権限の問題と判明。
当方の場合CentOSでインストールしているのだが、/var/lib/php の権限の問題で、/var/lib/php/session配下に生成されるセッション管理ファイルがうまく読み書きできない状態になる模様。
なので
chown -R apache:apache /var/lib/php
として、権限を変更し、無事httpでも正常にログインできるようになった。
このメモだけだとわかる人にしかわからないが、NextCloudをVersionUpしたり、CentOSでPHP 7.xをremiリポジトリからインストールしてると発生するケースがあるようなのでメモ。