我对NGINX有一点经验。 我正在尝试使用它作为一些运行节点的docker集装箱的反向代理。 目标是通过NGINX汇集所有请求。 根据path(urlpath),某个路由domain.com/graphql将通过NGINX传递给不同的docker集装箱。 domain.com/graphql基本上是我的API端点。
我遇到的问题是客户端上的JS所做的所有Ajax / Relay客户端请求都是从NGINX
请求:
Request URL:http://domain.com/graphql Request Method:POST Status Code:301 Moved Permanently Remote Address:192.168.99.100:80 Response Headers view source Connection:keep-alive Content-Length:185 Content-Type:text/html Date:Thu, 08 Sep 2016 15:14:02 GMT Location:http://domain.com/graphql/ Server:nginx/1.11.3 Request Headers view source accept:*/* Accept-Encoding:gzip, deflate Accept-Language:en-US,en;q=0.8,it;q=0.6 Cache-Control:no-cache Connection:keep-alive Content-Length:620 content-type:application/json Host:nomralph.com Origin:http://domain.com Pragma:no-cache Referer:http://domain.com/ User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36
Nginxconfiguration:
upstream frontend { least_conn; server frontend:4444 weight=10 max_fails=3 fail_timeout=30s; keepalive 64; } upstream graphql-upstream { least_conn; server graphql:3000 weight=1 max_fails=3 fail_timeout=30s; keepalive 64; } server { listen 80; server_name domain.com www.domain.com; root /var/www/public; # Handle static files location / { proxy_pass http://frontend; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-NginX-Proxy true; proxy_cache_bypass $http_upgrade; } location /graphql { proxy_pass graphql-upstream/graphql; add_header 'Access-Control-Allow-Origin' '*'; add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS'; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-NginX-Proxy true; proxy_cache_bypass $http_upgrade; } }
如何在NGINX中更改我的configuration,以允许对domain.com/graphql的请求以与向domain.com/graphql发出的请求相同的HTTP状态行事,但传递给我的api服务器。
301是上游服务器将请求的URL http://domain.com/graphqlredirect到http://domain.com/graphql/ 。 你可以在你发布的标题中看到这个。 改变你的客户端请求与斜线后面的URL,看301是否消失。 或者更改上游服务器,使其不会redirect到带有斜线的URL。