我试图将我的节点代理从端口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/