configurationnginx来服务

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

当我访问domain.com/api时,我会得到一个我可以访问的端点列表。但问题是我必须访问像这个域/ apicategories那样的设置点。 这是不正确的。 我必须访问他们像这个域/ API /类别。 下面是我的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/; } 

正如Tim在评论中帮助你的,你错过了你的位置块的尾部斜线。

摘自NGINX正式文件 :

如果某个位置由以斜杠字符结尾的前缀string定义,并且请求由proxy_passfastcgi_passuwsgi_passscgi_passmemcached_pa​​ss之一处理,则将执行特殊处理。 为了响应URI等于这个string的请求,但没有结尾的斜杠,带有代码301的永久redirect将被返回到所请求的URI,并附有斜线。 如果不需要,可以像这样定义URI和位置的精确匹配:

所以这两个在这种情况下是不相等的:

 location /api/ { ... } IS NOT EQUAL WITH location /api { ... } 

但是,如果您希望在需要将yourDomain / apiyourDomain / api /匹配为完整string的情况下避免出现此类错误,则可以使用以下正则expression式匹配:

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

Tilde〜符号将启用正则expression式匹配,和/? 在input结束之前将允许一个或零个斜线/符号。