» Python:使用Flask构建REST API » 3. 部署 » 3.2 Nginx反向代理

Nginx反向代理

此刻,你的端点 URL 如下所示:

http://localhost:5000/books

让我们剥去端口部分(:5000)。

你可以简单地修改 gunicorn 命令,并以 root 执行,将服务运行端口改成 80

端口 80443 分别是 HTTP 和 HTTPS 协议服务的默认端口。它们在 URL 中不显示。

但是,你不应将 Gunicorn 以 root 身份运行,因为这会导致你的应用程序代码也以 root 身份运行,这显然是不安全的。这就意味着将无法绑定到端口 80 或 443。 所以,你应该在 Gunicorn 前使用一个反向代理,比如 nginxApache httpd

另外,如果你在一台机器上有多个服务(api服务器,web服务器,聊天服务器等),且想将全部服务通过 80 端口对外服务,又该如何呢?

你需要反向代理

Nginx 配置

安装 nginx:https://nginx.org/en/docs/install.html

假设你有一个运行在 5000 端口的 API 服务和一个运行在 3000 端口的 web 服务。 你可以如下设置 Nginx 配置:

server {
    listen 80;

    server_name yourdomain.com;

    location /web {
        proxy_pass http://localhost:3000;
        proxy_set_header Host $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;
    }

    location / {
        proxy_pass http://localhost:5000;
        proxy_set_header Host $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;
    }
}

重载 Nginx 并应用这些更改。

然后,你可以发出如下请求了:

curl http://localhost/books