接受 GET 请求并重写 POST 请求

接受 GET 请求并重写 POST 请求

我们的一台服务器在端口 8916 上运行着一个 restful 服务。我们决定也从端口 80 提供该服务。因此,现在所有请求都传递到端口 8016。但是,如果用户直接通过浏览器 (GET) 访问该服务,我想显示一个帮助页面。我怎样才能只向服务发送 POST 请求,而当通过 GET 访问时显示“index.html”?

这是我们当前的 NGINX 配置。

server {
        listen 80;
        server_name ourserver.org;

        limit_conn alpha 3;
        limit_req  zone=delta burst=80 nodelay;

        location / {
            proxy_pass http://127.0.0.1:8916/;
            include proxy_params;

            access_log /var/log/nginx/indra-api.access.log;
            error_log /var/log/nginx/indra-api.error.log;

            client_max_body_size 8M;
        }
}

答案1

if一个简单的解决方案是对变量使用条件$request_method

例如:

location / {
    if ($request_method != POST) { rewrite ^ /index.html last; }

    proxy_pass ...;
    ...
}
location = /index.html {
    root /path/to/html/files;
}

如果您的index.html文件需要来自同一服务器的资源(css、图片和 js),您可能需要考虑使用 URI 前缀。例如:

location / {
    if ($request_method != POST) { rewrite ^ /help/index.html last; }

    proxy_pass ...;
    ...
}
location /help/ {
    root /path/to/html/files;
}

这种警告关于使用if

相关内容