この歳で初のrpmbuildをした

SSL証明書の更新期間だったのでその作業に連携して。
22歳にして初の…。
ちょっと遅過ぎ?

ちょっと厄介なSSL証明書更新

研究室サーバの証明書の更新だったのですが、以前は
サービス毎にサブドメイン形式で取ってましたが更新作業とかもろもろ面倒ってことで(?)一つの証明書に統合することに。

つまり、今までサブドメインで運用してたwebのサービスとかはもろもろサブディレクトリでの運用になるわけです。
「apacheで動かしているweb」と「nginxで動かしているweb」という無駄に2つのサービスが動いている現状でもありました。
apacheでは80と443ポート、nginxでは8080ポートって感じでした。

そこで、「apacheより早い」っていう理由で「ついでにnginxに統合しよう」という流れに。
単にnginx触りたい、っていうのも理由としてありました。サバフェスで触ってましたし。
このときノリで決めたのですが、結構いろいろ躓きました。

躓いたところをぱっぱと書いていきます。

証明書設置

まず、nginxでの証明書設置で早速躓きました。
nginxには中間CA証明書を指定するディレクティブがありません。
(apacheでのSSLCertificateChainFile)

nginxのwiki を見ると
「if you have a chain of certificates — by having intermediate certificates between the server certificate and the CA root certificate — they’re not specified separately like you would do for Apache. Instead you’ll need to concatenate all the certificates, starting with the server certificate, and going deeper in the chain running through all the intermediate certificates. This can be done with “cat chain.crt >> mysite.com.crt” on the command line. Once this is done there’s no further use for all the intermediate certificates in what Nginx is concerned. You’ll indicate in the Nginx configuration the file with all the (concatenated) certificates. 」
というわけで、サーバ証明書に中間CA証明書追記するとオッケー。

UserDir

~user/public_htmlに関して。
locationディレクティブで「~」から始まるURIを指定してpublic_htmlをaliasする、っていう方法が一般的みたいです。
参考
ほうほう、
alias /home/$1/public_html$2
ね。

しかしaliasディレクティブに正規表現とかワイルドカードは使えません。
なのでapacheで
<directory “/home/*/*/public_html”>
とかやってることができないわけです。

これの何が困るかというと
/home/2012/yota/public_html
みたいにuseraddした年とか指定しているとユーザのディレクトリにたどり着けないわけです。

alias /home/*/$1/public_html$2
とかしたかったです。

いろいろ頑張ってみてもダメでした。
なので、
/home/public_html/${User}/
っていう感じでsymlinkで対応。
何かいい方法知ってる人いたら教えて下さい。

って書いてて思ったんですが、設定ファイル内にluaスクリプト使えるのでldapからユーザのホームディレクトリ属性持って来ることで対応できるのでは…。
調べてないので思いつき。後で調べる。

.htaccess

nginxでは使えません。
nginxtips っていうページに「Why Nginx doesn’t support .htaccess files?」という記事がありました。
パフォーマンスの面を考えると、.htaccessは使うべきではないみたいです。

「If you are a lazy developer you can still working with Apache and it’s .htaccess structure, however if you are serious about performance and security of your apps, now you know another reason why you should use Nginx Rewrite rules.At the end of the day, .htaccess provides a convenient shortcut for the lazy admin or developer, but also kills performance, makes configuration issues more difficult to track down, and opens yet another attack vector on your site.」
って言われちゃいます。

Basic認証にldap使えない

ほんとに軽量化したwebサービスで、libldapに依存してないんですよね。
ってことで自分で–add-moduleしてbuildしなくてはいけません。
と、ここでようやくrpmbuildです。
SPECなんて初めて見ました。良いですねアレ。
ついでにnginxを最新版に。

%buildにgit cloneとか書く感じでした。
それで./configureに–add-moduleする、と。

始めはそれだけでbuildしてたんですが、lddみてもlibldapに依存がありませんし、-V見てもbuildオプションにldapの–add-moduleがありませんでした。
と、ここでよくspecファイル見てみるとBuildRequiresっていうのを見つけて、openldap-develを追加してやることで無事依存するようになりました。
これでbasic認証にldapのディレクティブを使えるようになります。

まあ、ディレクティブが使えるっていうだけで実際の設定はまためんどくさかったんですけど。

その他

nginxがやってくれるのは静的ファイルのやりとりが中心で、webアプリケーションをnginxで動かすってことはできません。
apacheではphpとか動かしてますけど、nginxはその辺は別のプロセスと連携する感じです。
なのでphpやrailsに関しては別の手段が必要となります。
そのため、puma用意し、起動スクリプトを用意し、といろいろありました。

詳しい設定内容とか、もろもろは研究室のブログにでも書こうかと思います。
ちなみに研究室のブログ、アドベントカレンダーとかやってたんですが怠惰で途中失速中です。
研究室ブログ

12時から1時過ぎくらいの作業

ただし時計は一周している。
webだけじゃなくmailとかやってたら、半日以上かかってました。
といってもwebだけで10時間以上かかったんですが…。
久しぶりに運用してるサーバいじって楽しかった感じです。
gitlabたてた時以来の長時間作業でした。
サーバ構築、良いですね。

apacheからnginxに移行してみて「apache楽だったんだな〜」と実感しました。
多機能です。
でもnginx楽しいですし、今後はnginxの方を使ってみようかと思います。
the lazy admin or developerって言われないためにもw

次のサーバ構築は仮配生向けの仮想環境作りになりそうです。
楽しみ〜。

ちなみにnginxは「エンジンエックス」って読む見たいです。
僕は「エヌジンクス」って読んでます。
矯正しようかな…。