These are notes I made for getting an application written for Asp.Net Mvc (It was probably Mvc 3-ish) to run on a Centos server.
Note that some of the issues/solutions may vary across Linux variants. The interface Nginx-Mono is FastCGI, which they both support. The Mono webserver is xsp4.
Of course, running cross platform is all much easier these days if you use .Net Core and Kestrel 🙂 And een for Net Framework running on Mono, the work done since Microsoft bought Xamarin has been really helpful for e.g. Mvc compatibility.
The Reading List
- NGINX Docs : http://nginx.org/en/docs/
- NGINX FastCGI: http://nginx.org/en/docs/http/ngx_http_fastcgi_module.html
- Mono FastCGI
- http://yojimbo87.github.io/2010/03/14/mono-startup-script.html
- http://www.mono-project.com/docs/web/fastcgi/nginx/
The Checklist
Ensure nginx has read execute permissions on your application directory and all parent directories
nginx conf section for webapp
With the Asp.Net website listening on port 9001
#
server {
listen 8080;
server_name your-public-facing-nginx-server-name.com;
# use /smoketest/ to confirm that nginx is reading this config
# and has read/execute access to the
# /usr/share/nginx directories and files:
location /smoketest/ {
root /usr/share/nginx/smoketestredir;
index index.html;
}
# pass XSP to FastCGI server listening on 127.0.0.1:9001
# use a different port for each ASP.NET site you create
# (port 9000 is often taken by PHP on default webserver setups)
location / {
# replace fastcgi with this to confirm nginx read address
# to files in root /usr/share/nginx/mywebapplication;
fastcgi_pass 127.0.0.1:9001;
fastcgi_index index.html;
include /etc/nginx/fastcgi_params;
fastcgi_param PATH_INFO "";
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_buffers 16 16k;
fastcgi_buffer_size 32k;
}
}
Systemd Startup Script
vim /etc/systemd/system/fastcgi-mono-hdmbreas.service
[Unit]
Description=FastCgi-mono-server4 for Application
After=syslog.target
[Service]
Type=simple
ExecStart=/bin/fastcgi-mono-server4 --applications /:/usr/share/nginx/hdmbreas/hdm-fe-web --socket=tcp:127.0.0.1:9001
Restart=always
systemctl daemon-reload
systemctl start fastcgi-mono-app.service
systemctl status fastcgi-mono-app.service
systemctl status fastcgi-mono-app.service
Error: [error] 7216#0: *119 upstream sent too big header while reading response header
- Considering setting the buffer size
- Considering setting the busy buffer size
- e.g. nginx config: fastcgi_buffers 16 16k; fastcgi_buffer_size 32k;
Watching Errors
Watch errors with tail -F /var/log/nginx/error.log