そろそろサーバOSを Windows から Linux へ移行したいが、.Net のコードを PHP に書き換えるのは嫌だ!そんな諸兄に贈ります。
さらに、PHP と ASP.NET を同居させてしまおうという企画です。
ASP.NETサーバのインストール手順(CentOS)
リポジトリを追加します
$ sudo rpm --import "http://keyserver.ubuntu.com/pks/lookup?op=get&search=0x3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF"
$ sudo yum-config-manager --add-repo http://download.mono-project.com/repo/centos/Mono をインストールします
$ sudo yum install mono-complete
ASP.NETサーバをインストールします
$ sudo yum install xsp
たったのこれだけでインストールは終わり!簡単ですね。
きちんとインストールされているかは
$ fastcgi-mono-server4 --version
これでバージョンを確認できます。.NET 4.0 になっていますね。この fastcgi-mono-server4 が ASP.NET 4.0 サーバ(本番用)の本体なので、これを常時起動すればいいわけです。
ちなみに試験用サーバとして xsp4 もインストールされている筈です。
$ xsp4 --version
これで存在を確認できますね。
Nginx の設定
次に、Nginx から ASP.NETサーバ(Monoサーバ)をコールするように設定します。
前提として既に Nginx はインストール済みとします。FastCGIを経由させるので、設定ファイルを開き下記の location ブロックを追加します。
location ~ \.aspx$ {
fastcgi_pass 127.0.0.1:9001;
fastcgi_index default.aspx;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
はい、ここでのポイントは TCP 9001番ポートにしている部分です。大抵の場合 PHP の処理用に 9000番を使っていることでしょう。なのでそれを邪魔しないよう Monoサーバは 9001番を使うことにします。
これで aspx 拡張子のファイルはすべて Monoサーバで処理されるようになります。
さらにディレクトリインデックスの設定もやっておきましょう。
location / {
index index.html index.htm index.php default.aspx;
}
index を定義している location ブロックが既に存在する筈なので、その行に default.aspx を追記します。
Monoサーバのサービス化
いよいよ最後の仕上げです。Monoサーバを常駐させないといけません。これも簡単!ファイルをひとつ作成するのみです。
$ sudo vi /etc/systemd/system/mono-server.service
でファイルを新規作成します。内容は下記の通り。
[Unit]
Description=Mono Server
Before=nginx.service
After=nss-user-lookup.target
[Service]
EnvironmentFile=
Type=simple
ExecStart=/usr/bin/fastcgi-mono-server4 \
--applications=www.kodama.com:/:/var/www/html/ \
--socket=tcp:127.0.0.1:9001 \
--verbose=true
User=nginx
Group=nginx
[Install]
WantedBy=multi-user.target
上記の変更箇所は
ドメイン名:www.kodama.com
ドキュメントディレクトリ:/var/www/html/
Nginxのユーザ:nginx
Nginxのグループ:nginx
となっているので、それぞれ自分の環境に合わせて変更してくださいね。
そしてこのファイルを保存したら、通常のサービスと同じように
$ sudo systemctl start mono-server
で起動しますし、enable にしておけば自動起動もします。
おしまい
これでもう CentOS 上で aspx ファイルが実行される筈です。しかも .php ファイルの場合は PHP として実行されます。
まとめてみると意外と簡単でしたね。私が見たところ英語サイトも含め簡潔に説明されているサイトが無かったようなので、記事を執筆してみました。
ASP.NET を CentOS で使いたいと考えている皆さんのお役に立てれば何よりです! Enjoy