0

nginxでホームディレクトリを表示する設定

研究室のMacがwebサーバーになってて、今まではapacheを使ってたんだけどnginx使うようにしたらホームディレクトリが表示できなかったので、nginxの設定書いた。
既に各自のホームディレクトリにあるファイルにwiki等からリンクが貼られているので、切れると面倒

このへん参考にした HttpCoreModule

今までは /Users/sho/Sites/test.html が
http://masui.sfc.keio.ac.jp/~sho/test.html
で見えていたので、そのようにしたい。

locationを書いた

server {
listen 80;
server_name localhost;
server_name "masui.sfc.keio.ac.jp";
server_name "~^masuilab\.(org|net|com)$";
charset utf-8;
root /Volumes/share/Web;
autoindex on;
location / {
index index.html index.htm;
}
location ~ /~([a-zA-Z0-9_\-]+)(.*)$ { ## ホームディレクトリの設定
alias /Users/$1/Sites$2;
index index.html index.htm;
}
## 略
}

ついでに http://sho.masuilab.org/test.html でも見れるようにした
server {
listen 80;
charset utf-8;
server_name "~^(?<user>[a-zA-Z0-9_\-]+)\.masuilab\.(.+)$";
root /Users/$user/Sites;
autoindex on;
location / {
index index.html index.htm;
}
}

0

Macにnginx入れてwebsocket proxyした

これが参考になった
nginxを1.3.14にしたらWebSocketがProxyできた
config-com.favorymous.www.conf


おかげで家のMacでRocketIOのcomet/websocketチャットが動いた
http://chat.shookai.org/
サブドメインで判別してアプリにproxyしている。

経緯

ほぼ同時に研究室のサーバーが壊れたり、家のファイルサーバーが壊れたりしたのでMacとか色々環境を再構築することになった。

昔研究室のマシンをセットアップした時はみんなRubyしか使ってなかったので、Apache+Passengerにしておいたけど
最近はNodeとかWebSocketとかアプリプロセス内に小さなworker持ったりとかするようになって、Apache+Passengerでは無理になったので

nginxを前に置いて、後ろのアプリ(たくさん、ユーザー権限で動く)にproxyする事にした。
(アプリはforemanなどでlaunchdにインストールする)


インストール

brew info nginx
brew install nginx --devel
develなら、変なことしなくてもwebsocket proxyが使える1.3.14がインストールできる。


起動
nginx
http://localhost:8080 で起動している事を確認。
root権限でないと80番では起動できない。

終了
nginx -s stop

launchd 起動ファイルをコピー
サービスとしてlaunchdにインストール
cp /usr/local/Cellar/nginx/1.3.14/homebrew.mxcl.nginx.plist ~/Library/LaunchAgents/
launchctl load -w ~/Library/LaunchAgents/homebrew.mxcl.nginx.plist

アンインストール
launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.nginx.plist
brew uninstall nginx


設定する

設定ファイルはここにある
/usr/local/etc/nginx/nginx.conf

編集して、有効にするにはnginxを再起動しなければならないが
設定のシンタックスだけチェックもできる。エラーメッセージもわかりやすい。
nginx -t


nginxからwebsocket使ってるアプリにproxy


まずSinatra RocketIOで作ったwebsocketアプリでチャットするアプリを、HTTP port 5000 / websocket port 33100で動かしてある。
これ shokai/rocketio-chat-sample · GitHub


nginx.confのhttp{ }の中にupstreamとserverを書く
chat.shokai.org へのアクセスを http://127.0.0.1:5000 に流す。
  upstream rocketio-chat {
server 127.0.0.1:5000;
}

server {
listen 8080;
charset utf-8;
server_name chat.shookai.org;
root /Users/sho/projects/rocketio/rocketio-chat-sample/public;
location / {
try_files $uri $uri/index.html $uri.html @rocketio-chat;
}
location @rocketio-chat{
proxy_read_timeout 300;
proxy_connect_timeout 300;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Document-Root $document_root;
proxy_set_header X-Document-URI $document_uri;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_pass http://rocketio-chat;
}
}

nginx再起動すると、cometもwebsocketも通っていた。


設定はgithubで管理することにした
shokai/shookai.org.nginx.conf · GitHub


最終的に、 /usr/local/etc/nginx/apps/アプリ名.conf を作ればどんどん増やせるようにした。
これをテンプレとする。
upstream rocketio-chat {
server 127.0.0.1:5000;
}

server {
listen 8080;
charset utf-8;
server_name chat.shookai.org;
root /Users/sho/projects/rocketio/rocketio-chat-sample/public;
location / {
try_files $uri $uri/index.html $uri.html @rocketio-chat;
}
location @rocketio-chat{
include includes/proxy.conf;
proxy_pass http://rocketio-chat;
}
}