Vagrant и NGINX работают только на портах, отличных от 80

Для этой публикации я использую Vagrant для запуска NGINX (через Docker, но это не важно, я не думаю).

Мой бродяга выглядит следующим образом:

VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|

  #Assign Box and VM Properties
  config.vm.box = "ubuntu/trusty64"

  config.vm.provider "virtualbox" do |v|
    v.memory = 1024
    v.cpus = 2
  end

  # Network
  config.vm.network "forwarded_port", guest:80, host: 80  #--> DOESN'T WORK localhost
  config.vm.network "forwarded_port", guest:80, host:8391 #--> WORKS localhost:8391

  # Provision
  config.vm.provision :shell, inline: "sudo apt-get update"
  config.vm.provision :docker

end

Цель состоит в том, чтобы иметь возможность запускать NGINX на localhost, а не localhost:8391

Я ЗНАЮ, что NGINX прослушивает 80 из-за отображения и запускает CURL внутри Vagrant.

Ответ 1

Вы можете использовать setcap для включения портов под 1024 для пользователей без полномочий root для определенных двоичных файлов.

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

Вам нужен пакет libcap2-bin, например. с apt:

  • sudo apt-get install libcap2-bin
  • sudo setcap cap_net_bind_service = + ep/path/to/nginx-binary

Впоследствии NGINX разрешено использовать порт 80 внутри коробки в качестве пользователя бродяги. Теперь включите настройку для Vagrant на вашем хосте.

  • sudo setcap cap_net_bind_service = + ep/path/to/vagrant-binary

Ответ 2

В общем случае вы не можете привязываться к портам 1024 или ниже на хосте при использовании Vagrant, если только вы не запускаете его как root. (Как и в других приложениях, явно не рекомендуется запускать Vagrant как root.)

В качестве альтернативы, если вам не нужно подключаться к "localhost", вы можете попробовать настроить частную сеть, чтобы ваш ящик Vagrant имел отдельный IP-адрес. Подробнее см. http://docs.vagrantup.com/v2/networking/private_network.html. Это должно позволить вам подключиться к порту 80 на этом уровне IP.