如何使用 nginx 将 post 请求传输到不同的端口?
How do I transfer post requests to a different port with nginx?
我想将所有 post 请求传输到端口 5000,因为我的 express 服务器就在那里 运行。
这是我目前的 nginx 配置:
server {
if ($host = www.website.com) {
return 301 https://$host$request_uri;
} # managed by Certbot
listen 80 default_server;
server_name www.website.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl;
server_name www.website.com;
ssl_certificate /etc/letsencrypt/live/website.com/fullchain.pem; # managed$
ssl_certificate_key /etc/letsencrypt/live/website.com/privkey.pem; # manag$
我知道我应该在编写代码之前考虑一下并将所有 post 请求发送到 /api 然后从配置中重定向它。但我没有,如果节点需要,我不想更改代码。
如何识别请求是否为 post 请求并将其传输到端口 5000?
另外,这个配置文件是用什么语言写的?它看起来像 js 但实际上不是
你最好更改你的代码,但作为一种快速而肮脏的 hack,你可以尝试
server {
...
if ($request_method = POST) {
rewrite ^ /api$request_uri last;
}
location / {
# your default location config here
}
location /api/ {
proxy_pass http://127.0.0.1:5000/;
}
}
NGINX config 不是一种编程语言,它使用自己的语法并且是声明式的而不是命令式的,更改 nginx 指令的顺序(ngx_http_rewrite_module
中的指令除外)通常没有什么区别。
我想将所有 post 请求传输到端口 5000,因为我的 express 服务器就在那里 运行。 这是我目前的 nginx 配置:
server {
if ($host = www.website.com) {
return 301 https://$host$request_uri;
} # managed by Certbot
listen 80 default_server;
server_name www.website.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl;
server_name www.website.com;
ssl_certificate /etc/letsencrypt/live/website.com/fullchain.pem; # managed$
ssl_certificate_key /etc/letsencrypt/live/website.com/privkey.pem; # manag$
我知道我应该在编写代码之前考虑一下并将所有 post 请求发送到 /api 然后从配置中重定向它。但我没有,如果节点需要,我不想更改代码。
如何识别请求是否为 post 请求并将其传输到端口 5000?
另外,这个配置文件是用什么语言写的?它看起来像 js 但实际上不是
你最好更改你的代码,但作为一种快速而肮脏的 hack,你可以尝试
server {
...
if ($request_method = POST) {
rewrite ^ /api$request_uri last;
}
location / {
# your default location config here
}
location /api/ {
proxy_pass http://127.0.0.1:5000/;
}
}
NGINX config 不是一种编程语言,它使用自己的语法并且是声明式的而不是命令式的,更改 nginx 指令的顺序(ngx_http_rewrite_module
中的指令除外)通常没有什么区别。