Close Menu
  • Home
  • Questions
Facebook X (Twitter) Instagram
LinuxTutorials.netLinuxTutorials.net
  • Home
  • Debian
  • Ubuntu
  • CentOS
    • Commands
  • Questions
LinuxTutorials.netLinuxTutorials.net
Ubuntu

Run ASP.NET Apps with Apache and ModMono on Ubuntu

May 12, 2019Updated:August 14, 2022No Comments
install apache mod_mono

ASP.NET is an Open Source server-side web application framework developed by Microsoft designed for programmers to create dynamic web pages.

While ASP.NET framework is widely used in conjunction with Windows IIS Web Server, an alternative for deploying ASP.NET applications exists on Linux distributions too and is represented by the Mono Project along with its mod_mono module specially designed to handle ASP.NET pages with Apache Web server.

This tutorial will guide you on how you can install ASP.NET framework with Apache and ModMono module on Ubuntu Server Edition and create a simple ASP.NET application to test the server environment.

STEP ONE – Install Apache Mod_Mono Module

1. In order for Apache to handle ASP.NET applications on Ubuntu, first you need to install the ModMono Apache libraries and modules by executing the following command:

sudo apt-get install libapache2-mod-mono

 

install apache mod_mono

install apache mod_mono

Usually ModMono comes with dozens of libraries and pre-compliled packages for Ubuntu, more than 200 packages, so you need to assure that your system has enough disk space on root partiton before accepting and continuing with the installation.

 

2. After the installation of Apache ModMono has finished, issue the following commands in order to activate ModMono module (usually the module is activated during the installation).

sudo a2enmod mod_mono_auto mod_mono
sudo service apache2 stop
sudo service apache2 start

 

STEP TWO – Change ASP.NET mod-nono-server Configuration File

The Mod-Mono-Server is an external program that processes and handles all the ASP.NET applications requests sent by Apache, using a Mono virtual machine which establishes the connection between Apache and Mod-Mono-Server using a TCP or a Unix socket.
 
3. First we need to find out what version of the Mod-Mono-Server is actually running on our system and where is located. Usually, Ubuntu 12.04.2 comes with the mod-mono-server4.exe version but we still need to find out the mod-mono-server4.exe binary location through the filesystem. So, issue the following command in order to locate mod-mono-server4.exe system path:

sudo find / -name mod-mono-server4.exe

 

locate mod-mono-server4 system path

locate mod-mono-server4 system path

 

4. After we have located mod-mono-server4.exe system path on /usr/lib/mono/4.5/ directory, we need to keep in mind this system path and further locate the mod-mono-server4 executable binary command path by running the below command:

whereis  mod-mono-server4.exe

 

locate mod-mono-server4 executable command

locate mod-mono-server4 executable command

 

Form the output of whereis command we now know that the executable command for mod-mono-server4 is /usr/bin/mod-mono-server4 so we can now test the Mono-Server:

/usr/bin/mod-mono-server4

 

test mod-mono-server4

test mod-mono-server4

 

5. Now that we know mod-mono-server4 server system path and Mono libraries filesystem location, we need to edit the Mono-Server Applications configuration file from /etc/mono-server4/ directory by issuing the following command to open the mono-server4-hosts.conf file for editing:
 

sudo nano /etc/mono-server4/mono-server4-hosts.conf

 

Here change the following statements variables to match mod-mono-server4 values for server and libraries paths found previously:

MonoServerPath default /usr/bin/mod-mono-server4
MonoPath default /usr/lib/mono/4.5:/usr/lib

 

mono-server4 configuration file

mono-server4 configuration file

 

An excerpt on how the entire file should look like is presented below:

<IfModule mod_mono.c>
  MonoUnixSocket default /tmp/.mod_mono_server4
  MonoServerPath default /usr/bin/mod-mono-server4
  AddType application/x-asp-net .aspx .ashx .asmx .ascx .asax .config .ascx
  MonoApplicationsConfigDir default /etc/mono-server4
  MonoPath default /usr/lib/mono/4.5:/usr/lib
</IfModule>

 

 

STEP THREE – Create an Apache Vhost to Handle an ASP.NET Application

6. Now we are going to create a Virtual Host for Apache Web Server that will handle our ASP.NET application based on a domain name. Before creating the Virtual Host, first assure that your DNS resolution is correctly configured through a DNS server or local hosts file in order for Apache to serve all the requests based on domain names. On this guide the domain name used for Apache Virtual Host to process ASP.NET webpages is asp.lan.

So, create an Apache Virtual Host configuration file named asp.lan.conf on /etc/apache2/sites-available/ directory with the following configurations:

sudo nano /etc/apache2/sites-available/asp.lan.conf

 

asp.lan.conf file excerpt

<VirtualHost *:80>
        ServerName asp.lan

        DocumentRoot /var/www/html/asp.lan

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

    ErrorLog ${APACHE_LOG_DIR}/asp.lan-error.log
    CustomLog ${APACHE_LOG_DIR}/asp.lan-access.log combined

</VirtualHost>

 

asp.net apache vhost

asp.net apache vhost

 

Here replace ServerName, DocumentRoot, Directory and Logs directives to match your configurations and paths accordingly. In case you have changed the DocumentRoot location issue a mkdir command to create the new custom webroot directory which will host your ASP.NET web files.

sudo mkdir -p /var/www/html/asp.lan

 

7. Next, we need to create an ASP.NET .webapp configuration file for Mono-Server that will actually process and handle the ASP application. This configuration file must be created on /etc/mono-server4/ directory. Execute the following command to create the webapp file for our ASP.NET Apache Virtual Host with the following configurations:

sudo nano /etc/mono-server4/asp.net.webapp

 

asp.net.webapp file excerpt

<apps>
        <web-application>
                <name>asp.lan</name>
                <vpath>/</vpath>
                <path>/var/www/html/asp.lan</path>
              <vhost>asp.lan</vhost>
        </web-application>
</apps>

 

asp.net webapp file

asp.net webapp file

 

Here, use the name of your domain for the webapp <name> and <vhost> directives and change the <path> directive to match the location of your ASP.NET web files (usually the same path as found on Apache DocumentRoot directive).

 

STEP FOUR – Create an ASP.NET Test Application

8. To test if the server is actually working, first create a web index file with an .aspx extension on your domain webroot as in the following example:

sudo nano /var/www/html/asp.lan/index.aspx

 

index.aspx file excerpt:

<%@ 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 Application test at asp.lan</title>
  </head>
  <body>
        <form id="form1" runat="server">
          <asp:label id="lbl1" runat="server">ASP Application test at asp.lan server</asp:label>
        </form>
		
  </body>
</html>

 

ASP.NET index file

ASP.NET index file

 

9. Next, activate Apache asp.lan Virtual Host and restart the httpd daemon to apply changes by issuing the following commands:

 

sudo a2ensite asp.lan.conf
sudo service apache2 stop
sudo service apache2 start

 

Don’t use the service apache2 restart command with ASP.NET module activated to restart the server because Apache stop command usually takes some extra time while closing all the mod_mono module files.

 

10. Finally, to view your ASP.NET application, just visit your domain from a browser as presented in the screenshot below:

http://asp.lan

ASP.NET application

ASP.NET application

 

11. To create an application that will parse and show all your ASP.NET server variables, create the following var.aspx web file on your domain webroot:

sudo nano /var/www/html/asp.lan/var.aspx

 

var.aspx file excerpt:

<%@ 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>My ASP Server Variables</title>
  </head>
  <body>
        <form id="form1" runat="server">
          <asp:label id="lbl1" runat="server"><strong> My ASP Server Variables: </strong> </asp:label>
<%
foreach (string i in Request.ServerVariables)
{
  Response.Write("<pre>" + i + " = <strong>" + Request[i] + "</strong>");
}
%>
        </form>
  </body>
</html>

 

12. Then navigate to the var.aspx web resource to view the final result: http://asp.lan/var.aspx
 

get ASP.NET server environment variables

get ASP.NET server environment variables

 

get ASP.NET server environment variables

ASP.NET server environment variables

 

13. Another web application example that parses only your remote IP Address:

sudo nano /var/www/html/asp.lan/myip.aspx

 

myip.aspx file excerpt:

<%@ 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>IP ADDRESS for  asp.lan</title>
  </head>
  <body>
        <form id="form1" runat="server">
          <asp:label id="lbl1" runat="server">My Remote IP Address</asp:label>
<% Response.Write( " = <strong>" + Request.ServerVariables["remote_addr"] + "</strong>"); %>
        </form>
  </body>
</html>

 

.aspx file get remote IP Address

.aspx file get remote IP Address

 

STEP FIVE – Redirect Apache Default Host to ASP.NET Application

14. So far, only the valid requests matching the asp.lan domain name are directed to the ASP.NET application. If you need to redirect all the requests based on your server IP Address (Apache Default Host) or other domain or subdomain requests pointing at your server IP Address with no valid Virtual Hosts, open Apache main Virtual Host configuration file and add the following statements after the DocumentRoot directive as illustrated on the below screenshot:
 

sudo nano /etc/apache2/sites-available/000-default.conf

 
000-default.conf file configurations excerpt :

<Directory "/var/www/html/asp.lan">
	Options Indexes FollowSymLinks MultiViews
	AllowOverride All
	Order allow,deny
        Allow from all
          SetHandler mono
          DirectoryIndex index.aspx index.html
	Require all granted
</Directory>

 

apache vhost default conf file

apache vhost default conf file

 

15. To reflect changes, stop and start Apache daemon, then open a browser and navigate at your server’s IP Address and fetch a web resource aspx file, such as the previously created var.aspx application.

 

sudo service apache2 stop
sudo service apache2 start

 

http://192.168.1.211/var.aspx

 

var.aspx ASP web file

var.aspx ASP web file

 

15. To redirect all requests based on your default virtual host to the domain name, just put the following redirect rules on the same file as edited above, enable the rewrite Apache module and restart Apache server to reflect changes:

 

RewriteEngine on
RewriteCond %{HTTP_HOST} ^192.168.1.211
RewriteRule ^(.*)$ http://asp.lan/$1 [R=permanent,L]

 

redirect to asp.lan domain

redirect to asp.lan domain

 

sudo a2enmod rewrite
sudo service apache2 stop
sudo service apache2 start

 

Now, every time a request comes at your Apache server, either with the asp.lan domain header or with server IP Address, Apache will redirect all to your ASP.NET application.

 

16. To get the ASP.NET installed version just append an resource arbitrary string after your domain name in order to generate an server error as in the below example:

http://asp.lan/a

 

get ASP.NET version

get ASP.NET version

Aache ASP.NET ModMono Ubuntu Server Virtual Hosts
Share. Facebook Twitter Tumblr Email Telegram
Previous ArticlePassword Protect Web Directories using Apache Authentication
Next Article Apache Web Server Security Tips for Debian-based Systems

Related Posts

Ubuntu

Download and Install Packet Tracer 8.2.2 on Ubuntu (Linux)

May 31, 2024
Ubuntu

How to Install PHPMyAdmin latest version 5.2.0 on Ubuntu 22.04 (LEMP Stack)

September 13, 2022
Ubuntu

Create New User with sudo Privileges on Ubuntu 22.04/Debian

September 12, 2022
Subscribe
Notify of
guest

guest

0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments

Ubuntu Server 24.04 Image for VirtualBox (Download & Import)

March 14, 2025

Download and Install Packet Tracer 8.2.2 on Ubuntu (Linux)

May 31, 2024

How to Install PHPMyAdmin latest version 5.2.0 on Ubuntu 22.04 (LEMP Stack)

September 13, 2022

Create New User with sudo Privileges on Ubuntu 22.04/Debian

September 12, 2022
Facebook X (Twitter) Instagram Pinterest
  • Questions
© 2025 LinuxTutorials.net

Type above and press Enter to search. Press Esc to cancel.

wpDiscuz