可从 Internet 访问的 gunicorn 反向代理
gunicorn reverse proxy accessible from internet
我配置了 nginx 和 gunicorn 来为 flask 应用程序提供服务。我用这个命令启动了 gunicorn
gunicorn --bind 0.0.0.0:5000 wsgi:app
我的网站可以通过我提供的 ip 地址在端口 80 上访问。但是它也可以在端口 5000 上访问。看来我的反向代理可以正常工作,但是 gunicorn 服务器也可以访问。
我打算禁用端口 5000,但不确定这是解决此类问题的正确、安全的方法。
这是我的 nginx 配置文件:
server {
server_name <my_ip_adress>;
access_log /var/log/nginx/domain-access.log;
location / {
proxy_pass_header Server;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Scheme $scheme;
proxy_connect_timeout 10;
proxy_read_timeout 10;
# This line is important as it tells nginx to channel all requests to port 5000.
# We will later run our wsgi application on this port using gunicorn.
proxy_pass http://127.0.0.1:5000/;
}
}
您将 gunicorn 绑定到 0.0.0.0
因此它可以在外部接口上使用。假设这只是一个盒子,而是:
gunicorn --bind 127.0.0.1:5000 wsgi:app
这不再监听来自外部接口的请求,这意味着所有请求都必须通过 nginx。
当然,如果你做了 将 gunicorn 绑定到 0.0.0.0
,你可以使用 iptables 制定防火墙规则,以丢弃从外部接口到该端口的流量。
如果您使用的是云提供商,他们可能会在他们的平台上本地实现此防火墙功能 - 例如,AWS EC2 上的安全组将允许您创建一个 'webserver' 组,该组仅允许端口 80 的流量通过& 443.
我配置了 nginx 和 gunicorn 来为 flask 应用程序提供服务。我用这个命令启动了 gunicorn
gunicorn --bind 0.0.0.0:5000 wsgi:app
我的网站可以通过我提供的 ip 地址在端口 80 上访问。但是它也可以在端口 5000 上访问。看来我的反向代理可以正常工作,但是 gunicorn 服务器也可以访问。
我打算禁用端口 5000,但不确定这是解决此类问题的正确、安全的方法。
这是我的 nginx 配置文件:
server {
server_name <my_ip_adress>;
access_log /var/log/nginx/domain-access.log;
location / {
proxy_pass_header Server;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Scheme $scheme;
proxy_connect_timeout 10;
proxy_read_timeout 10;
# This line is important as it tells nginx to channel all requests to port 5000.
# We will later run our wsgi application on this port using gunicorn.
proxy_pass http://127.0.0.1:5000/;
}
}
您将 gunicorn 绑定到 0.0.0.0
因此它可以在外部接口上使用。假设这只是一个盒子,而是:
gunicorn --bind 127.0.0.1:5000 wsgi:app
这不再监听来自外部接口的请求,这意味着所有请求都必须通过 nginx。
当然,如果你做了 将 gunicorn 绑定到 0.0.0.0
,你可以使用 iptables 制定防火墙规则,以丢弃从外部接口到该端口的流量。
如果您使用的是云提供商,他们可能会在他们的平台上本地实现此防火墙功能 - 例如,AWS EC2 上的安全组将允许您创建一个 'webserver' 组,该组仅允许端口 80 的流量通过& 443.