简体   繁体   English

如何在Windows和OS X的端口80上运行Vagrant Apache

[英]How To Run Vagrant Apache on Port 80 on Windows and OS X

Scenario 脚本

Two host machines, one Windows, one OS X, both running Vagrant and Virtualbox. 两台主机,一台Windows,一台OS X,均运行Vagrant和Virtualbox。

Problem 问题

VirtualBox on Mac cannot bind to ports below 1024 without root access. 如果没有root用户访问权限,Mac上的VirtualBox无法绑定到1024以下的端口。 Don't know how to port forward port on Windows machine 不知道如何在Windows计算机上端口转发端口

Symptoms 症状

  • Apache running perfectly on both machines Apache可以在两台机器上完美运行
  • Mac can access site.local:8080 and use pfctl to access this on site.local Mac可以访问site.local:8080并使用pfctl在site.local上访问
  • Windows machine can access site.local:8080 or site.local:80 (no port forwarding) Windows计算机可以访问site.local:8080或site.local:80(无端口转发)
  • curl site.local on guest machine returns expected output 来宾计算机上的curl site.local返回预期的输出
  • curl site.local on host machine returns connection refused 主机上的curl site.local返回连接被拒绝
  • iptables on host machine dis 主机上的iptables dis
  • Port forwarding guest port 80 to host port 80 on Mac was working until today. 到今天,将来宾端口80转发到Mac上的主机端口80的端口一直在工作 Don't know how or why. 不知道如何或为什么。 Stopped for some reason. 由于某种原因而停止。

Question

  1. How can I force VirtualBox to run as root on port 80 (regarded as a bad idea) 如何强制VirtualBox以root身份在端口80上运行(被认为是一个坏主意)
  2. Alternatively, how can I setup port forwarding on the Windows machine so that site.local:8080 is accessible at site.local? 另外,如何在Windows计算机上设置端口转发,以便可以在site.local上访问site.local:8080?
  3. Alternatively, how can I setup an OS-specific Vagrantfile that can be version controlled. 另外,如何设置可以由版本控制的特定于操作系统的Vagrantfile。

What I've tried 我尝试过的

Vagrantfile Vagrantfile

# -*- mode: ruby -*-
# vi: set ft=ruby :

# Vagrantfile API/syntax version. Don't touch unless you know what you're doing!
VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  # All Vagrant configuration is done here. The most common configuration
  # options are documented and commented below. For a complete reference,
  # please see the online documentation at vagrantup.com.

  # Every Vagrant virtual environment requires a box to build off of.
  config.vm.box = “devbox”
  config.vm.provision :shell, path: "provision.sh"

  # Disable automatic box update checking. If you disable this, then
  # boxes will only be checked for updates when the user runs
  # `vagrant box outdated`. This is not recommended.
  # config.vm.box_check_update = false

  # Create a forwarded port mapping which allows access to a specific port
  # within the machine from a port on the host machine. In the example below,
  # accessing "localhost:8080" will access port 80 on the guest machine.
  config.vm.network "forwarded_port", guest: 80, host: 80
  config.vm.network "forwarded_port", guest: 443, host: 443

  # Create a private network, which allows host-only access to the machine
  # using a specific IP.
  # config.vm.network "private_network", ip: "192.168.33.10"

  # Create a public network, which generally matched to bridged network.
  # Bridged networks make the machine appear as another physical device on
  # your network.
  config.vm.network "public_network"

  # If true, then any SSH connections made will enable agent forwarding.
  # Default value: false
  # config.ssh.forward_agent = true

  # Share an additional folder to the guest VM. The first argument is
  # the path on the host to the actual folder. The second argument is
  # the path on the guest to mount the folder. And the optional third
  # argument is a set of non-required options.
  # config.vm.synced_folder "../data", "/vagrant_data"

  # Provider-specific configuration so you can fine-tune various
  # backing providers for Vagrant. These expose provider-specific options.
  # Example for VirtualBox:
  #
  # config.vm.provider "virtualbox" do |vb|
  #   # Don't boot with headless mode
  #   vb.gui = true
  #
  #   # Use VBoxManage to customize the VM. For example to change memory:
  #   vb.customize ["modifyvm", :id, "--memory", "1024"]
  # end
  #
  # View the documentation for the provider you're using for more
  # information on available options.

  # Enable provisioning with CFEngine. CFEngine Community packages are
  # automatically installed. For example, configure the host as a
  # policy server and optionally a policy file to run:
  #
  # config.vm.provision "cfengine" do |cf|
  #   cf.am_policy_hub = true
  #   # cf.run_file = "motd.cf"
  # end
  #
  # You can also configure and bootstrap a client to an existing
  # policy server:
  #
  # config.vm.provision "cfengine" do |cf|
  #   cf.policy_server_address = "10.0.2.15"
  # end

  # Enable provisioning with Puppet stand alone.  Puppet manifests
  # are contained in a directory path relative to this Vagrantfile.
  # You will need to create the manifests directory and a manifest in
  # the file default.pp in the manifests_path directory.
  #
  # config.vm.provision "puppet" do |puppet|
  #   puppet.manifests_path = "manifests"
  #   puppet.manifest_file  = "default.pp"
  # end

  # Enable provisioning with chef solo, specifying a cookbooks path, roles
  # path, and data_bags path (all relative to this Vagrantfile), and adding
  # some recipes and/or roles.
  #
  # config.vm.provision "chef_solo" do |chef|
  #   chef.cookbooks_path = "../my-recipes/cookbooks"
  #   chef.roles_path = "../my-recipes/roles"
  #   chef.data_bags_path = "../my-recipes/data_bags"
  #   chef.add_recipe "mysql"
  #   chef.add_role "web"
  #
  #   # You may also specify custom JSON attributes:
  #   chef.json = { mysql_password: "foo" }
  # end

  # Enable provisioning with chef server, specifying the chef server URL,
  # and the path to the validation key (relative to this Vagrantfile).
  #
  # The Opscode Platform uses HTTPS. Substitute your organization for
  # ORGNAME in the URL and validation key.
  #
  # If you have your own Chef Server, use the appropriate URL, which may be
  # HTTP instead of HTTPS depending on your configuration. Also change the
  # validation key to validation.pem.
  #
  # config.vm.provision "chef_client" do |chef|
  #   chef.chef_server_url = "https://api.opscode.com/organizations/ORGNAME"
  #   chef.validation_key_path = "ORGNAME-validator.pem"
  # end
  #
  # If you're using the Opscode platform, your validator client is
  # ORGNAME-validator, replacing ORGNAME with your organization name.
  #
  # If you have your own Chef Server, the default validation client name is
  # chef-validator, unless you changed the configuration.
  #
  #   chef.validation_client_name = "ORGNAME-validator"
end

try to use following string in config file: 尝试在配置文件中使用以下字符串:

config.vm.network "forwarded_port", guest: 80, host: 80

https://docs.vagrantup.com/v2/networking/forwarded_ports.html https://docs.vagrantup.com/v2/networking/forwarded_ports.html

in additional you need to enable Public Network in the Vagrantfile 另外,您需要在Vagrantfile中启用公共网络

config.vm.network "public_network"

http://docs.vagrantup.com/v2/networking/public_network.html http://docs.vagrantup.com/v2/networking/public_network.html

If that doesnt help, may you please show your Vagrantfile? 如果那没有帮助,请您显示您的Vagrantfile吗?

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM