1.  インストールと設定  

nginx(「エンジンエックス」のように発音)は、フリーかつオープンソースなWebサーバである。 処理性能・高い並行性・メモリ使用量の小ささに焦点を当てて開発されており、 HTTP, HTTPS, SMTP, POP3, IMAPのリバースプロキシの機能や、ロードバランサ、HTTPキャッシュなどの機能も持つ。 nginxは、BSDライクライセンスでリリースされており、Linux、BSD系OS、macOS、Solaris、AIX、HP-UX、Microsoft Windowsで動作する。 2004年にIgor Sysoevによって公開された。現在はNGINX Plusとしてnginxのエンタープライズ版の販売やサポートを行っているNginx, Inc.が管理している。 『ウィキペディア(Wikipedia)』

インストール
home brewでフルインストール(rtmpはストリーミング)。
The default port has been set in /usr/local/etc/nginx/nginx.conf to 8080 so that nginx can run without sudo.
(nginxがsudoなしで実行できるように、デフォルトのポートは/usr/local/etc/nginx/nginx.confで8080に設定されています。)
nginx will load all files in /usr/local/etc/nginx/servers/.
(nginxは/usr/local/etc/nginx/servers /内のすべてのファイルをロードします。)

ドメインサーバー
/usr/local/etc/nginx以下に設置

$ brew install nginx-full --with-rtmp-module
$ nginx -V
nginx version: nginx/1.19.0
$ sudo mkdir /usr/local/etc/nginx/sites-available
$ sudo mkdir /usr/local/etc/nginx/sites-enabled
$ cd /usr/local/etc/nginx/sites-available
$ sudo vi DNS-01
$ cd /usr/local/etc/nginx/sites-enabled
$ sudo ln -s /usr/local/etc/nginx/sites-available/DNS-01 DNS-01
インストール DNS-01作成

設定ファイル(nginx.conf)編集
/usr/local/etc/nginx/nginx.conf [include DNS-01のシンボリックリンクフォルダ /*]

ホストファイル編集
/etc/hosts [IPアドレス ドメイン名]

$ sudo vi /usr/local/etc/nginx/nginx.conf $ sudo vi /etc/hosts
設定ファイル(nginx.conf)編集 ホストファイル編集

サーバーユーザー作成
ウェブサーバの処理を行うシステムユーザを作成してnginxの実行ユーザを変更。

$ dscl . list /Groups gid
$ sudo dscl . create /Groups/www
$ sudo dscl . create /Groups/www PrimaryGroupID 900
$ dscl . list /Users uid
$ sudo dscl . create /Users/www
$ sudo dscl . create /Users/www UniqueID 610
$ sudo dscl . create /Users/www PrimaryGroupID 900
$ sudo dscl . create /Users/www UserShell /usr/bin/false
$ sudo vi /usr/local/etc/nginx/nginx.conf
$ sudo nginx -t
nginx: the configuration file /usr/local/etc/nginx/nginx.conf syntax is ok
nginx: configuration file /usr/local/etc/nginx/nginx.conf test is successful
$ sudo nginx
$ ps aux | grep nginx
www 18019 0.0 0.0......0:00.00 nginx: cache manager process
www 18018 0.0 0.0........0:00.01 nginx: worker process
グループ、ユーザー作成:nginx.conf編集 nginx動作確認


    2.  PHP  

PHPはCGIプログラムである。 動的なWebページを生成するツールを起源としているため、サーバーサイドWebアプリケーション開発に利用されることが多い。 PHPをWebサーバで動作させる方法には、実行ファイル形式、モジュール形式がある。
どの方法を利用するかはWebサーバにより異なる。 FPM (FastCGI Process Manager) は PHP の FastCGI 実装のひとつで、 主に高負荷のサイトで有用な追加機能を用意しています。

インストール
home brewでインストール。
The php.ini and php-fpm.ini file can be found in: (php.iniおよびphp-fpm.iniファイルは次の場所にあります。)
/usr/local/etc/php/7.4/

php-fpm.conf
Multiple pools of child processes may be started with different listening
(子プロセスの複数のプールを異なるリスニングで開始できます。)
include = /usr/local/etc/php/7.4/php-fpm.d/*.conf

$ brew install php
$ php-fpm -v
PHP 7.1.33 (fpm-fcgi) (built: Jan 26 2020 22:52:36)
$ vi /usr/local/etc/php/7.4/php-fpm.conf
インストール php-fpm.conf

ユーザー、ディレクトリ、設定ファイル作成及びDNS-01編集
実行ユーザー及びディレクトリを作成し、/usr/local/etc/php/7.4/php-fpm.d/設定ファイル作成

$ sudo dscl . create /Users/fpm....1.に準ずる。
$ mkdir -p /usr/local/var/www/fpm/session.....など
$ sudo chown -R fpm:fpm /usr/local/var/www/fpm
$ sudo vi /usr/local/etc/php/7.4/php-fpm.d/fpm.conf
(test.php<-実行--fpm<-ソケット--www<-呼び出し--webブラウザ)

$ sudo vi /usr/local/etc/nginx/sites-enabled/DNS-01
ユーザー、ディレクトリ、設定ファイル作成 DNS-01編集、動作確認


    3.  CMS(flat-file)  

Automad は、ファイルベースのコンテンツ管理システム(CMS)およびPHPで記述されたテンプレートエンジンです。 すべてのコンテンツは、データベースではなく、人間が読めるテキストファイルに保存されます。

SSL証明書作成。
『Let’s Encrypt』SSL申請ツールacme.shのインストール。

ドメインサーバー編集。
nginxにngx_http_v2_moduleを追加、DNS-01編集。

$ git clone https://github.com/acmesh-official/acme.sh.git
$ cd ./acme.sh                    (gitはOS X標準)
$ ./acme.sh --install
$ sudo nginx
$ ./acme.sh --issue -d DNS-01 -w /DocumentRoot
$ brew reinstall nginx-full --with-http2 (モジュール追加)
$ openssl dhparam -out dhparam.pem 4096 (DHパラメータ)
This is going to take a long time(これには長い時間がかかります)
$ openssl rand 48 > tls_session_ticket.key (tlsチケットキー)
$ sudo vi /usr/local/etc/nginx/ssl.conf
$ sudo vi /usr/local/etc/nginx/Letsencrypt.conf
SSL証明書作成 ssl.conf
動作確認 Letsencrypt.conf、DNS-01

Automad CMS設置。
ダウンロード、解凍、ファイル移動、所有権の指定。PHPユーザー(www.conf)ファイル作成。DNS-01編集。

ユーザーアカウント作成。
ブラウザベースのユーザーインターフェイスダッシュボードを使用します。
https://virtual.Domain/dashboard に移動し、指示に従ってください。

$ sudo mkdir -p /DocumentRoot/automad
$ cd /DocumentRoot/automad
$ sudo curl -O -J -L https://automad.org/download
$ sudo unzip automad-master.zip
$ sudo mv ./automad-master/* ./
$ sudo mv ./automad-master/.* ./
$ sudo rm automad-master.zip
$ sudo rmdir automad-master
$ sudo chown -R www:www /DocumentRoot/automad
DNS-01編集 https://DNS-01/automad/dashboad


    4.  Gantt chart(Kanboard)  

ガントチャートとは、プロジェクト管理や生産管理などで工程管理に用いられる表の一種。
Kanboard is a free and open source Kanban project management software.
(自由でオープンソースな、かんばんプロジェクト管理ソフトウェアです。)

PostgreSQL
home brewでインストール。
PostgreSQLサーバー上にデータベースを作成。

Kanboard
ダウンロード、解凍、ファイル移動、所有権の指定。config.php編集。php.ini編集。DNS-01編集。

$ brew install postgresql
$ psql -V
psql (PostgreSQL) 12.3
$ brew services start postgresql
$ psql postgres
postgres=# create user postgres SUPERUSER;
postgres=# \q
$ psql postgres
postgres=# create database kanboard owner=postgres;
=========================================->>
$ sudo vi config.php
$ sudo nginx
$ sudo brew services start php@7.4
$ psql kanboard
kanboard=# \d
$ sudo mkdir -p /DocumentRoot/Kanboard
$ cd /DocumentRoot/Kanboard
$ sudo curl -O -J -L https://github.com/kanboard/kanboard/archive/v1.2.15.zip
$ sudo unzip kanboard-1.2.15.zip
$ sudo mv ./kanboard-1.2.15/* ./
$ sudo mv ./kanboard-1.2.15/.* ./
$ sudo rmdir kanboard-1.2.15
$ sudo rm kanboard-1.2.15.zip
$ sudo chown -R www:www /DocumentRoot/kanboard/data
$ sudo chown -R www:www /DocumentRoot/kanboard/plugins
$ sudo cp config.default.php config.php
$ sudo vi config.php (PLUGIN_INSTALLER true)
$ sudo vi /usr/local/etc/php/7.4/php.ini
$ sudo vi /usr/local/etc/nginx/sites-enabled/DNS-01
kanboard/config.php編集、Sign in、DB確認 config.php編集、php.ini編集、DNS-01編集


    5.  ストリーミングサーバー  

Real Time Messaging Protocol (RTMP) とは、Adobe が開発している、 Adobe Flash プレーヤーとサーバーの間で、音声・動画・データをやりとりするストリーミングのプロトコル。 元々は Macromedia が開発していて、Adobe に買収された。プロトコルの仕様は公開されている。 RTMP プロトコルは多数の変種がある。『ウィキペディア(Wikipedia)』
HTTP Live Streaming(HLS)とは、Appleが実装したHTTPベースのメディアストリーミングプロトコルです。
インデックスファイル(.m3u8):再生順序などを記述したメタデータファイル。
メディアセグメントファイル(.ts):分割された動画データファイル。

OBS Studio
Open Broadcaster Softwareインストール。
ディレクトリ作成、DNS-01編集

$ mkdir /DocumentRoot/hls (動画配信)
$ mkdir /DocumentRoot/rec (動画保存)
$ sudo vi /usr/local/etc/nginx/sites-enabled/DNS-01
$ sudo vi /usr/local/etc/nginx/nginx.conf
OBS Studio 起動
[設定]:[配信]サーバー:rtmp://DNS-01:1935/live
[設定]:[配信]ストリームキー:・・・・・
ソース + 追加:ウィンドウキャプチャ(出力映像画面調整) [配信開始]
DNS-01、nginx.conf編集 OBS配信開始


    6.  HTTP認証  

HTTP基本認証は単純ですが、RFC 2317で定義されているセキュアではない認証スキームです。 ユーザー名とパスワードはBase 64でエンコードされているため、パケット・データにアクセスするユーザーはこれらの情報を簡単に取得することができます。 基本認証のセキュリティは、HTTPSを採用し、要求と応答を暗号化することによって改善できます。『ORACLE』

HTTPダイジェストは、MD5ハッシュ・アルゴリズムを採用し、 ユーザー名とパスワードの暗号化ハッシュに基づく比較的セキュアなスキームです。 また、ダイジェストにより、サーバーは、共有の秘密(パスワード)も認識することをクライアントに証明することができます。 この機能は、すべてのサーバーでサポートされているわけではないので、通常は無効となっています。『ORACLE』

Basic認証 .htpasswd作成。

webDAV nginxモジュール追加。DNS-01編集。

$ htpasswd -c .htpasswd user
New password:
Re-type new password:
$ brew reinstall nginx-full --with-webdav --with-dav-ext-module (モジュール追加)
$ mkdir /DocumentRoot/webDAV
$ sudo chown www:www /DocumentRoot/webDAV
$ sudo vi /usr/local/etc/nginx/sites-enabled/DNS-01
Basic認証、動作確認 webDAV DNS-01編集

Digest認証 .hdigest作成。nginxモジュール追加。

gitweb gitwebインストール。Gitのセットアップ。DNS-02作成。

$ sudo htdigest -c .gitpasswd "Git" user
New password:
Re-type new password:
$ brew reinstall nginx-full --with-auth-digest-module
(モジュール追加)
$ brew install git
$ vi ~/.bash_profile (パス設定、端末再起動)
$ git config --global user.name "user"
$ git config --global user.email "e-mail"
$ vi ~/.gitconfig (設定確認)                       (1.に準ずる)
$ sudo vi /usr/local/etc/nginx/sites-enabled/DNS-02
動作確認、上),Digest認証 gitweb、下),Basic認証 git push DNS-02作成

Git repository ソケットユーザー作成。ルートディレクトリ作成。

$ git --version
git version 2.27.0
$ sudo dscl . create /Users/gitcgi....1.に準ずる。
$ sudo mkdir /Volumes/HDD/Gitrpo
$ sudo git init --bare --shared=group /Volumes/Gitrpo/wok01.git
$ sudo chown -R gitcgi:www /Volumes/HDD/Gitrpo

smart HTTP プロトコルの動きはSSH(認証あり)やGit(認証なし)プロトコルと似ていますが、HTTP/Sの標準ポートを使って通信します。 また、HTTP認証の仕組みをいくつも使うことができます。よって、ユーザーにとってはSSHなどよりも簡単であることが多いです。 というのも、ユーザー名とパスワードを使ったBasic認証を、SSH鍵認証の代わりに使えるからです。 セットアップは、単に CGI スクリプトをひとつ、Git サーバー上で有効にすればおしまいです。
Git に同梱されている git-http-backend というスクリプトを使います。 Smart HTTP に対応している場合は Smart HTTP が使われ、そうでなかった場合はリードオンリー(“dumb”)にフォールバックします。『Git』

nginx cgi ライブラリーインストール。ソケット作成。

$ perl --version
This is perl 5, version 18,
$ ruby --version
ruby 2.3.7p456 (2018-03-28 revision 63024) [universal.x86_64-darwin18]
$ brew install fcgiwrap
$ brew install spawn-fcgi
$ sudo spawn-fcgi -u gitcgi -g www -M 0660 -s /usr/local/var/run/gitfcgi.sock -- /usr/local/sbin/fcgiwrap
spawn-fcgi: child spawned successfully: PID: 469 (spawn-fcgi:子が正常に生成されました)

次に、どのプロジェクトに対して smart HTTP プロトコルでの認証なしアクセスを許可するのかを Git に設定します。 許可したいリポジトリに git-daemon-export-ok ファイルを作成すれば設定できます。 環境変数 GIT_HTTP_EXPORT_ALL を設定しない場合、クライアントからのアクセスは読み込み専用になり、 読み込めるのは git-daemon-export-ok ファイルが保存されたリポジトリだけになります。『Git』

repository ベアリポジトリの作成。ドキュメントルートに移動。

$ cd ./Scripts (移動)
$ git init (リポジトリ作成)
$ git add * (ステージング)
$ git commit -m '001 commit' (コミット)
$ cd ../ (移動)
$ git clone --bare Scripts wok02.git (ベアリポジトリ作成)
Cloning into bare repository 'wok02.git'...done.
$ sudo touch git-daemon-export-ok
$ sudo mv ./wok02.git /Volumes/HDD/Gitrpo (ディレクトリ移動)

最後に、Apacheの設定を2つ変更します。 nginx(not set up)
git-http-backendへのアクセスを許可する設定と、書き込みを認証するための設定です。『Git』

http.receivepack This serves git send-pack clients, allowing push. It is disabled by default for anonymous users, and enabled by default for users authenticated by the web server. It can be disabled by setting this item to false, or enabled for all users, including anonymous users, by setting it to true. (これはgit send-packクライアントにサービスを提供し、プッシュを許可します。匿名ユーザーの場合はデフォルトで無効になり、 Webサーバーで認証されたユーザーの場合はデフォルトで有効になります。この項目をfalseに設定して無効にするか、 trueに設定して匿名ユーザーを含むすべてのユーザーに対して有効にすることができます。)『Git』

$ git clone http://DNS-02:8080/wok02.git $ git push origin master


    7.  オンラインストレージ  

online storageとは、 ユーザーに貸し出したサーバーマシンのディスクスペースにファイルをアップロードすることで インターネット上でファイルを共有するサービスである。『ウィキペディア(Wikipedia)』

Pydio cells ダウンロード、インストール。
Reverse proxyとは、 特定のサーバへのリクエストが必ず通過するように設置されたプロキシサーバである。 一般的なプロキシとは逆で、不特定多数のクライアントのアクセスに備えて特定のサーバー専用に設けられる。 クライアントに取ってはサービスの窓口として機能し、普通はクライアントがリバースプロキシを意識することはない。

MySQL ユーザー、データベース作成。

server DNS-03作成。

$ sudo vi /usr/local/etc/nginx/sites-enabled/DNS-03
(1.に準ずる)
$ ./cells start
DNS-03 https://DNS-03 (動作確認)


    8.  サーバー 停止  

サイト閉鎖は、シンボリックリンクを解除(削除)。

$ sudo unlink /usr/local/etc/nginx/sites-enabled/DNS-02


REMARK    

directory permission file permission
$ find /DocumentRoot -type d -print | xargs chmod 755
(d rwx r-x r-x)
$ find /DocumentRoot -type f -print | xargs chmod 644
(- rw- r-- r--) (- rw- r-- r-- @)
@ = extended attributes


Operation not permitted System Integrity Protection
Mojaveに於いては、$ sudo cp /usr/local/opt/nginx-full/homebrew.mxcl.nginx-full.plist /System/Library/LaunchDaemons
"操作は許可されていません"
リカバリーモードからターミナル起動
csrutil disable (無効)
csrutil enable (有効)
確認 = $ csrutil status


brew doctor brew doctor
Warning: Unbrewed header files were found in /usr/local/include.
$ vi ~/.del_files.sh(1行目に#!/bin/bash>2行目Unexpected header files以下コピペでビジュアルモードshift+G最下行まで選択、 :'<,'>s/^/rm -f />:wq!)、$ sudo bash ~/.del_files.sh
Warning: You have unlinked kegs in your Cellar.
$ vi ~/.del_files.sh(1行目に#!/bin/bash>2行目以下コピペでビジュアルモードshift+G最下行まで選択、 :'<,'>s/^/brew link>:wq!)、$ bash ~/.del_files.sh


postgresql nginx, PHP login start (Execution user)
internal error: sqlstate[08006] [7] could not connect to server
$ brew postgresql-upgrade-database
=> Upgraded postgresql data from 12 to 13!
==> Your postgresql 12 data remains at /usr/local/var/postgres.old
==> Successfully started `postgresql` (label: homebrew.mxcl.postgresql)
$ sudo brew services start nginx-full
$ sudo brew services start php
($ ps aux | grep nginx)
($ ps aux | grep php)


acme.sh OCSP Stapling
$ cd ~/acme.sh
$ ./acme.sh --renew-all or $ acme.sh --renew -d DNS01
Renew: 'DMS01'
Skip, Next renewal time is: XXXX年 XX月XX日 XX時XX分XX秒 UTC
Add '--force' to force to renew.
(強制的に更新するには、「-force」を追加します。)
[warn] 94#0: "ssl_stapling" ignored, host not found in OCSP responder "
$ openssl s_client -connect [DNS01]:443 -status | head
OCSP response: no response sent
ssl.confに resolver 8.8.8.8;
#名前解決の際に利用するDNSサーバを指定する『dns.google』
OCSP Response Status: successful (0x0)


The Mozilla Observatory SSL Server Test


Content Security Policy (CSP) The Mozilla Observatory
add_header X-Frame-Options sameorigin;

(Mac:Homebrew デフォルトのnginxではheaderを上書きする方法がありません。 そのためデフォルトで設定されているヘッダーを追加すると二つ並びどちらを実行するのかクライアントに依存する形となります。)

add_header Content-Security-Policy "frame-ancestors 'self'";






2020.7.18