Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Mono + apache2 = Service Temporarily Unavailable (503)

For a week now I've been trying to get my mono configuration running with apache. I must have tried virtually anything, shamefully I notice no changes, the problem remains the same.

When I try to connect to the server I get a 503 error: Service Temporarily Unavailable When I take a look at the errror log it appears empty and I'm quite sure it's not an permission problem.

About apache:

Package: apache2
Priority: optional
Section: httpd
Installed-Size: 36
Maintainer: Debian Apache Maintainers <[email protected]>
Architecture: amd64
Version: 2.2.16-6+squeeze4
Depends: apache2-mpm-worker (= 2.2.16-6+squeeze4) | apache2-mpm-prefork (= 2.2.16-6+squeeze4) | apache2-mpm-event (= 2.2.16-6+squeeze4) | apache2-mpm-itk (= 2.2.16-6+squeeze4), apache2.2-common (= 2.2.16-6+squeeze4)

About mono:

Package: mono-apache-server2
Priority: optional
Section: httpd
Installed-Size: 260
Maintainer: Debian Mono Group <[email protected]>
Architecture: all
Source: xsp
Version: 2.6.5-3
Replaces: mono-server
Depends: debconf (>= 0.5) | debconf-2.0, mono-runtime (>= 1.1.8.1), libc6 (>= 2.11) | libc6.1 (>= 2.11) | libc0.1 (>= 2.11), libmono-corlib2.0-cil (>= 2.6.3), libmono-posix2.0-cil (>= 2.4), libmono-security2.0-cil (>= 2.6.7), libmono-system-web2.0-cil (>= 1.9.1), libmono-system2.0-cil (>= 2.6.3), mono-xsp2-base (= 2.6.5-3), perl-modules

I am using the configuration below.

<VirtualHost *:80>
  ServerName myapp.example.com
  ServerAdmin [email protected]
  DirectoryIndex index.html index.aspx
  DocumentRoot /var/www/vhosts/example.com/subdomains/myapp/httpdocs/

  # MonoServerPath can be changed to specify which version of ASP.NET is hosted
  # mod-mono-server1 = ASP.NET 1.1 / mod-mono-server2 = ASP.NET 2.0
  # For SUSE Linux Enterprise Mono Extension, uncomment the line below:
  # MonoServerPath myapp.example.com "/opt/novell/mono/bin/mod-mono-server2"
  # For Mono on openSUSE, uncomment the line below instead:
  MonoServerPath myapp.example.com "/usr/bin/mod-mono-server2"
  #mod-mono-server2

  # To obtain line numbers in stack traces you need to do two things:
  # 1) Enable Debug code generation in your page by using the Debug="true"
  #    page directive, or by setting <compilation debug="true" /> in the
  #    application's Web.config
  # 2) Uncomment the MonoDebug true directive below to enable mod_mono debugging
  MonoDebug myapp.example.com true
  # The MONO_IOMAP environment variable can be configured to provide platform abstraction
  # for file access in Linux.  Valid values for MONO_IOMAP are:
  #    case
  #    drive
  #    all
  # Uncomment the line below to alter file access behavior for the configured application
  MonoSetEnv myapp.example.com MONO_IOMAP=all
  #
  # Additional environtment variables can be set for this server instance using
  # the MonoSetEnv directive.  MonoSetEnv takes a string of 'name=value' pairs
  # separated by semicolons.  For instance, to enable platform abstraction *and*
  # use Mono's old regular expression interpreter (which is slower, but has a
  # shorter setup time), uncomment the line below instead:
  # MonoSetEnv myapp.example.com MONO_IOMAP=all;MONO_OLD_RX=1
  MonoApplications myapp.example.com "/:/var/www/vhosts/example.com/subdomains/myapp/httpdocs/"

  <Location "/">
    Order allow,deny
    Allow from all
    MonoSetServerAlias myapp.example.com
    SetHandler mono
    SetOutputFilter DEFLATE
    SetEnvIfNoCase Request_URI "\.(?:gif|jpe?g|png)$" no-gzip dont-vary
  </Location>
  <IfModule mod_deflate.c>
    AddOutputFilterByType DEFLATE text/html text/plain text/xml text/javascript
  </IfModule>

  ErrorLog  /var/www/vhosts/example.com/subdomains/myapp/logs/error.log
  CustomLog /var/www/vhosts/example.com/subdomains/myapp/logs/access.log combined

</VirtualHost>

Can anyone help me out.

Thanks in advance, Tim

like image 951
Tim Hildegarde Herman Avatar asked Nov 01 '11 14:11

Tim Hildegarde Herman


2 Answers

Have you tried the mod_mono AutoConfiguration feature ? This is clearly the best approach with the Apache/Mono/ASP.NET stack. With it, you don't need anymore to define all Mono settings in your virtual host.

Here is my mod_mono.conf file (on Mac OS X 10.7.2 and Linux Ubuntu 11.04, this should be compatible with your Debian distro) :

<IfModule mono_module>
    AddType application/x-asp-net .config .cs .csproj .dll .resources .resx .sln .vb .vbproj
    AddType application/x-asp-net .asax .ascx .ashx .asmx .aspx .axd .browser .licx .master .rem .sitemap .skin .soap .webinfo

    MonoAutoApplication enabled
    MonoDebug false
    MonoServerPath "/usr/bin/mod-mono-server4"
    MonoSetEnv LANG=fr_FR.UTF-8
    MonoUnixSocket "/tmp/.mod_mono"

    <IfModule dir_module>
        DirectoryIndex Default.aspx
    </IfModule>

    <DirectoryMatch "/(bin|App_Code|App_Data|App_GlobalResources|App_LocalResources)/">
        Order deny,allow
        Deny from all
    </DirectoryMatch>

    <Location "/Mono">
        Order deny,allow
        Deny from all
        Allow from 127.0.0.1 ::1
        SetHandler mono-ctrl
    </Location>
</IfModule>

The most important directive is the "MonoAutoApplication" one. And here is a sample virtual host :

<VirtualHost *:80>
    ServerName www.monorules.fr
    DocumentRoot "/Library/WebServer/Documents/MonoRules"
</VirtualHost>

As you can see, the virtual host is reduced to its simplest expression. The settings defined in the mod_mono.conf file are shared by all the virtual hosts.
The only drawback of this solution is that it does not let you restart only one instance of an ASP.NET site (as in Microsoft IIS). If you use the Mono control panel (see "Location" section) to restart the process, all ASP.NET applications are restarted.

like image 127
CedX Avatar answered Sep 19 '22 13:09

CedX


If you have installed mod mono correctly and it is enabled in apache2 then the following configuration should work with your virtualhost.

<VirtualHost *:80>
 ServerName myapp.example.com
  ServerAdmin [email protected]
  DirectoryIndex index.html index.aspx
  DocumentRoot /var/www/vhosts/example.com/subdomains/myapp/httpdocs/

AddMonoApplications myapp.example.com "/:/var/www/vhosts/example.com/subdomains/myapp/httpdocs/"
MonoServerPath myapp.example.com "/usr/bin/mod-mono-server2"

<Directory /var/www/vhosts/example.com/subdomains/myapp/httpdocs/>
    MonoSetServerAlias myapp.example.com
    SetHandler mono
    AddHandler mod_mono .aspx .ascx .asax .ashx .config .cs .asmx
     <FilesMatch "\.(gif|jp?g|png|css|ico|xsl|wmv|zip)$">
        SetHandler None
    </FilesMatch>
    Options Indexes FollowSymLinks MultiViews
    AllowOverride All
    Order allow, deny
    Allow from all 
    DirectoryIndex index.aspx
</Directory>
</VirtualHost>
like image 34
startupsmith Avatar answered Sep 20 '22 13:09

startupsmith