DELAEMON BLOG

Live as if you were to die tomorrow. Learn as if you were to live forever.

build nginx proxy for elixir phoenix app on fedora22(GMO Conoha)

phoenixアプリをポート80で動かせたけど、
別のサービスも同じサーバー上で動かすのを想定してnginxのproxyを立てた。
fedora使っていて思うのはパッケージが新しいバージョンを追いかけてるのと、
ssdのせいかもしれないけどインストール終わるがすごく速い。快適。

現在のstableバージョンがyumで入る。

[root@host ~]# yum install nginx
#ささー
[root@host ~]# nginx -v
nginx version: nginx/1.8.0

nginx.serviceを自ら用意しないといけないかなと思ったけど自動で作られてた。

[root@host ~]# cat /lib/systemd/system/nginx.service
[Unit]
Description=The nginx HTTP and reverse proxy server
After=network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
PIDFile=/run/nginx.pid
# Nginx will fail to start if /run/nginx.pid already exists but has the wrong
# SELinux context. This might happen when running `nginx -t` from the cmdline.
# https://bugzilla.redhat.com/show_bug.cgi?id=1268621
ExecStartPre=/usr/bin/rm -f /run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t
ExecStart=/usr/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
KillSignal=SIGQUIT
TimeoutStopSec=5
KillMode=mixed
PrivateTmp=true

[Install]
WantedBy=multi-user.target

nginx.confにproxy_pass追記

[root@host ~]# cat /etc/nginx/nginx.conf
# For more information on configuration, see:
#   * Official English Documentation: http://nginx.org/en/docs/
#   * Official Russian Documentation: http://nginx.org/ru/docs/

user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

events {
    worker_connections 1024;
}

http {
    # 省略
    server {
        listen       80 default_server;
        listen       [::]:80 default_server;
        server_name  _;
        root         /usr/share/nginx/html;

        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

        location / {
	    proxy_pass http://localhost:4001; #ここだけ追記
        }
    # 省略
    }
}

phoenixアプリの config/prod.exs の該当部分のみ

config :hello, Hello.Endpoint,
  http: [port: {:system, "PORT"}],
  url: [host: "localhost", port: 4001],
  cache_static_manifest: "priv/static/manifest.json"

nginxをsystemdで起動

[root@host ~]# systemctl start nginx

これでhttp://takeshionodera.net/phoenix/にアクセスするとport 4001にプロキシされてブラウザで表示されるようになった。