Пропуск Nginx Proxy по SSL не учитывает URL прослушивания - PullRequest
0 голосов
/ 19 октября 2018

В настоящее время я пытаюсь настроить виртуальные серверные блоки nginx, которые я абсолютно разрываю.

По сути, у меня есть экземпляр NodeJS, работающий на дроплете в DigitalOcean.Смысл этого приложения, чтобы разместить как веб-сайт, а также API.Я хочу, чтобы оба они работали на одной и той же капле.

Я настроил свое приложение NodeJS с помощью Express для создания маршрутизации и т. Д., А затем создал http-сервер с приложением Express.Поскольку мое объяснение может привести к путанице, я включил основы кода ниже:

const API_PORT = 8080;
const WEB_PORT = 8081;

const api = express();
const web = express();

web.use(express.static(path.join(__dirname, '../build')));

web.get('//', (req, res) => {
    res.sendFile(path.join(__dirname, '../build', 'index.html'));
})

api.use((req, res, next) => {
    const ip = (req. headers['x-forwarded-for'] || '').split(',').pop()
    || req.connection.remoteAddress
    || req.socket.remoteAddress
    || req.connection.socket.remoteAddress

    if (req.headers.auth !== AUTHCODE) {
        httpError(400, 'Validation failed');
        console.warn('Bad Auth Code');
        console.warn(req.headers.auth);
        console.warn(ip);
        return (res.json('Validation failed'));
    }

    res.setHeader('Access-Control-Allow-Origin', '*');
    res.setHeader('Access-Control-Allow-Methods', '*');
    res.setHeader('Access-Control-Allow-Headers', '*');
    next();
});

Graph.route(api);

const apiServer = http.createServer(api);
const webServer = http.createServer(web);

apiServer.listen(WEB_PORT, '127.0.0.1', () => {
    console.log(`API Server is running on port ${API_PORT}`);
});
webServer.listen(API_PORT, '127.0.0.1', () => {
    console.log(`WEB Server is running on port ${WEB_PORT}`);
});

То, чего я хочу достичь, показано в коде выше, но по сути я пытаюсь прослушивать мой сервер APIна порт 8080 и мой сервер веб-сайта для прослушивания на порт 8081.

Мне сказали, что я могу использовать nginx для создания proxy_pass для этого, хотя мне не удалось заставить его работать как задумано.Ниже вы видите два примера того, что я пытался сделать!Любой, кто сможет мне помочь, навсегда станет моим героем!

server {
       listen lace.guide:443 ssl;
       server_name lace.guide www.lace.guide;
       ssl_certificate /var/my-server/ssl/myapp.crt;
       ssl_certificate_key /var/my-server/ssl/myapp.key;
       ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
       location / {
                proxy_pass http://127.0.0.1:8080/$request_uri;
                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;
        }
}

server {
       listen api.lace.guide:443 ssl default_server;
       server_name api.lace.guide www.api.lace.guide;
       ssl_certificate /var/my-server/ssl/myapp.crt;
       ssl_certificate_key /var/my-server/ssl/myapp.key;
       ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
       location / {
                proxy_pass http://127.0.0.1:8081/$request_uri;
                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;
        }
}

У меня также есть еще одна довольно странная ошибка, которая означает, что, если я получаю доступ к своему api.lace.url/something/somethingElse, на моем сервере он действительно набирает //something/somethingElse (console.log из req.url)

enter image description here

1 Ответ

0 голосов
/ 19 октября 2018

Вот пример того, как сервер и клиент живут на одном сервере и управляются с помощью nginx (настройка ssl для простоты опущена).Все запросы с префиксом /api направляются на сервер, а остальные - на клиент.

upstream client {
    server client:3000;
}

upstream api {
    server api:5000;
}

server {
    listen 80;

    location / {
        proxy_pass http://client;
    }

    location /api {
        proxy_set_header X-Forwarded-For $remote_addr;
        rewrite /api/(.*) /$1 break;
        proxy_pass http://api;
    }    
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...