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動作確認 | |
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編集、動作確認 | |
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 | |
ガントチャートとは、プロジェクト管理や生産管理などで工程管理に用いられる表の一種。
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編集 | |
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配信開始 | |
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 | |
---|---|---|
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 (動作確認) | |
サイト閉鎖は、シンボリックリンクを解除(削除)。
$ sudo unlink /usr/local/etc/nginx/sites-enabled/DNS-02 |
---|
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'"; |