How To Install HyperFastCgi On FreeBSD 12

Prerequisites FreeBSD 12. Mono. Mono-basic (optional). Libgdiplus. Nginx. Step 1 — Prepare Your Server Update Ports portsnap fetch update Install Git cd /usr/ports/devel/git/...

Prerequisites

FreeBSD 12.
Mono.
Mono-basic (optional).
Libgdiplus.
Nginx.

Step 1 — Prepare Your Server

Update Ports

portsnap fetch update

Install Git

cd /usr/ports/devel/git/
make install

Install GCC

Clang/LLVM is the system compiler on the several platforms in FreeBSD 12 and later, and GCC is not installed by default.

cd /usr/ports/lang/gcc8/
make config install clean

Add GCC alias

cd /usr/local/bin/gcc
ls - gcc*
gcc-ar8*     gcc-nm8*     gcc-ranlib8* gcc8*        
ln -s gcc8 gcc

Install Automake

cd /usr/ports/devel/automake/
make config install clean

Install libtool

cd /usr/ports/devel/libtool/
make install clean

Install libevent

cd /usr/ports/devel/libevent/
make config install clean

 

Step 2 — Install HyperFastCgi

git clone https://github.com/xplicit/HyperFastCgi.git
cd ./HyperFastCgi/
./autogen.sh --prefix=/usr/local
gmake
gmake install

Test HyperFastCgi

hyperfastcgi4 --version
HyperFastCgi.exe 0.4.4.0
(c) Sergey Zhukov

 

Step 3 — Configure HyperFastCgi

Move the simple configuration file ./HyperFastCgi/samples/server.config to /usr/local/etc/hyperfastcgi4/server.config and edit:

<configuration>
	<server type="HyperFastCgi.ApplicationServers.SimpleApplicationServer">
		<!-- Host factory defines how host will be created. SystemWebHostFactory creates host in AppDomain in standard ASP.NET way --> 
		<host-factory>HyperFastCgi.HostFactories.SystemWebHostFactory</host-factory>
		<!-- <threads> creates threads at startup. Value "0" means default value --> 
		<threads min-worker="40" max-worker="0" min-io="4" max-io="0" />
		<!--- Sets the application host root directory -->
		<!-- <root-dir>/usr/local/www/nginx</root-dir> -->
	</server>
	<listener type="HyperFastCgi.Listeners.NativeListener">
		<apphost-transport type="HyperFastCgi.Transports.NativeTransport">
			<multithreading>Single</multithreading>
		</apphost-transport>
	    <protocol>InterNetwork</protocol>
	    <address>127.0.0.1</address>
	    <port>9000</port>
	</listener>
    <apphost type="HyperFastCgi.AppHosts.AspNet.AspNetApplicationHost">
		<log level="Debug" write-to-console="true" />
		<add-trailing-slash>false</add-trailing-slash>
    </apphost>
    <web-applications>
    	<web-application>
    		<name>ApplicationServer</name>
    		<vhost>a1.domain.com</vhost>
    		<vport>443</vport>
    		<vpath>/</vpath>
    		<path>/usr/local/www/nginx/a1.domain.com</path>
    	</web-application>
    </web-applications>
</configuration>

Step 4 — Configure Nginx to Use HyperFastCgi

upstream fastcgi_backend {
  #server unix:/tmp/my-web-app.socket;
  server 127.0.0.1:9000;
  keepalive 32;
}

# HTTP server
server {
        listen   80;
        listen [::]:80;

        server_name  a1.domain.com www.a1.domain.com;
        access_log   /var/log/nginx/a1.domain.com.access.log;

        # Redirect to https
        rewrite ^ https://a1.domain.com$request_uri? permanent; #301-redirect
}


# HTTPS server
server {

        listen 443 ssl spdy;

        server_name  a1.domain.com www.a1.domain.com;
        access_log   /var/log/nginx/a1.domain.com.access.log;

	location / {
	    root /usr/local/www/nginx/a1.domain.com/;
	    index index.aspx;
	    fastcgi_index index.aspx;
	    fastcgi_keep_conn on;
	    fastcgi_pass fastcgi_backend;
	    include /usr/local/etc/nginx/fastcgi_params;
	}

	… (ssl options)

}

Step 5 — Run HyperFastCgi

Command line

hyperfastcgi4 /config=/path/to/server.config /loglevels=Standard /printlog

More details here.

System startup script (/usr/local/etc/rc.d)

#!/bin/sh

# PROVIDE: hyperfastcgi
# REQUIRE: LOGIN nginx
# KEYWORD: shutdown

. /etc/rc.subr

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/usr/local/bin/mono
name="hyperfastcgi4"
rcvar="${name}_enable"
command="/usr/local/bin/hyperfastcgi4"
procname="/usr/local/bin/mono"
config="/usr/local/etc/hyperfastcgi4/server.config"
logfile="/var/log/hyperfastcgi4.log"
#Specifies what log levels to log. It can be any of the following values, or multiple if comma separated: Debug, Notice, Warning, Error, Standard (Notice,Warning,Error), All (Debug,Standard)
loglevels=Standard
command_args="/config=${config} /logfile=${logfile} /loglevels=${loglevels} >> $logfile &"

load_rc_config $name
run_rc_command "$1"

Add the following line in the /etc/rc.conf:

hyperfastcgi4_enable="YES"

Appendix 1 Uninstall HyperFastCgi

cd ./HyperFastCgi/
gmake uninstall