У меня есть веб-сайт, работающий с 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