我有一个运行 rails 应用程序的 unicorn 应用服务器和一个提供 tiles 的 tilestream 服务器,一个监听本地 unix 套接字,另一个监听 127.0.0.1:8888,这是我的配置:
upstream unicorn_server {
server unix:/var/www/fulcrumapp/tmp/sockets/unicorn.sock;
}
client_header_buffer_size 128k;
large_client_header_buffers 4 128k;
server {
listen 80;
server_name servername.com;
keepalive_timeout 30;
root /var/www/servername/public/;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
client_max_body_size 300m;
if (!-f $request_filename) {
proxy_pass http://unicorn_server;
break;
}
}
}
upstream tiles {
server 127.0.0.1:8888;
}
server {
listen 8080;
server_name tiles.servername.com;
access_log /var/www/servername/log/tilestream-tiles.access.log;
error_log /var/www/servername/log/tilestream-tiles.error.log debug;
location / {
proxy_set_header Host $http_host;
proxy_pass http://tiles;
}
}
第一个服务器运行正常……“tiles”服务器返回“错误请求”400 错误
在本地服务器上运行:curl 127.0.0.1:8888
按预期获取页面
访问 tiles.servername.com:8080 失败。
这是一个亚马逊 EC2 实例,其中公共 IP 不是本地服务器 IP,但我不认为亚马逊 NAT 层会妨碍它。
服务器操作系统是 ubuntu 11.04
调试 nginx 日志在这里: http://pastie.org/2483294
答案1
明白了,从以下开始:
tilestream server starting with --host tiles.servername.com
然后/etc/hosts/
在服务器上编辑:
127.0.0.1 tiles.servername.com
然后代理配置如上所述。
“错误请求”来自 Tilestream 服务器。
指定--host parameter
它将接受来自以下主机的连接: