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.