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

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= にユーザ名を書き込み保存後、再起動すると自動でログインされる。

ノートPC ( HP Pavilion TouchSmart 10 ) にXubuntuを入れた話

以前、次のような記事を書いた。 Na01mini に Ubuntu 19.04 をインストールした https://atsreport.blogspot.com/2019/06/na01mini-ubuntu-1904.html このときはハードウェアが32bitであった為32bitのUbuntuをインストールすることになった。 今回は次の64bitマシンをSSD化しXubuntuをインストールした。 スペック HP Pavilion TouchSmart 10-e003AU AMD A4-1200 APU (1.0GHz, 1MB L2キャッシュ) 2GB (2GB×1) (1066MHz,DDR3L SDRAM) オンボード AMD Radeon™ HD 8180 グラフィックス 10.1インチワイドHDブライトビュー・タッチディスプレイ (1366×768/最大1677万色) https://jp.ext.hp.com/lib/products/portables/personal/spec_pdf/pavilion_10e-000_touchSmart_dp.pdf もともとWindows8.1(64bit)であったのをWindows10Home(64bit)にアップグレードしてあったが、とても処理が重く使いみちがなかった。 処理が重い理由の1つがHDDだと思ったのでSSD120GBに交換した。 SSDはパソコン工房で2000円で買えた。厚さ7mmでないと入らない。 LITEON PH6-CE120 Pavilion TouchSmart 10-e003AU の分解については色んなページを参考にした。 ドライバは必須だが、スクレイパーが有るといい。無いと分解できなかったかも。 http://ayati.cocolog-nifty.com/blog/2014/06/pchp-pavilion-1.html https://wakeari.danman.jp/entry/paviion-ts-10-e021au-ssd http://h10032.www1.hp.com/ctg/Manual/c04019490.pdf 交換完了し、最初 FreeBSD12.1 をインストールした。 ところがタッチパネ...