[Mono-dev] Unix-sockets & Mono.WebServer.FastCgi

SirNoSkill quandary82 at hailmail.net
Tue Feb 18 06:36:38 UTC 2014


Hi,

I downloaded the sources for XSP from git. 
And it seems Mono.WebServer.FastCgi has been under quite a bit of
change. 
First I wanted to thank the person(s) responsible for it, seems like the
fastcgi server is finally stable, or at least stable enough that it
hasn't crashed once in the last 2 weeks, including a performance load
test. 
Keep up the good work.

One thing though: 
It worked fine with TCP, but when I tried with unix sockets, I got this
error:
Error parsing permissions "". Use octal."

In file
/xsp/src/Mono.WebServer.FastCgi/main.cs
in function public static bool TryCreateUnixSocket (string path, out
Socket socket, string perm = null)

there is this code:
if (perm == null) {
    socket = new UnixSocket (realPath);
    Logger.Write (LogLevel.Debug, "Listening on file {0} with default
    permissions", realPath);
} else {
    ushort uperm;
    if (!UInt16.TryParse (perm, out uperm)) {
        Logger.Write (LogLevel.Error, "Error parsing permissions
        \"{0}\". Use octal.", perm);
        return false;
    }


that should probably be 
if(string.IsNullOrEmpty(perm)){ 
because UInt16.TryParse will fail if perm is string.Empty.

If I fix this, fastcgi-server starts, but I get a HTTP 502. 
Since the config works fine if I use TCP, I guess this is a
fastcgi-server bug.
Just thought I let you know.

It's unlikely it's a permission bug, since I let fastcgi-mono-server4
run as root.
Just in case, here my configuration settings:

This is my fastcgi-start script 

#!/bin/sh

### BEGIN INIT INFO
# Provides:          monoserve.sh
# Required-Start:    $local_fs $syslog $remote_fs
# Required-Stop:     $local_fs $syslog $remote_fs
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start fastcgi mono server with hosts
### END INIT INFO

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/usr/bin/mono
NAME=monoserver
DESC=monoserver

MONOSERVER=$(which fastcgi-mono-server4)
MONOSERVER_PID=$(ps auxf | grep fastcgi-mono-server4.exe | grep -v grep
| awk '{print $2}')

WEBAPPS="www.example.com:/:/root/VS2010/SqlWebAdmin/SqlWebAdmin/,example.com:/:/root/VS2010/SqlWebAdmin/SqlWebAdmin/"
#WEBAPPS="www.domain1.xyz:/:/var/www/domain1.xyz/,www.domain2.xyz:/:/var/www/domain2.xyz/"

case "$1" in
        start)
                if [ -z "${MONOSERVER_PID}" ]; then
                        echo "starting mono server"

                        
                        # ${MONOSERVER} /applications=${WEBAPPS}
                        /socket=unix:/tmp/fastcgi.socket &
                        # ${MONOSERVER} /applications=${WEBAPPS}
                        /socket=tcp:127.0.0.1:9000 &
                        ${MONOSERVER} /applications=${WEBAPPS}
                        /socket=unix:/var/run/mono3-fcgi.sock &
                        echo "mono server started"
                else
                        echo ${WEBAPPS}
                        echo "mono server is running"
                fi
        ;;
        stop)
                if [ -n "${MONOSERVER_PID}" ]; then
                        kill ${MONOSERVER_PID}
                        echo "mono server stopped"
                else
                        echo "mono server is not running"
                fi
        ;;
        *) echo "You have provided no or an invalid command line
        argument."
        ;;
esac

exit 0



and this the nginx configuration 


##
# You should look at the following URL's in order to grasp a solid
understanding
# of Nginx configuration files in order to fully unleash the power of
Nginx.
# http://wiki.nginx.org/Pitfalls
# http://wiki.nginx.org/QuickStart
# http://wiki.nginx.org/Configuration
#
# Generally, you will want to move this file somewhere, and start with a
clean
# file but keep this around for reference. Or just disable in
sites-enabled.
#
# Please see /usr/share/doc/nginx-doc/examples/ for more detailed
examples.
##


 server {
         listen   80;
         server_name www.example.com example.com;
         access_log   /var/log/nginx/your.domain1.xyz.access.log;
 
         location / {
                 root /root/VS2010/SqlWebAdmin/SqlWebAdmin;
                 #index index.html index.htm default.aspx Default.aspx;
                 #fastcgi_index Default.aspx;
                 #fastcgi_pass 127.0.0.1:9000;
                 fastcgi_pass unix:/var/run/mono3-fcgi.sock;
                 include /etc/nginx/fastcgi_params;
         }
 



	location /doc {
		root /usr/share;
		autoindex on;
		allow 127.0.0.1;
		deny all;
	}

	location /shared_images {
		root /usr/share;
		autoindex off;
	}

	error_page 404 /CustomErrors/404.htm;

	# redirect server error pages to the static page /50x.html
	#
	#error_page 500 502 503 504 /50x.html;
	#location = /50x.html {
	#       root /usr/share/nginx/www;
	#}

}


/etc/hosts entries:
127.0.0.1       example.com
127.0.0.1 www.example.com


Kind regards

NoSkillz

-- 
http://www.fastmail.fm - IMAP accessible web-mail



More information about the Mono-devel-list mailing list