使用代理服务器
Buffalo开发的应用,可以不借助apache,nginx这样的代理就可以直接提供web服务的。仅仅需要在启动应用的时候指定地址和端口就行。
# Env config
ADDR=0.0.0.0
PORT=80
# Start your app as a daemon, for example:
./myapp &
不过,在通常情况下我们需要代理服务器来将我们的服务挂载到集群中去。要不然当一些服务挂了,就需要手动了切换服务。
NGINX
nginx有两种方法配置我们的服务。
用IP地址
只有一个服务的情况下
app env config:
ADDR=127.0.0.1
PORT=3000
nginx config:
upstream buffalo_app {
server 127.0.0.1:3000;
}
server {
listen 80;
server_name example.com;
# Hide NGINX version (security best practice)
server_tokens off;
location / {
proxy_redirect off;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://buffalo_app;
}
}
其中upstream buffalo_app
中 buffalo_app,可以自己改为你项目对应的名字,如果修改了,后面对应proxy_pass http://buffalo_app
也需要修改。
多服务配置
app1 env config:
CopyADDR=0.0.0.0
PORT=3000
app2 env config:
CopyADDR=0.0.0.0
PORT=3001
app3 env config:
CopyADDR=0.0.0.0
PORT=3002
NGINX config:
Copyupstream buffalo_app_hosts {
server host1.example.com:3000;
server host2.example.com:3001;
server host3.example.com:3002;
}
server {
listen 80;
server_name example.com;
# Hide NGINX version (security best practice)
server_tokens off;
location / {
proxy_redirect off;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://buffalo_app_hosts;
}
}
使用 UNIX socket
socket的方式不需要建立TCP握手连接,所以会比TCP的方式更快。
在使用socket过程中需要注意的是。socket实际上就是unix的文件。所以需要满足unix的文件权限。简单的方式就是在socket文件上执行chmod 777。不过这个很显然不是一个好主意。一般来说我们把web服务器的用户(比如:nginx的用户是nginx)设为当前用户的组中就可以。可以使用usermod命令,比如:usermod -aG buffalo nginx。
socket文件默认创建在/tmp目录下,由于一些linux版本尤其最新的RedHat family发行版,会把/tmp和/var/tmp作为命名空间。所以建议将socke头文件放在 unix:/var/sock/buffalo.sock。
app env config:
CopyADDR=unix:/tmp/buffalo.sock
NGINX config:
Copyupstream buffalo_app {
server unix:/tmp/buffalo.sock;
}
server {
listen 80;
server_name example.com;
# Hide NGINX version (security best practice)
server_tokens off;
location / {
proxy_redirect off;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://buffalo_app;
}
}
Apache 2
使用IP地址
app env config:
CopyADDR=127.0.0.1
PORT=3000
Apache 2 config:
Copy<VirtualHost *:80>
ProxyPreserveHost On
# Proxy requests to Buffalo
ProxyPass / http://0.0.0.0:3000/
ProxyPassReverse / http://0.0.0.0:3000/
ServerName example.com
</VirtualHost>