Python Bokeh服务器+;使用Nginx进行反向代理得到404

Python Bokeh服务器+;使用Nginx进行反向代理得到404,python,nginx,proxy,bokeh,Python,Nginx,Proxy,Bokeh,我正在尝试设置一个Bokeh服务器,并使用Nginx反向代理它 我的p-website.conf现在看起来像: server { listen 80; server_name website.com; client_max_body_size 25M; access_log /var/www/logs/p-website.access.nginx.log; error_log /var/www/logs/p-website.error.nginx.log error; root

我正在尝试设置一个Bokeh服务器,并使用Nginx反向代理它

我的p-website.conf现在看起来像:

server {
listen   80;
server_name  website.com;
client_max_body_size 25M;
access_log  /var/www/logs/p-website.access.nginx.log;
error_log  /var/www/logs/p-website.error.nginx.log error;
root    /var/www/pydocs/website/production/src;

include global/restrictions.conf;


location /plot/ {
    proxy_pass http://website.com:5100;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_http_version 1.1;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $host:$server_port;
    proxy_buffering off;
}

location / {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

    # enable this if and only if you use HTTPS, this helps Rack
    # set the proper protocol for doing redirects:
    # proxy_set_header X-Forwarded-Proto https;

    proxy_set_header Host $http_host;
    proxy_redirect off;
    proxy_connect_timeout 10;
    proxy_read_timeout 60s;

    proxy_pass http://production_website_gunicorn;
}
}
server {
listen   80 default_server;
server_name  website.com;
client_max_body_size 25M;
access_log  /var/www/logs/p-website.access.nginx.log;
error_log  /var/www/logs/p-website.error.nginx.log error;
root    /var/www/pydocs/magnify/production/src;

include global/restrictions.conf;


location / {
    allow 127.0.0.1:5100
    proxy_pass http://127.0.0.1:5100;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_http_version 1.1;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $host:$server_port;
    proxy_buffering off;
}

}
在服务器上,我使用以下命令运行Bokeh服务器:

bokeh serve bokehserver.py --port 5100 --host website.com:80
bokeh serve bokehserver.py --port 5100 --host 127.0.0.1:80
但是当我访问website.com/plot/时,我从Bokeh得到了一个404,服务器终端给了我:WARNING:tornado.access:404 get/(“这里是ip地址”)3.04ms

我不明白为什么它总是给出404,或者与Nginx有关

谢谢

2006年6月30日更新

好吧,我想我又向前迈了一步,希望朝着好的方向前进。 我的p-website.conf现在看起来像:

server {
listen   80;
server_name  website.com;
client_max_body_size 25M;
access_log  /var/www/logs/p-website.access.nginx.log;
error_log  /var/www/logs/p-website.error.nginx.log error;
root    /var/www/pydocs/website/production/src;

include global/restrictions.conf;


location /plot/ {
    proxy_pass http://website.com:5100;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_http_version 1.1;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $host:$server_port;
    proxy_buffering off;
}

location / {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

    # enable this if and only if you use HTTPS, this helps Rack
    # set the proper protocol for doing redirects:
    # proxy_set_header X-Forwarded-Proto https;

    proxy_set_header Host $http_host;
    proxy_redirect off;
    proxy_connect_timeout 10;
    proxy_read_timeout 60s;

    proxy_pass http://production_website_gunicorn;
}
}
server {
listen   80 default_server;
server_name  website.com;
client_max_body_size 25M;
access_log  /var/www/logs/p-website.access.nginx.log;
error_log  /var/www/logs/p-website.error.nginx.log error;
root    /var/www/pydocs/magnify/production/src;

include global/restrictions.conf;


location / {
    allow 127.0.0.1:5100
    proxy_pass http://127.0.0.1:5100;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_http_version 1.1;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $host:$server_port;
    proxy_buffering off;
}

}
现在,我使用以下命令运行服务器:

bokeh serve bokehserver.py --port 5100 --host website.com:80
bokeh serve bokehserver.py --port 5100 --host 127.0.0.1:80
现在我再也没有404了,但是当我访问website.com:5100/bokehserver/时,我得到了一个“403:Forbidden”。在bokehserver终端上显示此消息:

INFO:bokeh.server.tornado:Rejected connection from host 'website.com:5100' because it is not in the --host whitelist
WARNING:tornado.access:403 GET /bokehserver/ (213.152.161.35) 0.78ms

我试图通过在p-website.conf中添加
allow 127.0.0.1:5100
来解决白名单问题,运气不好。

我解决了这个问题,显然您需要将--prefix=添加到Bokeh命令的相同位置:

bokeh serve bokehserver.py --port 5100 --prefix=/plot/ --host website.com:80
p-website.conf中的位置块如下所示:

location /plot/ {
    proxy_pass http://127.0.0.1:5100;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_http_version 1.1;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $host:$server_port;
    proxy_buffering off;
}

Bokeh服务器有一个默认(但可配置)URL前缀
“app”
。你能看到
website.com/plot/app/
上的页面吗?我在浏览器中看到了相同的404:“404:未找到”和终端中的相同消息:“警告:龙卷风。访问:404 get/plot/app/(“这里是ip地址”)0.58ms。nginx日志中有什么?nginx和bokeh服务器在不同的机器上吗?也许有什么东西阻塞了nginx和bokeh服务器之间的通信。是否可以在同一台计算机上使用
127.0.0.1
地址而不是
website.com
来尝试它们以获取数据点?error.nginx.log是空的,在access.nginx.log中只有404 get请求,而不是403(请参见上面的更新):“get/bokehserver HTTP/1.1”404 1037“-”Mozilla/5.0(Macintosh;Intel Mac OS X 10.11;rv:47.0)Gecko/20100101 Firefox/47.0“它们运行在同一台机器上(Ubuntu 14.04 LTS)。您不应该导航到
website.com:5100/bokehserver
,它试图直接连接到Bokeh服务器,绕过您可能不想允许的nginx(在端口80上)(以及它拒绝您的原因)。您想点击nginx,所以您应该导航到
website.com/bokehserver
(或者更可能是:
website.com/app/bokehserver
,让nginx在内部转发连接。请注意,
--host
选项现在已被弃用,并将返回未知参数错误。