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
コメント
コメントを投稿