配置 nginx 来提供服务

配置 nginx 来提供服务

我的 aws 服务器中托管了一个 rails 应用程序,并使用 nginx 作为代理服务器。在同一实例中,我在端口 3004 上运行 api 服务器。在 nignx conf 文件中,我做了一些更改,以便可以通过 domain.com/api 访问 api 服务器的内容,而我的 rails 应用程序可以通过 domain.com 访问。

当我访问 domain.com/api 时,我将获得可以访问的端点列表。但问题是我必须访问这些端点,例如 domain/apicategories。这是不正确的。我必须像 domain/api/categories 一样访问它们。以下是我的 nignx conf 文件

    upstream postgrest {
      server localhost:3004;
      keepalive 64;
    }


    server {
      listen 80;
      server_name localhost;

      root /home/deploy/test/current/public;

      try_files $uri/index.html $uri @app;
      location /api {
         default_type  application/json;
         proxy_hide_header Content-Location;
         add_header Content-Location  /api$upstream_http_content_location;
         proxy_set_header  Connection "";
         proxy_http_version 1.1;
         proxy_pass http://postgrest/;


   }

答案1

/当 Tim 帮你评论时,你漏掉了一个斜杠地点堵塞。

摘录自NGINX 官方文档

如果位置由以斜杠字符结尾的前缀字符串定义,并且请求由以下之一处理代理密码fastcgi_passuwsgi_passscgi_pass, 或者memcached_pa​​ss,则执行特殊处理。响应 URI 等于此字符串但不带尾部斜杠的请求,将返回带有代码 301 的永久重定向到附加了斜杠的请求 URI。如果不希望这样,可以像这样定义 URI 和位置的精确匹配:

因此,在这种情况下,这两者并不相等:

location /api/ {
    ...
}

IS NOT EQUAL WITH

location /api {
    ...
}

但如果你想在需要匹配的情况下避免此类错误你的域名/api或者你的域名/api/作为完整字符串,您可以使用以下正则表达式匹配:

location ~ ^/api/?$ {
    ...
}

波浪~符号将启用正则表达式匹配,并/?允许/在输入结束前出现一个或零个斜线符号。

相关内容