思えば40年も前に劇場でEP4を観て以来の長い長い物語は一応完結した。
賛否はあるだろうが、当方的にはよくぞEP8から立て直したなwと思う。この先も商魂たくましいウォルトさんが、いろいろ関連作品を作るだろうが、本筋はここで終わりだ。突っ込みどころもいろいろあるだろうが、まぁ、取り敢えずは広げた風呂敷は何とか畳めたんじゃないだろうか。
これは、これで良しとしよう
2020/4/29 水曜日
EP9
2020/4/22 水曜日
asp.net core 3.1 + Ubuntu 18.04 + nginx
apacheがいけたならnginxも試しておこう
ブラウザとのssl通信はnginxに任せてlocalhostのkestrelとはhttpで通信するという事がやりたいのだが、親切な方がビックリする程直球ど真ん中の記事を上げてくれていたので、そのまま真似してみた。結論から言うとうまくいった、ありがたい限りである。
後は80へのアクセスをリダイレクトさせるなりすればいいか、、、
asp.net core 3.1の検証
実際のMVC5のWebAppを一部移植してみる
工夫すればControllerやViewもある程度共通化出来そうなので、既存のWebAppで難易度の高そうなPDFやExcel出力を試してみたが普通に動くようだ。元々、ロジックのAction部分は外に出しているのでMVCフレームワークへの依存度の高いとこだけをCore化すれば後はいけそうな気配。実際、参照しているdllは何も変更していない。standard 2.1はなかなか使える子だ、将来統合される.net5.0には期待が持てるかもしれない。
2020/4/19 日曜日
asp.net core 3.1 + centos7 + apache
asp.net core 3.1で戯れる
dotnet 3.1になって既存のソースとか、ほぼそのままcoreでもビルド出来るようになって来た。これまでMVC5を使って来たのだが、いよいよ将来の移行も視野にasp.net coreを触ってみる。
VisualStudio上で動かすのは簡単だが、いざdeployとなるとどうなんだろう?ということでcentos7上でkestrelをapacheでリバースプロキシ経由で公開するテストをしてみた。vsでランタイムから何から一本のdllにまとめてしまうという素晴らしいオプションでpublishしたバイナリを使用。centos上でそのdllを普通に動かすだけで、そのままwebappが動くのでお気楽だ。
既定ではkestrelを動かすと”http://localhost:5000″として動作するが、これをそのままapache経由で公開するとwebのroot”/”になってしまう(凡例”http://www.example.com/”)。
そこで、外部からは”myapp”とかの名前で公開したい(凡例”http://www.example.com/myapp”)ので、いろいろ試行錯誤した結果を備忘録にしておこう。
まずはasp.net coreのアプリ側の細工:
//1) kestrelで"myapp"がbasepathになるようにする
public void Configure(IApplicationBuilder app, IWebHostEnvironment env) {
:
app.UsePathBase("myapp");
app.UseStaticFiles();
:
app.UseForwardedHeaders(new ForwardedHeadersOptions {
ForwardedHeaders = ForwardedHeaders.All
});
:
}
次にapache側の設定:
#2) apacheのリバースプロキシを設定
<VirtualHost *:*>
RequestHeader set "X-Forwarded-Proto" expr=%{REQUEST_SCHEME}e
</VirtualHost>
<VirtualHost *:80>
ProxyPreserveHost On
ProxyPass /myapp http://localhost:5000/myapp
ProxyPassReverse /myapp http://localhost:5000/myapp
ServerName www.example.com
<Location /myapp>
Require all denied
Require ip 127.0.0.1/32
Require ip 192.168.0.0/24
</Location>
</VirtualHost>
これで取りあえずは”myapp”で公開された。
そして更に、オレオレ証明書でhttpsにしたかったので、上記のconfを書き換えた:
#2') apacheのリバースプロキシを設定(https)
<VirtualHost *:*>
RequestHeader set "X-Forwarded-Proto" expr=%{REQUEST_SCHEME}e
</VirtualHost>
<VirtualHost *:80>
RewriteEngine On
RewriteCond %{REQUEST_URI} /myapp
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
<Location /myapp>
Require all denied
Require ip 127.0.0.1/32
Require ip 192.168.0.0/24
</Location>
</VirtualHost>
<VirtualHost *:443>
ProxyPreserveHost On
ProxyPass /myapp http://localhost:5000/myapp
ProxyPassReverse /myapp http://localhost:5000/myapp
SSLEngine on
SSLProtocol all -SSLv2
SSLCipherSuite ALL:!ADH:!EXPORT:SSLv2:!RC4+RSA:+HIGH:+MEDIUM:!LOW:!RC4
SSLCertificateFile /etc/pki/tls/certs/localhost.crt
SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
<Location /myapp>
Require all denied
Require ip 127.0.0.1/32
Require ip 192.168.0.0/24
</Location>
</VirtualHost>
ブラウザには最初に怒られるが、構わず続けるとhttpsでアクセスできた。
これなら、kestrelのポートをwebapp毎に変えれば同じサーバで複数公開出来そうだ。

