使用代理服务器

未匹配的标注

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>

本文章首发在 LearnKu.com 网站上。

上一篇 下一篇
superwen
讨论数量: 0
发起讨论 只看当前版本


暂无话题~