我们的一台服务器在端口 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