Mod_Mono is an Apache 1.3/2.0/2.2/2.4 module that provides ASP.NET support for the web's favorite server, Apache (http://httpd.apache.org).

Configuring Mod_Mono on Ubuntu

  • The mod_mono packages and configuration on Ubuntu vary depending on the version of Ubuntu.
  • This guide assumes that you have read the official Ubuntu Apache 2 Documentation and understand how Ubuntu manages modules and virtual hosts.

  • Warning: installing mod_mono may uninstall the PHP Apache module. Apparently they cannot co-exist.

ASP.NET 2.0 AutoHosting on Ubuntu 12.04 Precise Pangolin

  • These instructions are for an AutoHosting configuration

  • Refer to the Official Mod_Mono Docs for a more detailed setup.

  • If Apache is running it must be stopped before installing mod_mono: /etc/init.d/apache2 stop
  • Install the mod_mono packages: libapache2-mod-mono mono-apache-server2
  • Install the mono development packages: mono-devel
  • Enable the Apache module: a2enmod mod_mono_auto
  • Restart Apache: /etc/init.d/apache2 restart To test your setup, you can create a test page with the following content anywhere that Apache can see (i.e. /var/www/test.aspx):

<%@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
  <head>
    <title>ASP Test Page</title>
  </head>
  <body>
        <form id="form1" runat="server">
          <asp:label id="lbl1" runat="server">ASP Test Page</asp:label>
        </form>
  </body>
</html>

Non-AutoHosting Instructions

1) Install packages

To begin, you can easily install mod_mono using apt: (universe package sources must be active in /etc/apt/sources.list, see for example here)

sudo apt-get install libapache2-mod-mono

Optionally, if you would like to use ASP.NET 2.0, you need to install an additional package:

sudo apt-get install mono-apache-server2

2) Activate the module:

sudo a2enmod mod_mono

3) Select the ASP.NET version

The /etc/apache2/mods-available/mod_mono.conf file controls which version of ASP.NET is to be used. If you would like to use 2.0, and you installed the package as explained above, open this file in a text editor and follow the directions.

4) Configure your web applications

Applications are defined in .webapp files, located in either /etc/mono-server/ or /etc/mono-server2/ depending on which version of ASP.NET you are using.

The format of these files are explained in the xsp man page.

man xsp

5) Restart apache

Restart apache so the new configuration is loaded.

sudo /etc/init.d/apache2 restart

Example Configuration

Say we have an apache vhost example.com and we would like the URL http://example.com/moo to be an ASP.net application.

First we declare the apache site configuration in /etc/apache2/sites-available/example.com and enable it. As mentioned earlier, this is explained in the official Ubuntu documentation.

<VirtualHost 1.2.3.4:80>
        ServerName example.com

        DocumentRoot /var/www/example.com/

        <Directory /var/www/example.com/>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride All
                Order allow,deny
                Allow from all
                SetHandler mono
                DirectoryIndex index.aspx index.html
        </Directory>
</VirtualHost>

With this configuration, our asp.net application (the aspx files, etc.) would be placed in /var/www/example.com/moo/.

Next, you would create a corresponding webapp file. Let's pretend that we are using ASP.NET 1.x, so we are goint to create /etc/mono-server/example.com-moo.webapp:

<apps>
        <web-application>
                <name>MOO!!</name>
                <vpath>/moo</vpath>
                <path>/var/www/example.com/moo</path>
                <vhost>example.com</vhost>
        </web-application>
</apps>

Reload apache, and you should be done!

Additional Information

Troubleshooting

Standard output has not been redirected or process has not been started

After configuring mod_mono_auto, starting up with the test.aspx page gives the following error:

Standard output has not been redirected or process has not been started.

Description: HTTP 500. Error processing request.

Stack Trace:

System.InvalidOperationException: Standard output has not been redirected or process has not been started.
  at System.Diagnostics.Process.CancelErrorRead () [0x00000] 
  at (wrapper remoting-invoke-with-check) System.Diagnostics.Process:CancelErrorRead ()
  at Mono.CSharp.CSharpCodeCompiler.CompileFromFileBatch (System.CodeDom.Compiler.CompilerParameters options, System.String[] fileNames) [0x00000] 
  at Mono.CSharp.CSharpCodeCompiler.CompileAssemblyFromFileBatch (System.CodeDom.Compiler.CompilerParameters options, System.String[] fileNames) [0x00000] 
  at System.CodeDom.Compiler.CodeDomProvider.CompileAssemblyFromFile (System.CodeDom.Compiler.CompilerParameters options, System.String[] fileNames) [0x00000] 
  at System.Web.Compilation.AssemblyBuilder.BuildAssembly (System.Web.VirtualPath virtualPath, System.CodeDom.Compiler.CompilerParameters options) [0x00000] 
  at System.Web.Compilation.AssemblyBuilder.BuildAssembly (System.Web.VirtualPath virtualPath) [0x00000] 
  at System.Web.Compilation.BuildManager.BuildAssembly (System.Web.VirtualPath virtualPath) [0x00000] 
  at System.Web.Compilation.BuildManager.GetCompiledType (System.String virtualPath) [0x00000] 
  at System.Web.Compilation.BuildManager.CreateInstanceFromVirtualPath (System.String virtualPath, System.Type requiredBaseType) [0x00000] 
  at System.Web.UI.PageParser.GetCompiledPageInstance (System.String virtualPath, System.String inputFile, System.Web.HttpContext context) [0x00000] 
  at System.Web.UI.PageHandlerFactory.GetHandler (System.Web.HttpContext context, System.String requestType, System.String url, System.String path) [0x00000] 
  at System.Web.HttpApplication.GetHandler (System.Web.HttpContext context, System.String url, Boolean ignoreContextHandler) [0x00000] 
  at System.Web.HttpApplication.GetHandler (System.Web.HttpContext context, System.String url) [0x00000] 
  at System.Web.HttpApplication+<Pipeline>c__Iterator2.MoveNext () [0x00000] 

The reason may be the lack of gmcs in the path (the Mono C# compiler). With the installation process above you may only get gmcs2. The way to check is to see if you have either one:

 $ which gmcs

If this does not return a location, then you don't have gmcs. Try

 $ which gmcs2

The best way to resolve the lack of gmcs is to install the mono-devel packages:

 $ sudo apt-get install mono-devel

Restart apache, and navigate back to test.aspx. You should now see the "ASP Test Page" label on the page.

ModMono (last edited 2014-01-23 14:03:28 by peter-x8oxk)