備忘録」カテゴリーアーカイブ

Ubuntu16.04 Nginx Let’s encrypt で評価A+な SSL+HTML/2

ポート開放を忘れずに (ルーターも)

sudo ufw allow 443

Let’s encryptをインストール

sudo apt install letsencrypt

証明書の発行を発行して貰う。
-w でルートディレクトリ -dでドメイン -m でメアドを指定。

sudo letsencrypt certonly --webroot -w /www/html -d idol-nakachan.world -m nakachankawaii@kancolle.mail.jp

サブドメインも取得する場合
-w でルートディレクトリ -dでドメイン -m でメアドを指定。

sudo letsencrypt certonly --standalone -w /www/html  #
-d idol-nakachan.world #
-d www.idol-nakachan.world #
-d 2-4-11.idol-nakachan.world #
-m nakachankawaii@kancolle.mail.jp

証明書の自動更新 (crontab)

/etc/crontab
00 05 01 * * sudo systemctl stop nginx; sudo letsencrypt renew; sudo systemctl start nginx

DH交換鍵の設定

sudo mkdir /etc/nginx/ssl
sudo opensll dhparam -out /etc/nginx/ssl/nakachan-anzen.pem 2048

Nginxの設定
/etc/nginx/nakachan.conf

server {
listen       80;
server_name  idol-nakachan.world;
return 301 https://$host$request_uri;
}

server {
listen       80;
listen       443;
server_name www.idol-nakachan.world;
return 301 https://$host$request_uri;
}

server {
listen       443 ssl http2;
server_name  idol-nakachan.world;
add_header Strict-Transport-Security 'max-age=31536000; includeSubDomains;';

ssl_protocols TLSv1.2;
ssl_certificate         /etc/letsencrypt/live/idol-nakachan.world/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/idol-nakachan.world/privkey.pem;
ssl_dhparam           /etc/nginx/ssl/nakachan-anzen.pem;
ssl_prefer_server_ciphers on;

ssl_session_cache shared:SSL:50m;
ssl_session_timeout 1d;
ssl_stapling on;
}

再起動

sudo nginx -t
sudo systemctl restart nginx

どどんとふの環境構築(Ubuntu16.04LTS / Nginx / Spawn-fcgi)

どどんとふの設置で一番詰まりそうな所を保存しておきます。
以下、インストール済み。
Ubuntu16.04LTS(ZorinOS12.4)
PHP7.3
Nginx1.15.8

#各種インストール
どどんとふはRubyで書かれたCGIなので、NginxでRuby/CGIが動作する環境を作ります。

sudo apt install spawn-fcgi
sudo apt install ruby
sudo apt install ruby-fcgi #忘れずに

#使用ポートの開放
TCP/IPで接続する場合は、使用ポートを開放する。

sudo ufw allow 9009

#Nginx 設定追加
/etc/nginx/default.conf

location ~ \.rb$ {
fastcgi_pass    127.0.0.1:9009; #TCPの場合、使用ポートを入力
#fastcgi_pass    unix:/var/run/ddntf.sock; #Unix socketの場合
fastcgi_index   index.html;
include        /etc/nginx/fastcgi_params;
}

#どどんとふサービス登録
Nginxがリダイレクト先のspawn-fcgiプロセスを起動するサービスを作成
/etc/systemd/system/ddntf.service

[Unit]
Description=ddntf
Wants=nginx.service
After=nginx.service

[Service]
#TCP
ExecStart=/usr/bin/spawn-fcgi -d /www/DodontoF -f /www/DodontoF/DodontoF.rb -u nginx -g nginx -a 127.0.0.1 -p 9009 -F 8 -P /home/www/ddntf/ddntf.pid

#Unix Socket
#ExecStart=/usr/bin/spawn-fcgi -d /www/DodontoF -f /www/DodontoF/DodontoF.rb -u nginx -g nginx -a 127.0.0.1 -s /var/run/ddntf.sock -F 8 -P /home/www/ddntf/ddntf.pid

[Install]
WantedBy=multi-user.target

#サービスの自動起動化

sudo systemctl enable ddntf.service
sudo systemctl start ddntf.service

#DodontoF.rb作成
DodontoFSarver.rbと同ディレクトリに作成。
Shebang(#!/usr/bin/ruby等)は環境によるので which ruby で確認して変更。
/www/DodontoF/DodontoF.rb

#!/usr/bin/ruby -Ku
#--*-coding:utf-8-*--
Encoding.default_external='utf-8' if defined?(Encoding) && Encoding.respond_to?('default_external')

require 'rubygems'
require 'cgi'
require 'fcgi'
require 'logger'

$logger = Logger.new('./fcgi.log')
$logger.level = Logger::WARN

$logger.info(" load")
load 'DodontoFServer.rb'

$logger.info("### FCGI.each start")
FCGI.each do |fcgi|
$logger.info("do")
begin
$logger.info(" begin")
$stdout = fcgi.out
$stdin = fcgi.in
ENV.replace(fcgi.env)

$logger.info(" execute")
executeDodontoServerCgi()

fcgi.finish
$logger.info(" finish")
rescue Exception => e
$logger.fatal(e)
end
$logger.info("end")
end
$logger.info("### FCGI.each end")

#パーミッション変更

sudo chmod +x DodontoF.rb
sudo chown nginx:nginx DodontoF.rb

#動作確認

sudo systemctl ddntf

問題なければ、どどんとふをマニュアルに沿って設置しましょう。
ブラウザで実際見て正常に表示されない場合は、まず各ファイルのパーミッションを確認。
Nginxの場合はポートやfastcgi_params等の設定を見直します。
Nginxやシステムのログが参考になるので、必ず見ましょう。

PHP7.3への対応

1.コンストラクタ (クラス名と同じ名前のメソッドを定義するもの) が非推奨となったので変更。
Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; XoopsDatabase has a deprecated constructor in /xoops/class/database/database.php on line 53

/xoops/class/database/database.php

- public function XoopsDatabase()
+ public function __construct()

2.関数 create_functionが非推奨となったので変更
Deprecated: Function create_function() is deprecated in /xoops/modules/legacy/preload/Primary/SessionCallback.class.php on line 18

/xoops/modules/legacy/preload/Primary/SessionCallback.class.php

- ob_start(create_function('', '(session_id() && session_write_close());return false;'));
+ ob_start(function(){(session_id() && session_write_close());return false;});