Как запустить C # ASP.NET Core 2.1 и Node.js с разными портами в Nginx? - PullRequest
0 голосов
/ 04 декабря 2018

Итак, я установил Nginx, Node.js и C # ASP.NET Core 2.1 на мой виртуальный сервер (virtualbox) и в настоящее время работает на каждом отдельном порту.

Node.js, работающий на localhost: 3000.

.NET Core, работающий на локальном хосте: 5000.

Но тогда я хочу создать пользовательский URI для такого рода случаев.Если пользователь получает доступ к корневому сайту (только «/»), он переходит в приложение Node.js.И если пользователь получает доступ к другой странице (в данном случае, если пользователь обращается к «/ api»), я хочу, чтобы пользователь заходил в приложение .NET Core.

Теперь, если я получаю доступ к корневому сайту, он работаетдолжным образом.Например, я посещаю 192.168.56.2 (это IP-адрес моего виртуального сервера), затем браузер открывает приложение Node.js.Но если я получаю доступ к 192.168.56.2/api, он возвращает код ошибки 404.

Вот моя /etc/nginx/sites-available/default конфигурация:

server {
    listen 80 default_server;
    listen [::]:80 default_server;

    root /var/www/html;

    # Add index.php to the list if you are using PHP
    index index.html index.htm;

    root /var/www/html;

    server_name _;

    # Front-end : Node.js
    location / {
           proxy_pass           http://localhost:3000;
           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;
    }

    # Back-end : C# ASP.NET Core 2.1
    location /api/ {
        proxy_pass              http://localhost:5000;
        proxy_http_version      1.1;
        proxy_set_header        Upgrade $http_upgrade;
        proxy_set_header        Connection keep-alive;
        proxy_cache_bypass      $http_upgrade;
        proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header        X-Forwarded-Proto $scheme;
    }
}

В моем коде C # после того, как я сгенерировал код спод управлением dotnet new webapp -o mywebsite, я не изменяю ничего, кроме Properties / launchSettings.json (я удаляю localhost: 5001 в only localhost: 5000).

Неправильно ли я настроил Nginx?Или я должен что-то изменить в своем коде C #?

1 Ответ

0 голосов
/ 07 декабря 2018

Это связано с тем, что вам необходимо правильно сопоставить входные конечные точки и внутренние конечные точки.

Если ваша конечная точка /api не ожидает префикса /api в ASP.NETприложения, то вы должны включить косую черту для его спецификации http://nginx.org/r/proxy_pass, которая заставит nginx создать отображение /api/ на внешнем интерфейсе с / на внутреннем интерфейсе, например:

location /api/ {
    proxy_pass http://localhost:5000/; # trailing slash is important for mapping!
}

Более подробная информация доступна для пары ServerFault QA .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...