スキップしてメイン コンテンツに移動

nginx にて fcgiwrapを導入し CGI 実行環境 構築 on FreeBSD13

FreeBSD13 にて CGI が動作するWebサーバを構築する。
nginx は CGI の実行ができないので fcgiwrapを導入する。
nginxとfcgiwrapの通信は UNIXドメインソケットを利用する。

FreeBSDのバージョンは 13.0p8

% freebsd-version
13.0-RELEASE-p8

インストール

ここに nginx と fcgiwrap をインストールする。

% doas pkg install nginx fcgiwrap

New packages to be INSTALLED:
        fcgi-devkit: 2.4.0_5
        fcgiwrap: 1.1.0_11
        nginx: 1.20.2_3,2
        pcre: 8.45

===> Creating groups.
Using existing group 'www'.
===> Creating users
Using existing user 'www'.

=====
Message from nginx-1.20.2_3,2:

--
Recent version of the NGINX introduces dynamic modules support.  In
FreeBSD ports tree this feature was enabled by default with the DSO
knob.  Several vendor's and third-party modules have been converted
to dynamic modules.  Unset the DSO knob builds an NGINX without
dynamic modules support.

To load a module at runtime, include the new `load_module'
directive in the main context, specifying the path to the shared
object file for the module, enclosed in quotation marks.  When you
reload the configuration or restart NGINX, the module is loaded in.
It is possible to specify a path relative to the source directory,
or a full path, please see
https://www.nginx.com/blog/dynamic-modules-nginx-1-9-11/ and
http://nginx.org/en/docs/ngx_core_module.html#load_module for
details.

Default path for the NGINX dynamic modules is

/usr/local/libexec/nginx.

表示は少し省略した。
インストールする過程で www というユーザとグループが作成された。
nginxとfcgiwrapはこのユーザ(www)で実行する。

nginx の設定ファイルは次の場所に配置されている。

% ls /usr/local/etc/nginx/
fastcgi_params          mime.types              scgi_params             win-utf
fastcgi_params-dist     mime.types-dist         scgi_params-dist
koi-utf                 nginx.conf              uwsgi_params
koi-win                 nginx.conf-dist         uwsgi_params-dist


nginxの設定

インストール時の設定ファイル nginx.conf で有効な内容は次の通り。


% grep -v # nginx.conf | grep -v ^$
worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    server {
        listen       80;
        server_name  localhost;
        location / {
            root   /usr/local/www/nginx;
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /usr/local/www/nginx-dist;
        }
    }
}

文字コードの設定 (charset UTF-8;) を追加。
.cgi へのアクセスについても追加した。


% grep -v # nginx.conf | grep -v ^$
worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    server {
        listen       80;
        server_name  localhost;
        charset utf-8;
        location / {
            root   /usr/local/www/nginx;
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /usr/local/www/nginx-dist;
        }
        location ~ \.cgi$ {
            fastcgi_pass   unix:/var/run/fcgiwrap/fcgiwrap.socket;
            fastcgi_param  SCRIPT_FILENAME  /usr/local/www/nginx$fastcgi_script_name;
            include        fastcgi_params;
        }
    }
}


fastcgi_pass でUNIXドメインソケットを指定。

fastcgi_param で実行するcgiのパス込みのファイル名を指定。


rc.confの設定

OS起動時に立ち上がるように設定。
下の5行を rc.conf に追加。



% cat /etc/rc.conf
hostname="freebsd-vm"
ifconfig_em0="DHCP"
sshd_enable="YES"
ntpd_enable="YES"
# Set dumpdev to "AUTO" to enable crash dumps, "NO" to disable
dumpdev="AUTO"
zfs_enable="YES"

fcgiwrap_enable="YES"
fcgiwrap_user="www"
fcgiwrap_socket_owner="www"
fcgiwrap_socket="unix:/var/run/fcgiwrap/fcgiwrap.socket"
nginx_enable="YES"

fcgiwrapのプロセス と UNIXドメインソケット fcgiwrap.socket のユーザをwwwに指定。
ユーザが異なるとエラーが出る。


起動

OSの再起動か、コマンドで立ち上げる。


% doas service fcgiwrap start
% doas service nginx start


テスト

サーバーのIPアドレスでトップページが表示されることを確認する。



Welcome to nginx!

If you see this page, the nginx web server is successfully installed and working. Further configuration is required.

For online documentation and support please refer to nginx.org.
Commercial support is available at nginx.com.

Thank you for using nginx.


このページは /usr/local/www/nginx/index.html を表示している。


そこで次のファイル test.cgi を作り実行権限を付与する。

% cat /usr/local/www/nginx/test.cgi 
#!/usr/bin/env sh

echo "Content-type: text/plain; charset=utf-8"
echo ""
echo "sample"


これで http://IPアドレス/test.cgi にアクセスすると


sample

が表示される。


ログ

何かあればログファイルを確認

/var/log/nginx/access.log
/var/log/nginx/error.log


コメント

このブログの人気の投稿

Ubuntu で RAIDディスクをマウントする

謎のHDDが見つかった。 データを確認するためWindowsにつなぐもマウントされず。 これは extとかffsの辺りかなと思い、Linux(Ubuntu)に繋ぐ。 しかし、自動マウントされない。 取り敢えずマウントする。 # mount /dev/sdb1 /mnt/disk すると'linux_raid_member'とエラー表示された。 ということで、まずファイルシステムを確認。 # parted -l このコマンドでファイルシステムが表示される。 また、Gparted でも表示される。 そこでRAIDディスクを扱うためにmdadmパッケージをインストール。 # apt install mdadm ネットでは mountコマンドの -t オプションで明示的にファイルシステムを指定するとマウントできると書いてあったのでそれを試すとマウントできた。 # mount -t ext3 /dev/sdb1 /mnt/disk 内容を確認すると不要なデータだったのでデータを削除する。 # shred -v /deb/sdb この処理はとても時間がかかるので普段使わないコンピュータで処理をした。

自動ログイン on Lubuntu

Lubuntu 19.04 の 自動ログインを設定してみた。 グラフィカルログインを自動で行うようにしたいが、 ユーザー設定 の中に自動ログインの設定がない。 そこでコマンドラインから設定してみた。 まず、ログインをするときに使用しているディスプレイマネージャを確認する。 $ cat /etc/X11/default-display-manager /usr/bin/sddm sddm を使っているので、sddm の自動ログインを設定する。 OSは systemd で動いていると設定ファイルがないようなので作成する。 # sddm --example-config > /etc/sddm.conf.d/sddm.conf この設定ファイルに Autologin について書いてあるのでここにユーザ名を入力。 $ head /etc/sddm.conf.d/sddm.conf [Autologin] # Whether sddm should automatically log back into sessions when they exit Relogin=false # Name of session file for autologin session (if empty try last logged in) Session= # Username for autologin session User= ここの User= にユーザ名を書き込み保存後、再起動すると自動でログインされる。

TVに繋いでいた録画用HDDが認識しなくなった

ポロポロとものが壊れていく。 年数もそれなりに経っているので仕方がないと思うが、  Panasonic VIERA TH-L32X3  メーカーページ http://panasonic.jp/viera/p-db/TH-L32X3.html 上記VIERAに繋いでいた録画用のHDDが急に認識しなくなった。 実はこれで二回目のトラブルである。 一回目は買って1年ほどでこの症状が出た。 この時はHDDが物理的な障害で故障したと思い、ダメ元で再接続再フォーマットした。 このHDDはそのあと5年以上正常に動作していた。 結局この時の障害は論理障害だったのだと思う。 今回も同様の症状だったので、復旧を試みることにした。 こちらのサイトに Panasonic製のセットトップボックスへ繋いでいたHDDの修復について書いてあった。 Panasonic CATV STBの外付けHDDのファイルシステム修復 おぼえ書き http://qiita.com/a_saitoh/items/93a9983b988b541d2cb1 これを参考にして、FreeBSD11.0( https://www.freebsd.org/ja/ ) に外付けHDDを繋いで、fsck_ffs -n を実行するも復旧せず。 仕方がないので、fsck_ffs -y や fsck_ufs -n 、 fsck_ufs -y などをかけてからTVにつなぐと認識した。 録画データは諦めていたので、いろんなコマンドをかけてしまったので、 どのコマンドが良かったかはっきりとしないが、 無事にデータが参照できるようになった。