Nginxconfiguration代理后的Restful API

我试图将我的节点代理从端口8080移动到80并打墙。 我希望我的RESTful API在位于/api/path上的端口80上监听nginx反向代理

8080端口对于一些企业用户而言是无法访问的)。

我用来将请求指向https://domain.tld:8080 /到http:// localhost:1337 。 没有问题通过:

 server { listen 8080; server_name domain.tld; ssl on; #some other SSL config removed for clarity location / { proxy_redirect off; proxy_pass_header Server; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Scheme $scheme; proxy_set_header Host $http_host; proxy_set_header X-NginX-Proxy true; proxy_connect_timeout 5; proxy_read_timeout 240; proxy_intercept_errors on; proxy_pass http://127.0.0.1:1337; } } 

现在我正在尝试将它移到位置api/path/并通过以下方式从端口8080移开:

 server { listen 443 ssl http2; listen [::]:443 ssl http2; server_name domain.tld; root /path/to/html/; ssl on; #some other SSL config removed for clarity location /api/path/ { proxy_redirect off; proxy_pass_header Server; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Scheme $scheme; proxy_set_header Host $http_host; proxy_set_header X-NginX-Proxy true; proxy_connect_timeout 5; proxy_read_timeout 240; proxy_intercept_errors on; proxy_pass http://127.0.0.1:1337; } } 

这导致:

 $ curl -i -H "Content-Type: application/json" -H "Accept: application/json" -X POST -d '{}' https://domain.tld/api/path TTP/1.1 404 Not Found Date: Thu, 08 Sep 2016 01:29:35 GMT Content-Type: text/html; charset=utf-8 Content-Length: 25 Connection: keep-alive X-Powered-By: Express X-Content-Type-Options: nosniff Strict-Transport-Security: max-age=31536000; includeSubDomains; Cannot POST /api/path 

现在我读了,你不能张贴到静态页面,这意味着你做了这样的事情:

 error_page 405 @405; location = @405 { root /path/to/html/; } 

但是,因为我无法find足够的信息,所以这是行不通的。 GET正常工作,但POST会错误, Cannot POST api/path 。 我能在这里做什么?

感谢任何帮助。

更新

我需要启用proxy_redirect @techraf指出,所以我现在成功的configuration看起来像这样。 希望它可以帮助别人。

 server { listen 443 ssl http2; listen [::]:443 ssl http2; server_name domain.tld; root /path/to/html/; ssl on; #some other SSL config removed for clarity location /api/path/ { proxy_redirect http://localhost:1337/ /api/path/; #<-- change proxy_pass_header Server; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Scheme $scheme; proxy_set_header Host $http_host; proxy_set_header X-NginX-Proxy true; proxy_connect_timeout 5; proxy_read_timeout 240; proxy_intercept_errors on; proxy_pass http://127.0.0.1:1337; } } 

如果要将/api/path/指向redirect目标的根目录,则需要使用:

 proxy_redirect http://localhost:1337 https://domain.tld/api/path/