arongsoft 发表于 2018-5-5 14:52:33

ubuntu 12.04 nginx+ mono

  mono是.NET在Linux下的的开源实现, 主要的运行方式分为两种
  

  apache + mod_mono
  nginx + fastcgi (mono)
  

  考虑到nginx性能更好,这里讲述第二种实现方法
  

  因为Ubuntu 提供了完整的mono软件包支持,因此本文尝试在Ubuntu 12.04下搭建
  

  安装mono和fastcgi-server

[*]  apt-get install mono-runtime mono-fastcgi-server4 mono-fastcgi-server2
  

  与jdk类似,查看mono版本

[*]  root@ubuntu:~# mono --version
[*]  Mono JIT compiler version 2.10.8.1 (Debian 2.10.8.1-1ubuntu2.2)
[*]  Copyright (C) 2002-2011 Novell, Inc, Xamarin, Inc and Contributors. www.mono-project.com
[*]  TLS:         __thread
[*]  SIGSEGV:       altstack
[*]  Notifications: epoll
[*]  Architecture:amd64
[*]  Disabled:      none
[*]  Misc:          softdebug
[*]  LLVM:          supported, not enabled.
[*]  GC:            Included Boehm (with typed GC and Parallel Mark)
  

  安装nginx

[*]  apt-get install nginx
  

  让mono以fastcgi方式在后台跑起来,监听本地9000端口

[*]  root@ubuntu:~# fastcgi-mono-server2 /applications=www.abc.com:/:/usr/share/nginx/www /socket=tcp:127.0.0.1:9000&
[*] 4428
[*]  root@ubuntu:~# fastcgi-mono-server4 /applications=www.abc.com:/:/usr/share/nginx/www /socket=tcp:127.0.0.1:9001&
[*] 4447
  可以根据需要,写一个开机运行脚本,譬如在rc.local 加入上面两行命令让其开机启动。
  

  示例如下

[*]  #!/usr/bin/env bash
[*]  ### 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.abc.com:/:/var/www/"
[*]  case "$1" in
[*]  start)
[*]  if [ -z "${MONOSERVER_PID}" ]; then
[*]  echo "starting mono server"
[*]  ${MONOSERVER} /applications=${WEBAPPS} /socket=tcp:127.0.0.1:9000 &
[*]  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
[*]  ;;
[*]  esac
[*]  exit 0
  

  查看mono进程和本地端口

[*]  root@ubuntu:~# ps -elf |grep mono
[*]  0 S root      44281531080   0 - 76813 futex_ 18:59 pts/0    00:00:00 /usr/bin/mono /usr/lib/mono/2.0/fastcgi-mono-server2.exe /applications=www.abc.com:/:/usr/share/nginx/www /socket=tcp:127.0.0.1:9000
[*]  0 S root      44471531080   0 - 76993 futex_ 19:19 pts/0    00:00:00 /usr/bin/mono /usr/lib/mono/4.0/fastcgi-mono-server4.exe /applications=www.abc.com:/:/usr/share/nginx/www /socket=tcp:127.0.0.1:9001
[*]  0 S root      44541531080   0 -2346 pipe_w 19:19 pts/0    00:00:00 grep --color=auto mono
[*]  root@ubuntu:~# ss -ln
[*]  State      Recv-Q Send-Q                                                    Local Address:Port                                                      Peer Address:Port
[*]  LISTEN   0      128                                                         127.0.0.1:9001                                                               *:*
[*]  LISTEN   0      128                                                                  :::22                                                                  :::*
[*]  LISTEN   0      128                                                                   *:22                                                                   *:*
[*]  LISTEN   0      128                                                         127.0.0.1:9000                                                               *:*
[*]  root@ubuntu:~#
  

  配置nginx, (注意区分大小写)
  


[*]  server {
[*]  listen   80 ;
[*]  server_namewww.abc.com ;
[*]  access_log   /var/log/nginx/www.abc.com.access.log ;
[*]  location ~*/ {
[*]  root /var/www/ ;
[*]  index index.html index.htm default.aspx Default.aspx ;
[*]  fastcgi_pass 127.0.0.1:9000;
[*]  include fastcgi_params;
[*]  }
[*]  }
  在文件/etc/nginx/fastcgi_params中加入两行

[*]  fastcgi_paramPATH_INFO          "";
[*]  fastcgi_paramSCRIPT_FILENAME    $document_root$fastcgi_script_name;
  

  开启nginx

[*]  service nginx start
  

  找一个asp 的示例helloworld.aspx

[*]  <%
[*]  HelloWorldLabel.Text = &quot;Hello, world!&quot;;
[*]  %>
[*]  <!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;>
[*]  <htmlxmlns=&quot;http://www.w3.org/1999/xhtml&quot;>
[*]  <headrunat=&quot;server&quot;>
[*]  <title>Untitled Page</title>
[*]  </head>
[*]  <body>
[*]  <formid=&quot;form1&quot;runat=&quot;server&quot;>
[*]  <div>
[*]  <asp:Labelrunat=&quot;server&quot;id=&quot;HelloWorldLabel&quot;></asp:Label>
[*]  </div>
[*]  </form>
[*]  </body>
[*]  </html>
  

  

  

  

  本文只是尝试mono在linux下的具体实现方法,点到为止,
  由于不是生产环境,性能和稳定性没有深入测试。
  
页: [1]
查看完整版本: ubuntu 12.04 nginx+ mono