сначала немного предыстории: я использую restify framework для моего nodejs api-сервера и использую реагирование на взаимодействие клиента с сервером. Я настроил оба проекта на одном VPS с обратным прокси nginx, чтобы позаботиться о двух разных доменных именах: example_server.com
, example_client.com
, и оба https были включены с помощью letEncrypted.
поэтому, когда я захожу на example_server.com
, мой nginx берет меня на localhost: server_port и показывает правильный контент, клиент работает так же.
Вот моя проблема:
моему клиенту реакции, подключенному к серверу восстановления, не удалось запустить сеанс, серверу не удалось настроить сеанс для клиента. это может быть связано с nginx проблемой обратного прокси, кто-то, использующий express framework для сервера, имеет ту же проблему, но исправлен с помощью app.set('trust proxy', 1)
. но в restify такой опции нет. Я действительно не хочу менять свой код с restify на express, так что я могу сделать?
мой сервер nginx setup:
server {
server_name server_example.com www.server_example.com;
location / {
proxy_pass http://127.0.0.1:6000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
proxy_redirect off;
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-Forwarded-Proto $scheme;
}
мой клиент nginx setup:
server {
server_name client_example.com www.client_example.com;
location / {
proxy_pass http://127.0.0.1:7000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
proxy_redirect off;
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-Forwarded-Proto $scheme;
}
Я использую express-session
для обработки сеанса на моем сервере restify, при локальной разработке он работает хорошо, но на VPS-сервере с nginx он не работает. Вот фрагмент кода:
var constant = require('./config/constant.json');
var session = require('express-session');
var restify = require('restify');
var corsMiddleware = require("restify-cors-middleware");
const cors = corsMiddleware({
origins: constant.client_urls,
credentials: true,
allowHeaders: ["Authorization"],
exposeHeaders: ["Authorization"]
});
var server = restify.createServer();
server.use(restify.plugins.queryParser());
server.use(restify.plugins.jsonp());
server.pre(restify.plugins.pre.userAgentConnection());
server.pre(cors.preflight);
server.use(cors.actual);
//server.set('trust proxy', 1); restify didn't has such option, err: .set is not a function.
server.use(session({
secret: constant.session_secret,
proxy: true,
resave: false,
saveUninitialized: true,
cookie: { maxAge: 3600000, secure: true },
}))
любая помощь будет признательна!