🎃

freenginxを試しました!!

2024/02/15に公開1

freenginx

announcing freenginx.org

https://freenginx.org/

おうちラボ環境のあちこちで利用させていただいているNGINXですが、
開発者の一人が別プロジェクトとしてfreenginxを立ち上げたとのことで触ってみました。

今回カバーする内容は次の通りです。

  • mercurialというVCSでレポジトリをクローン、特定のtagをcheckout (hg update)
  • freenginxのビルド、インストール、実行

mercurial

レポジトリはread-onlyで公開されているものとしてダウンロードページにリンクがあります。

VCSはMercurialだということで初めて使ってみました。

http://freenginx.org/hg/nginx

# install mercurial
sudo apt update && sudo apt install mercurial -y

# confirm
hg --version
hg --help

# clone repository
hg clone http://freenginx.org/hg/nginx
cd nginx

branch/tag確認とcheckout

checkoutに相当するコマンドはupdate。

# list branches
hg branches

# list tags
hg tags

# checkout the latest available tag which was 1.25.3
hg update release-1.25.3

build and install

Debian 12 Bookwormのイメージで本ポストの一連の作業を試したのですが、
ビルドのために別途インストールしたイメージがいくつかあります。
aptでインストールします。

またnginxユーザとグループもオフィシャルのイメージと同じように用意します。

必要なものを揃えたら、あとはお決まりのconfigureとmakeです。

configureのオプションに関しては他で動かしている1.25.xイメージで確認できたものを
そのまま使っています。

先のポストで触れた、stream周りでお世話になったrealipモジュールも指定されていますね。

# requirements for the build
sudo apt install gcc openssl libpcre3 libpcre3-dev

# add nginx user and group
# any available id number is fine
sudo groupadd --system --gid 244 nginx
sudo useradd --system --gid nginx --no-create-home --home /nonexistent --comment "nginx user" --shell /bin/false --uid 244 nginx

# configure using the same options used in 1.25 docker image
# with a little mod on numbers here and there
auto/configure --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-http_v3_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-opt='-g -O2 -ffile-prefix-map=/data/builder/debuild/nginx-1.25.3/debian/debuild-base/nginx-1.25.3=. -fstack-protector-strong -Wformat -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -fPIC' --with-ld-opt='-Wl,-z,relro -Wl,-z,now -Wl,--as-needed -pie'

# build and install
sudo make  # to build
sudo make install  # to install

# prepare temp directories specified in configure options
sudo mkdir /var/cache/nginx
cd /var/cache/nginx
sudo mkdir client_temp proxy_temp fastcgi_temp uwsgi_temp scgi_temp

# check the version, test, and run/stop
sudo nginx -V
sudo nginx -t
sudo nginx  # to run
sudo nginx -s stop

ビルド・実行結果

結果がこちらです。

$ nginx -V
nginx version: nginx/1.25.3
built by gcc 12.2.0 (Debian 12.2.0-14)
built with OpenSSL 3.0.11 19 Sep 2023
TLS SNI support enabled
configure arguments: --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-http_v3_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-opt='-g -O2 -ffile-prefix-map=/data/builder/debuild/nginx-1.25.1/debian/debuild-base/nginx-1.25.1=. -fstack-protector-strong -Wformat -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -fPIC' --with-ld-opt='-Wl,-z,relro -Wl,-z,now -Wl,--as-needed -pie'

$ curl -v localhost
*   Trying 127.0.0.1:80...
* Connected to localhost (127.0.0.1) port 80 (#0)
> GET / HTTP/1.1
> Host: localhost
> User-Agent: curl/7.88.1
> Accept: */*
>
< HTTP/1.1 200 OK
< Server: nginx/1.25.3
< Date: Thu, 15 Feb 2024 08:17:26 GMT
< Content-Type: text/html
< Content-Length: 615
< Last-Modified: Thu, 15 Feb 2024 08:15:32 GMT
< Connection: keep-alive
< ETag: "65cdc824-267"
< Accept-Ranges: bytes
<
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>
* Connection #0 to host localhost left intact

おわりに

一旦以上です!

MercurialというVCSは初めて触りました。なんとかやりたいことができて良かったです。
ビルドはできたのであとはおうちのGitLab CI/CDとHarborレジストリを利用して
DockerでもKubernetesでも使えるようコンテナイメージもビルドしたいと思います。

今後どのように育っていくのか、nginx, freenginx両方とも触っていこうと思います。