Доброго времени суток.
Я хочу проксировать через Nginx запрос http://localhost:3000/app на http://localhost:2000/app
Делаю так(nginx.conf) ...
...
location / {
proxy_pass http://localhost:2000;
}
location /app {
proxy_pass http://localhost:2000;
satisfy any;
auth_request /auth;
}
...
Запрос http://localhost:3000/app приводит к редирект на http://localhost:3000 Запрос http://localhost:3000/app/ завершается как я хочу. Но мне нужно без слеша. Равно ставил у location, не помогает.
Сутуация
На Nginx(:3000) приходит запрос вида http://localhost:3000/app
Как должно работать
1.Происходит запрос (Nginx) localhost:3000/app
2.С помощью модуля auth_request Nginx проверяет, есть ли доступ или нет.
3.Если доступа нет(auth сервер на :2500 возвращает 401), то возвращает 401. Иначе обращается к :2000(Node.js) и отдает контент по Uri localhost:2000/app
Все запросы, которые не /app и не начинаются на /api уходят на localhost:2000 без проверки
Реальность
При запросе http://localhost:3000/app происходит редирект 301 на http://localhost:3000 и приходит ответ с http://localhost:2000
http://localhost:3000/app/ выполняет то, что нужно(хотя стоит знак равно, тобишь полное соответствие)
Вопрос
Как мне реализовать то, что я хочу? Чего я не понимаю тут? Суть в том, что так работало, но внезапно...Перестало.
По отдельности все работает(все запросы). Через nginx нет.
Данные
ОС - Windows 7 SP1 x32
nginx.conf
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http
{
server
{
listen 3000;
location / {
proxy_pass http://localhost:2000;
}
#location = /sign-in {
# proxy_pass http://localhost:2000;
#}
location = /app {
satisfy any;
auth_request /auth;
proxy_pass http://localhost:2000/app;
}
location /api {
proxy_pass http://localhost:2500;
}
location = /auth {
proxy_pass http://localhost:2500;
proxy_pass_request_body off;
proxy_set_header Content-Length "";
proxy_set_header X-Original-URI $request_uri;
}
}
}
server.js
const express = require("express");
const bodyParser = require("body-parser");
const path = require("path");
const fetch = require("node-fetch");
var https = require('https');
var proxy = require('express-http-proxy');
var request = require('request')
const authServer = "http://localhost:2500";
const app = express();
var ssl = require('ssl-root-cas/latest');
ssl.inject();
https.globalAgent.options.ca = ssl.create();
const port = 2000;
app.use(express.static(path.join(__dirname, '/build')));
// создаем парсер для данных application/x-www-form-urlencoded
const urlencodedParser = bodyParser.urlencoded({extended: false});
app.get('/sign-in',(req,res) => {
res.sendFile(path.join(__dirname,"/build","landing.html"));
console.log("/sign-in");
});
app.get('/app',(req,res) => {
res.sendFile(path.join(__dirname,"/build","app_main.html"));
console.log("/app");
});
app.get('/',(req,res) => {
console.log("/");
return res.send("OK /");
});
app.listen(port,() => console.log("Server start"));
Update 1:
Ответ 302 от auth сервера происходил по моей вине. Поправив это, осталась та же проблема(просто если не auth возвращается 401, а не 500 как раньше)
Update 2:
Очевидно решение кроется около вот этой статьи(т.е документации) к которой я обращаюсь с самого начала появления этой проблемы. Руководствуясь ей, не понимаю, что я делаю не так http://nginx.org/ru/docs/http/ngx_http_core_module.html#location
Даже вот о моей ситуации есть
Update 3:
Авторизация(Login) HTTP/1.1 200 OK Server: nginx/1.17.2 Date: Tue, 23 Jul 2019 17:46:30 GMT Transfer-Encoding: chunked Connection: keep-alive Cache-Control: no-cache Pragma: no-cache Expires: Thu, 01 Jan 1970 00:00:00 GMT Set-Cookie: idsrv.session=48e5d3d975ccf180585ffe3c91fb1b68; path=/ Set-Cookie: .AspNetCore.Identity.Application=CfDJ8ELoSoNWqjJOgDxKtEwem1LEM0p7aar 3RcD6H87Jl-fNu-oSNxx_U0ZUbGx-MUOSGgaeOzt48Xq69ADVzTQDNiTjYvddytn3ndA53u4G890Jio9 GmY_7alZlYORb9sE9JD4zVyRNwXqT3xOIgLhk-Q6m0QbOubtz0CowANnyWDmmX7oINloLoQpYXu-vcyn NYpYS9EMKNYNsic1tX2g7HL-2Avap8mBQm7v3UlIV83mxZ_zC4db4iJQ5CCAlprXTYNSQnkcTydAk4zX IrGD4y3A2u96kA6SDsFbCH12xHwII6wavhKyd-myCsyd_tsDARD0RY8A4MRxw39odofCmPzW1BIFaWex fZ8fI42bJVHsVqaD-gTmTxrmfNHO3wSVa0FvRcAWjf435cNQp3Wly2pIJ4PT5b-F-FBCKbrUGAeiFbD4 qs1CbAf81MtExIqq1ObWRh9qENTgObxNWF-eei2EIzjEROu746nVyxngGUSgZxFCCWtzAO6nlLjAt0 1ZccCSfXgZMCX4cqeK4VacryncbndwypKurbld_FxEcbtLb0-uPkX04WNnJ-Kh-TTaQ; expires=Thu , 22 Aug 2019 17:46:30 GMT; path=/; httponly X-SourceFiles: =?UTF-8?B?QzpcVXNlcnNcQXJ0ZW1cRG9jdW1lbnRzXF9Qcm9qZWN0c1xCaW9JbnY uQmFja2VuZC5BdXRoXEJpb0ludi5CYWNrZW5kLkF1dGhcYXBpXEFjY291bnRcTG9naW5BY3Rpb25BcmE =?= X-Powered-By: ASP.NET
Запрос на /auth по сути проверка авторизован ли(есть ли куки). Если есть - отдаем Ok и nginx пускает, иначе отдает 401 и не пускает.
Понимаю, что скорее всего обычно передается логин пароль.
Суть в тол, что Nginx(по моим разумениям) залагал на location /app.
До этого я прописывал внутри location /app error_page 401 404 500 = /;
или/и error_page 401 404 500 = @access_denied
и после этого Nginx начал постоянно редиректить просто так на / без видимых причин. Изменений конфига не помогли, как и сборка занова(без конфигурации заново, просто nmake).
Возможно это из-за того, что запускаю на Windows.
Решение:
Пока что изменил название с /app на /app_index и все завелось с пол пинка.
UPDATE 1.
Возможно все проще. До этого на localhost:3000/app сидел Node.js(во время разработки), а после я пересадил на localhost:3000 Nginx сервер.
В итоге во время некоторых(не знаю каких) манипуляций в кеше сохранился Node.js -ий вариант /app. Из-за этого браузер выдавал 301, а не сервер. Из-за того, что в кеше лежало другое.
Виртуальный выделенный сервер (VDS) становится отличным выбором
Я использую framework7Пытаюсь создать Action Sheet, но столкнулся с проблемой
Делаю авторизацию gj WifiИз айфонов под рукой только iphone4
При попытке передать объект из C++ в JavaScript, используя QJSEngine, мистическим образом пропадают все поля, значение которых хранит функцииПочему...