Конфигурация прокси Nginx с перезаписью пути - PullRequest
0 голосов
/ 29 июня 2019

Я сделал угловое приложение, которое связывается с сервером nodeJS. Я наконец-то достиг настройки прокси-сервера dev-сервера angular со следующим файлом конфигурации, и все работает очень хорошо:

{  
    "/api/*": 
    {    
        "target": "http://localhost:8080",    
        "secure": false,    
        "pathRewrite": {"^/api" : ""}
    },
    "/sock/*": 
    {
        "target": "http://localhost:8060/socket.io/"
    }
}

Затем я попытался развернуть свое приложение с веб-сервером nginx и настроить сервер и прокси-сервер со следующей конфигурацией:

server {
        listen 3600;
        listen [::]:3600;

        server_name localhost;

        root /home/ubuntu/mahe/tchernobyl/angular_tchernobyl/dist/tchernobyl;
        index index.html index.htm index.nginx-debian.html;

        location / {
                try_files $uri $uri/ /index.html;
        }

        location /sock {
                proxy_pass http://localhost:8060/socket.io;
        }

        location /api {
                   proxy_pass http://localhost:8080;
                   sub_filter /api/ /;
        }
}

Каким-то образом это, наконец, работает с socket.io, у меня просто одно сообщение об ошибке при каждом обновлении, я не знаю почему:

WebSocket connection to 'ws://localhost:8100/sock/?EIO=3&transport=websocket&sid=qU-TS9vQwIPwZej7AAAK' failed: Error during WebSocket handshake: Unexpected response code: 400

РЕДАКТИРОВАТЬ: Эта очень вторичная проблема была решена с помощью этого решения https://github.com/socketio/socket.io/issues/1942#issuecomment-82352072


Но главная проблема в том, что я могу полностью добраться до своего экспресс-сервера, обслуживающего данные, через / api / [ключ], но не могу получить никаких данных. Для объяснения: мой экспресс-сервер работает на 8080, а Интернет - на 3600. Если я наберу http://localhost:8080/data,, я получу свои данные, но если я наберу http://localhost:3600/api/data, я получу ответ «Cannot GET / data». (обратите внимание, что я переписываю с 'sub_filter / api / /;')

В консоли появляется следующее сообщение:

Refused to execute a script because its hash, its nonce, or 'unsafe-inline' appears in neither the script-src directive nor the default-src directive of the Content Security Policy.

1 Ответ

0 голосов
/ 29 июня 2019

Это был "sub_filter / api / /;" который не переписал URL, как я думал, я заменил его на

rewrite /foo/(.*) /$1 break;

и это наконец-то сработало.

В дополнение к этой настройке, которую можно найти в первоначальном отредактированном сообщении: https://github.com/socketio/socket.io/issues/1942#issuecomment-82352072

...