Как подключить ядро ​​.net, работающее на Kestrel, с Apache, имеющим виртуальные хосты с SSL - PullRequest
0 голосов
/ 03 апреля 2019

У меня есть веб-сайт, работающий с Apache, Ubuntu 18, Виртуальные хосты, SSL, я рад, что он работает.Я хочу иметь REST-api для базы данных на том же (виртуальном) хосте (в подпапке, а не в корневом URL).Я скачал пример api-приложения (называемого demoapi) и могу его запустить.

Вопрос 1. Я не знаю, какой порт должен слушать demoapi (я искал в Интернете и прочитал ip 0.0.0.0).принял бы любой ip), поэтому теперь он слушает 0.0.0.0:5100 (изначально это было ...: 5000).

Другое дело (вопрос 2), что я не знаю, как писать команды дляАпач точно.У меня есть ключевые слова, но мои тесты не сработали.

Я получил "мастера" для ssl - Certbot ... (через letsencrypt), он создал новый файл ssl-.conf.И у меня есть только два файла в apache2 / sites-enabled (один для http и один для https), соответствующие одному доменному имени.Там я протестировал добавление некоторого кода

ProxyPreserveHost On
ProxyPass / http://167.99.197.193:5100/
ProxyPassReverse / http://167.99.197.193:5100/

Это ip моего сайта

Я также попробовал

ProxyPreserveHost On
ProxyPass / http://localhost:5100/
ProxyPassReverse / http://localhost:5100/

И то, и другое перестает работать (404).

Я сделал это "/ http ...", чтобы он перенаправлял со стартовой страницы (/) - просто для его проверки.

Существует также .conf-файл для http, но добавление этоготам прокси-код не влияет на веб-страницу.

У основного приложения .net есть один контроллер, который начинается следующим образом:

namespace demoapi.Controllers
{
  [Route("api/[controller]")]
  [ApiController]
  public class ValuesController : ControllerBase
  {
    // GET api/values
    [HttpGet]
    public ActionResult<IEnumerable<string>> Get()
    {
      return new string[] { "value1", "value2" };
    }

После запуска dotnet он говорит:

Хостинговая среда: корневой путь к содержимому разработки: / var / aspnetcore / demoapi Сейчас прослушивается: http://0.0.0.0:5100 Приложение запущено.Нажмите Ctrl + C, чтобы выключить.

Мне не хватает понимания портов и того, как должны соединяться Apache и Kestrel.Я понимаю, что Kestrel работает по протоколу http, поэтому я хочу использовать Apache - для шифрования соединения с основным приложением .net.

Редактировать 2019-04-06 В api-приложенииprogram.cs У меня есть следующий код:

    public static void Main(string[] args)
    {
        //CreateWebHostBuilder(args).Build().Run(); //original

        var configuration = new ConfigurationBuilder()
        .AddCommandLine(args)
        .Build();


        var hostUrl = configuration["hosturl"];
        if (string.IsNullOrEmpty(hostUrl))
            hostUrl = "http://0.0.0.0:5000";


        var host = new WebHostBuilder()
            .UseKestrel()
            .UseUrls(hostUrl)   // <!-- this 
            .UseContentRoot(Directory.GetCurrentDirectory())
            .UseIISIntegration()
            .UseStartup<Startup>()
            .UseConfiguration(configuration)
            .Build();

        host.Run();

    }

Итак, я запустил приложение с

sudo dotnet run --urls=http://localhost:5100/

и поместил этот код в .conf-файл (для ssl):

ProxyPreserveHost On
ProxyPass / http://localhost:5100/
ProxyPassReverse / http://localhost:5100/

Но все равно веб-браузер показывает 404.

Редактировать 2019-04-07

Я запустил приложение без аргументов: потом оно слушаетна https://localhost:5001 и http://localhost:5000, и имели команды в файле .conf (ssl):

ProxyPreserveHost On
ProxyPass / https://localhost:5001/
ProxyPassReverse / https://localhost:5001/

Веб-браузер показывает 500 - Внутренняя ошибка сервера.Но терминал показывает, что запрос достиг приложения, т.е.

info: Microsoft.AspNetCore.Hosting.Internal.WebHost[1]
   Request starting HTTP/1.1 GET http://snyggaste-taxin.com/

Я также тестировал серфинг до ... com / api / values ​​

...