Flask API & nginx 并排
Flask API & nginx alongside each other
我有一个正在尝试设置的服务器。我有一个 Flask 服务器需要在 api.domain.com 上 运行,而我有其他子域指向服务器。我有一个问题。 2/3 子域使用 nginx 没有问题。同时,我的脚本试图绑定到同一台机器上的端口 80,因此失败了。有没有一种方法可以将我的 Flask REST 脚本仅绑定到子域 'api' 的端口 80?
我当前的配置是:
server {
server_name api.domain.me;
location / {
error_page 404 /404.html;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $http_x_forwarded_proto;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_max_temp_file_size 0;
proxy_pass http://127.0.0.1:5050/;
proxy_cache off;
proxy_read_timeout 240s;
}
}
不过有个小问题,nginx喜欢把所有的POST请求都变成GET请求,有什么想法吗?
谢谢!
无法在端口 80 上同时绑定两个不同的应用程序。
我会这样设置你的 api:
将您的 Flask API 绑定到端口 8080
。
在 NGINX 上,您可以将子域配置为指向您的 Flask 应用程序
upstream flask_app {
server 127.0.0.1:8080;
}
sever {
listen 80;
server_name api.domain.com;
location / {
proxy_pass http://flask_app/;
proxy_set_header Host $host;
}
}
经过一番诊断,我实际上发现了。
server {
if ($host = api.domain.me) {
return 301 https://$host
}
# managed by Certbot
必须变成:
server {
if ($host = api.domain.me) {
return 497 '{"code":"497", "text": "The client has made a HTTP request to a port listening for HTTPS requests"}';
}
因为 Certbot 尝试将请求升级到 https,但 HTTP 方法由于 301 响应代码而更改为 GET。
我有一个正在尝试设置的服务器。我有一个 Flask 服务器需要在 api.domain.com 上 运行,而我有其他子域指向服务器。我有一个问题。 2/3 子域使用 nginx 没有问题。同时,我的脚本试图绑定到同一台机器上的端口 80,因此失败了。有没有一种方法可以将我的 Flask REST 脚本仅绑定到子域 'api' 的端口 80? 我当前的配置是:
server {
server_name api.domain.me;
location / {
error_page 404 /404.html;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $http_x_forwarded_proto;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_max_temp_file_size 0;
proxy_pass http://127.0.0.1:5050/;
proxy_cache off;
proxy_read_timeout 240s;
}
}
不过有个小问题,nginx喜欢把所有的POST请求都变成GET请求,有什么想法吗? 谢谢!
无法在端口 80 上同时绑定两个不同的应用程序。
我会这样设置你的 api:
将您的 Flask API 绑定到端口 8080
。
在 NGINX 上,您可以将子域配置为指向您的 Flask 应用程序
upstream flask_app {
server 127.0.0.1:8080;
}
sever {
listen 80;
server_name api.domain.com;
location / {
proxy_pass http://flask_app/;
proxy_set_header Host $host;
}
}
经过一番诊断,我实际上发现了。
server {
if ($host = api.domain.me) {
return 301 https://$host
}
# managed by Certbot
必须变成:
server {
if ($host = api.domain.me) {
return 497 '{"code":"497", "text": "The client has made a HTTP request to a port listening for HTTPS requests"}';
}
因为 Certbot 尝试将请求升级到 https,但 HTTP 方法由于 301 响应代码而更改为 GET。