У меня мало опыта работы с NGINX. Я пытаюсь использовать его в качестве обратного прокси для нескольких контейнеров докеров, работающих под управлением узла. Цель состоит в том, чтобы все запросы проходили через NGINX. На основе маршрутов (URL-путь) определенный маршрут domain.com/graphql
затем будет передан в другой контейнер докеров через NGINX. В domain.com/graphql
в основном моя конечная точка API.
У меня проблема в том, что все мои клиентские запросы Ajax / Relay, сделанные JS, живущим на клиенте, передаются как 301 от 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
Конфигурация Nginx:
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, чтобы разрешить запросы к domain.com/graphql
вести себя с тем же статусом HTTP, что и запрос к domain.com
но быть переданным на мои серверы api.
301 - это вышестоящий сервер, перенаправляющий запрошенный URL. http://domain.com/graphql
к http://domain.com/graphql/
. Вы можете увидеть это в опубликованных вами заголовках. Измените своего клиента, чтобы запросить URL-адрес с косой чертой в конце и посмотреть, исчезнет ли 301. В качестве альтернативы измените свой вышестоящий сервер так, чтобы он не перенаправлял на URL-адрес с косой чертой в конце.